UNPKG

2.63 MBJavaScriptView Raw
1(function(e, a) { for(var i in a) e[i] = a[i]; if(a.__esModule) Object.defineProperty(e, "__esModule", { value: true }); }(exports,
2/******/ (() => { // webpackBootstrap
3/******/ var __webpack_modules__ = ([
4/* 0 */
5/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
6
7"use strict";
8
9var __assign = (this && this.__assign) || function () {
10 __assign = Object.assign || function(t) {
11 for (var s, i = 1, n = arguments.length; i < n; i++) {
12 s = arguments[i];
13 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
14 t[p] = s[p];
15 }
16 return t;
17 };
18 return __assign.apply(this, arguments);
19};
20var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21 if (k2 === undefined) k2 = k;
22 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
23}) : (function(o, m, k, k2) {
24 if (k2 === undefined) k2 = k;
25 o[k2] = m[k];
26}));
27var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28 Object.defineProperty(o, "default", { enumerable: true, value: v });
29}) : function(o, v) {
30 o["default"] = v;
31});
32var __importStar = (this && this.__importStar) || function (mod) {
33 if (mod && mod.__esModule) return mod;
34 var result = {};
35 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
36 __setModuleDefault(result, mod);
37 return result;
38};
39var __importDefault = (this && this.__importDefault) || function (mod) {
40 return (mod && mod.__esModule) ? mod : { "default": mod };
41};
42Object.defineProperty(exports, "__esModule", ({ value: true }));
43var shvl = __importStar(__webpack_require__(1));
44var vscode_languageserver_1 = __webpack_require__(2);
45var constant_1 = __webpack_require__(44);
46var completion_1 = __webpack_require__(45);
47var completionResolve_1 = __webpack_require__(156);
48var definition_1 = __webpack_require__(157);
49var documentHighlight_1 = __webpack_require__(158);
50var foldingRange_1 = __webpack_require__(159);
51var hover_1 = __webpack_require__(160);
52var references_1 = __webpack_require__(161);
53var rename_1 = __webpack_require__(162);
54var signatureHelp_1 = __webpack_require__(163);
55var builtin_1 = __webpack_require__(58);
56var config_1 = __importDefault(__webpack_require__(54));
57var connection_1 = __webpack_require__(137);
58var documents_1 = __webpack_require__(55);
59var parser_1 = __webpack_require__(164);
60var selectionRange_1 = __webpack_require__(367);
61var documentSymbol_1 = __webpack_require__(368);
62// lsp initialize
63connection_1.connection.onInitialize(function (param) {
64 var _a = param.initializationOptions, initializationOptions = _a === void 0 ? {} : _a;
65 var iskeyword = initializationOptions.iskeyword, runtimepath = initializationOptions.runtimepath, vimruntime = initializationOptions.vimruntime, diagnostic = initializationOptions.diagnostic, suggest = initializationOptions.suggest, indexes = initializationOptions.indexes;
66 var runtimepaths = runtimepath ? runtimepath.split(",") : [];
67 // config by user's initializationOptions
68 var conf = {
69 iskeyword: iskeyword || "",
70 runtimepath: runtimepaths,
71 vimruntime: (vimruntime || "").trim(),
72 diagnostic: __assign({ enable: true }, (diagnostic || {})),
73 snippetSupport: shvl.get(param, "capabilities.textDocument.completion.completionItem.snippetSupport"),
74 suggest: __assign({ fromRuntimepath: false, fromVimruntime: true }, (suggest || {})),
75 indexes: __assign({ runtimepath: true, gap: 100, count: 1, projectRootPatterns: constant_1.projectRootPatterns }, (indexes || {})),
76 };
77 // init config
78 config_1.default.init(conf);
79 // init builtin docs
80 builtin_1.builtinDocs.init();
81 return {
82 capabilities: {
83 textDocumentSync: vscode_languageserver_1.TextDocumentSyncKind.Incremental,
84 documentHighlightProvider: true,
85 foldingRangeProvider: true,
86 selectionRangeProvider: true,
87 documentSymbolProvider: true,
88 hoverProvider: true,
89 completionProvider: {
90 triggerCharacters: [".", ":", "#", "[", "&", "$", "<", '"', "'"],
91 resolveProvider: true,
92 },
93 signatureHelpProvider: {
94 triggerCharacters: ["(", ","],
95 },
96 definitionProvider: true,
97 referencesProvider: true,
98 renameProvider: {
99 prepareProvider: true,
100 },
101 },
102 };
103});
104// document change or open
105documents_1.documents.onDidChangeContent(function (change) {
106 parser_1.next(change.document);
107});
108documents_1.documents.onDidClose(function (evt) {
109 parser_1.unsubscribe(evt.document);
110});
111// listen for document's open/close/change
112documents_1.documents.listen(connection_1.connection);
113// handle completion
114connection_1.connection.onCompletion(completion_1.completionProvider);
115// handle completion resolve
116connection_1.connection.onCompletionResolve(completionResolve_1.completionResolveProvider);
117// handle signature help
118connection_1.connection.onSignatureHelp(signatureHelp_1.signatureHelpProvider);
119// handle hover
120connection_1.connection.onHover(hover_1.hoverProvider);
121// handle definition request
122connection_1.connection.onDefinition(definition_1.definitionProvider);
123// handle references
124connection_1.connection.onReferences(references_1.referencesProvider);
125// handle rename
126connection_1.connection.onPrepareRename(rename_1.prepareProvider);
127connection_1.connection.onRenameRequest(rename_1.renameProvider);
128// document highlight
129connection_1.connection.onDocumentHighlight(documentHighlight_1.documentHighlightProvider);
130// folding range
131connection_1.connection.onFoldingRanges(foldingRange_1.foldingRangeProvider);
132// select range
133connection_1.connection.onSelectionRanges(selectionRange_1.selectionRangeProvider);
134// document symbols
135connection_1.connection.onDocumentSymbol(documentSymbol_1.documentSymbolProvider);
136connection_1.connection.onNotification('$/change/iskeyword', function (iskeyword) {
137 config_1.default.changeByKey('iskeyword', iskeyword);
138});
139// lsp start
140connection_1.connection.listen();
141
142
143/***/ }),
144/* 1 */
145/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
146
147"use strict";
148__webpack_require__.r(__webpack_exports__);
149/* harmony export */ __webpack_require__.d(__webpack_exports__, {
150/* harmony export */ "get": () => /* binding */ t,
151/* harmony export */ "set": () => /* binding */ n
152/* harmony export */ });
153function 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}
154//# sourceMappingURL=shvl.mjs.map
155
156
157/***/ }),
158/* 2 */
159/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
160
161"use strict";
162/* --------------------------------------------------------------------------------------------
163 * Copyright (c) Microsoft Corporation. All rights reserved.
164 * Licensed under the MIT License. See License.txt in the project root for license information.
165 * ------------------------------------------------------------------------------------------ */
166/// <reference path="../typings/thenable.d.ts" />
167
168function __export(m) {
169 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
170}
171Object.defineProperty(exports, "__esModule", ({ value: true }));
172const vscode_languageserver_protocol_1 = __webpack_require__(3);
173exports.Event = vscode_languageserver_protocol_1.Event;
174const configuration_1 = __webpack_require__(33);
175const workspaceFolders_1 = __webpack_require__(35);
176const progress_1 = __webpack_require__(36);
177const Is = __webpack_require__(34);
178const UUID = __webpack_require__(37);
179// ------------- Reexport the API surface of the language worker API ----------------------
180__export(__webpack_require__(3));
181const fm = __webpack_require__(38);
182var Files;
183(function (Files) {
184 Files.uriToFilePath = fm.uriToFilePath;
185 Files.resolveGlobalNodePath = fm.resolveGlobalNodePath;
186 Files.resolveGlobalYarnPath = fm.resolveGlobalYarnPath;
187 Files.resolve = fm.resolve;
188 Files.resolveModulePath = fm.resolveModulePath;
189})(Files = exports.Files || (exports.Files = {}));
190let shutdownReceived = false;
191let exitTimer = undefined;
192function setupExitTimer() {
193 const argName = '--clientProcessId';
194 function runTimer(value) {
195 try {
196 let processId = parseInt(value);
197 if (!isNaN(processId)) {
198 exitTimer = setInterval(() => {
199 try {
200 process.kill(processId, 0);
201 }
202 catch (ex) {
203 // Parent process doesn't exist anymore. Exit the server.
204 process.exit(shutdownReceived ? 0 : 1);
205 }
206 }, 3000);
207 }
208 }
209 catch (e) {
210 // Ignore errors;
211 }
212 }
213 for (let i = 2; i < process.argv.length; i++) {
214 let arg = process.argv[i];
215 if (arg === argName && i + 1 < process.argv.length) {
216 runTimer(process.argv[i + 1]);
217 return;
218 }
219 else {
220 let args = arg.split('=');
221 if (args[0] === argName) {
222 runTimer(args[1]);
223 }
224 }
225 }
226}
227setupExitTimer();
228function null2Undefined(value) {
229 if (value === null) {
230 return void 0;
231 }
232 return value;
233}
234/**
235 * A manager for simple text documents
236 */
237class TextDocuments {
238 /**
239 * Create a new text document manager.
240 */
241 constructor(configuration) {
242 this._documents = Object.create(null);
243 this._configuration = configuration;
244 this._onDidChangeContent = new vscode_languageserver_protocol_1.Emitter();
245 this._onDidOpen = new vscode_languageserver_protocol_1.Emitter();
246 this._onDidClose = new vscode_languageserver_protocol_1.Emitter();
247 this._onDidSave = new vscode_languageserver_protocol_1.Emitter();
248 this._onWillSave = new vscode_languageserver_protocol_1.Emitter();
249 }
250 /**
251 * An event that fires when a text document managed by this manager
252 * has been opened or the content changes.
253 */
254 get onDidChangeContent() {
255 return this._onDidChangeContent.event;
256 }
257 /**
258 * An event that fires when a text document managed by this manager
259 * has been opened.
260 */
261 get onDidOpen() {
262 return this._onDidOpen.event;
263 }
264 /**
265 * An event that fires when a text document managed by this manager
266 * will be saved.
267 */
268 get onWillSave() {
269 return this._onWillSave.event;
270 }
271 /**
272 * Sets a handler that will be called if a participant wants to provide
273 * edits during a text document save.
274 */
275 onWillSaveWaitUntil(handler) {
276 this._willSaveWaitUntil = handler;
277 }
278 /**
279 * An event that fires when a text document managed by this manager
280 * has been saved.
281 */
282 get onDidSave() {
283 return this._onDidSave.event;
284 }
285 /**
286 * An event that fires when a text document managed by this manager
287 * has been closed.
288 */
289 get onDidClose() {
290 return this._onDidClose.event;
291 }
292 /**
293 * Returns the document for the given URI. Returns undefined if
294 * the document is not mananged by this instance.
295 *
296 * @param uri The text document's URI to retrieve.
297 * @return the text document or `undefined`.
298 */
299 get(uri) {
300 return this._documents[uri];
301 }
302 /**
303 * Returns all text documents managed by this instance.
304 *
305 * @return all text documents.
306 */
307 all() {
308 return Object.keys(this._documents).map(key => this._documents[key]);
309 }
310 /**
311 * Returns the URIs of all text documents managed by this instance.
312 *
313 * @return the URI's of all text documents.
314 */
315 keys() {
316 return Object.keys(this._documents);
317 }
318 /**
319 * Listens for `low level` notification on the given connection to
320 * update the text documents managed by this instance.
321 *
322 * @param connection The connection to listen on.
323 */
324 listen(connection) {
325 connection.__textDocumentSync = vscode_languageserver_protocol_1.TextDocumentSyncKind.Full;
326 connection.onDidOpenTextDocument((event) => {
327 let td = event.textDocument;
328 let document = this._configuration.create(td.uri, td.languageId, td.version, td.text);
329 this._documents[td.uri] = document;
330 let toFire = Object.freeze({ document });
331 this._onDidOpen.fire(toFire);
332 this._onDidChangeContent.fire(toFire);
333 });
334 connection.onDidChangeTextDocument((event) => {
335 let td = event.textDocument;
336 let changes = event.contentChanges;
337 if (changes.length === 0) {
338 return;
339 }
340 let document = this._documents[td.uri];
341 const { version } = td;
342 if (version === null || version === void 0) {
343 throw new Error(`Received document change event for ${td.uri} without valid version identifier`);
344 }
345 document = this._configuration.update(document, changes, version);
346 this._documents[td.uri] = document;
347 this._onDidChangeContent.fire(Object.freeze({ document }));
348 });
349 connection.onDidCloseTextDocument((event) => {
350 let document = this._documents[event.textDocument.uri];
351 if (document) {
352 delete this._documents[event.textDocument.uri];
353 this._onDidClose.fire(Object.freeze({ document }));
354 }
355 });
356 connection.onWillSaveTextDocument((event) => {
357 let document = this._documents[event.textDocument.uri];
358 if (document) {
359 this._onWillSave.fire(Object.freeze({ document, reason: event.reason }));
360 }
361 });
362 connection.onWillSaveTextDocumentWaitUntil((event, token) => {
363 let document = this._documents[event.textDocument.uri];
364 if (document && this._willSaveWaitUntil) {
365 return this._willSaveWaitUntil(Object.freeze({ document, reason: event.reason }), token);
366 }
367 else {
368 return [];
369 }
370 });
371 connection.onDidSaveTextDocument((event) => {
372 let document = this._documents[event.textDocument.uri];
373 if (document) {
374 this._onDidSave.fire(Object.freeze({ document }));
375 }
376 });
377 }
378}
379exports.TextDocuments = TextDocuments;
380/**
381 * Helps tracking error message. Equal occurences of the same
382 * message are only stored once. This class is for example
383 * useful if text documents are validated in a loop and equal
384 * error message should be folded into one.
385 */
386class ErrorMessageTracker {
387 constructor() {
388 this._messages = Object.create(null);
389 }
390 /**
391 * Add a message to the tracker.
392 *
393 * @param message The message to add.
394 */
395 add(message) {
396 let count = this._messages[message];
397 if (!count) {
398 count = 0;
399 }
400 count++;
401 this._messages[message] = count;
402 }
403 /**
404 * Send all tracked messages to the connection's window.
405 *
406 * @param connection The connection established between client and server.
407 */
408 sendErrors(connection) {
409 Object.keys(this._messages).forEach(message => {
410 connection.window.showErrorMessage(message);
411 });
412 }
413}
414exports.ErrorMessageTracker = ErrorMessageTracker;
415class RemoteConsoleImpl {
416 constructor() {
417 }
418 rawAttach(connection) {
419 this._rawConnection = connection;
420 }
421 attach(connection) {
422 this._connection = connection;
423 }
424 get connection() {
425 if (!this._connection) {
426 throw new Error('Remote is not attached to a connection yet.');
427 }
428 return this._connection;
429 }
430 fillServerCapabilities(_capabilities) {
431 }
432 initialize(_capabilities) {
433 }
434 error(message) {
435 this.send(vscode_languageserver_protocol_1.MessageType.Error, message);
436 }
437 warn(message) {
438 this.send(vscode_languageserver_protocol_1.MessageType.Warning, message);
439 }
440 info(message) {
441 this.send(vscode_languageserver_protocol_1.MessageType.Info, message);
442 }
443 log(message) {
444 this.send(vscode_languageserver_protocol_1.MessageType.Log, message);
445 }
446 send(type, message) {
447 if (this._rawConnection) {
448 this._rawConnection.sendNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, { type, message });
449 }
450 }
451}
452class _RemoteWindowImpl {
453 constructor() {
454 }
455 attach(connection) {
456 this._connection = connection;
457 }
458 get connection() {
459 if (!this._connection) {
460 throw new Error('Remote is not attached to a connection yet.');
461 }
462 return this._connection;
463 }
464 initialize(_capabilities) {
465 }
466 fillServerCapabilities(_capabilities) {
467 }
468 showErrorMessage(message, ...actions) {
469 let params = { type: vscode_languageserver_protocol_1.MessageType.Error, message, actions };
470 return this._connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
471 }
472 showWarningMessage(message, ...actions) {
473 let params = { type: vscode_languageserver_protocol_1.MessageType.Warning, message, actions };
474 return this._connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
475 }
476 showInformationMessage(message, ...actions) {
477 let params = { type: vscode_languageserver_protocol_1.MessageType.Info, message, actions };
478 return this._connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
479 }
480}
481const RemoteWindowImpl = progress_1.ProgressFeature(_RemoteWindowImpl);
482var BulkRegistration;
483(function (BulkRegistration) {
484 /**
485 * Creates a new bulk registration.
486 * @return an empty bulk registration.
487 */
488 function create() {
489 return new BulkRegistrationImpl();
490 }
491 BulkRegistration.create = create;
492})(BulkRegistration = exports.BulkRegistration || (exports.BulkRegistration = {}));
493class BulkRegistrationImpl {
494 constructor() {
495 this._registrations = [];
496 this._registered = new Set();
497 }
498 add(type, registerOptions) {
499 const method = Is.string(type) ? type : type.method;
500 if (this._registered.has(method)) {
501 throw new Error(`${method} is already added to this registration`);
502 }
503 const id = UUID.generateUuid();
504 this._registrations.push({
505 id: id,
506 method: method,
507 registerOptions: registerOptions || {}
508 });
509 this._registered.add(method);
510 }
511 asRegistrationParams() {
512 return {
513 registrations: this._registrations
514 };
515 }
516}
517var BulkUnregistration;
518(function (BulkUnregistration) {
519 function create() {
520 return new BulkUnregistrationImpl(undefined, []);
521 }
522 BulkUnregistration.create = create;
523})(BulkUnregistration = exports.BulkUnregistration || (exports.BulkUnregistration = {}));
524class BulkUnregistrationImpl {
525 constructor(_connection, unregistrations) {
526 this._connection = _connection;
527 this._unregistrations = new Map();
528 unregistrations.forEach(unregistration => {
529 this._unregistrations.set(unregistration.method, unregistration);
530 });
531 }
532 get isAttached() {
533 return !!this._connection;
534 }
535 attach(connection) {
536 this._connection = connection;
537 }
538 add(unregistration) {
539 this._unregistrations.set(unregistration.method, unregistration);
540 }
541 dispose() {
542 let unregistrations = [];
543 for (let unregistration of this._unregistrations.values()) {
544 unregistrations.push(unregistration);
545 }
546 let params = {
547 unregisterations: unregistrations
548 };
549 this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(undefined, (_error) => {
550 this._connection.console.info(`Bulk unregistration failed.`);
551 });
552 }
553 disposeSingle(arg) {
554 const method = Is.string(arg) ? arg : arg.method;
555 const unregistration = this._unregistrations.get(method);
556 if (!unregistration) {
557 return false;
558 }
559 let params = {
560 unregisterations: [unregistration]
561 };
562 this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(() => {
563 this._unregistrations.delete(method);
564 }, (_error) => {
565 this._connection.console.info(`Unregistering request handler for ${unregistration.id} failed.`);
566 });
567 return true;
568 }
569}
570class RemoteClientImpl {
571 attach(connection) {
572 this._connection = connection;
573 }
574 get connection() {
575 if (!this._connection) {
576 throw new Error('Remote is not attached to a connection yet.');
577 }
578 return this._connection;
579 }
580 initialize(_capabilities) {
581 }
582 fillServerCapabilities(_capabilities) {
583 }
584 register(typeOrRegistrations, registerOptionsOrType, registerOptions) {
585 if (typeOrRegistrations instanceof BulkRegistrationImpl) {
586 return this.registerMany(typeOrRegistrations);
587 }
588 else if (typeOrRegistrations instanceof BulkUnregistrationImpl) {
589 return this.registerSingle1(typeOrRegistrations, registerOptionsOrType, registerOptions);
590 }
591 else {
592 return this.registerSingle2(typeOrRegistrations, registerOptionsOrType);
593 }
594 }
595 registerSingle1(unregistration, type, registerOptions) {
596 const method = Is.string(type) ? type : type.method;
597 const id = UUID.generateUuid();
598 let params = {
599 registrations: [{ id, method, registerOptions: registerOptions || {} }]
600 };
601 if (!unregistration.isAttached) {
602 unregistration.attach(this._connection);
603 }
604 return this._connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then((_result) => {
605 unregistration.add({ id: id, method: method });
606 return unregistration;
607 }, (_error) => {
608 this.connection.console.info(`Registering request handler for ${method} failed.`);
609 return Promise.reject(_error);
610 });
611 }
612 registerSingle2(type, registerOptions) {
613 const method = Is.string(type) ? type : type.method;
614 const id = UUID.generateUuid();
615 let params = {
616 registrations: [{ id, method, registerOptions: registerOptions || {} }]
617 };
618 return this._connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then((_result) => {
619 return vscode_languageserver_protocol_1.Disposable.create(() => {
620 this.unregisterSingle(id, method);
621 });
622 }, (_error) => {
623 this.connection.console.info(`Registering request handler for ${method} failed.`);
624 return Promise.reject(_error);
625 });
626 }
627 unregisterSingle(id, method) {
628 let params = {
629 unregisterations: [{ id, method }]
630 };
631 return this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(undefined, (_error) => {
632 this.connection.console.info(`Unregistering request handler for ${id} failed.`);
633 });
634 }
635 registerMany(registrations) {
636 let params = registrations.asRegistrationParams();
637 return this._connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then(() => {
638 return new BulkUnregistrationImpl(this._connection, params.registrations.map(registration => { return { id: registration.id, method: registration.method }; }));
639 }, (_error) => {
640 this.connection.console.info(`Bulk registration failed.`);
641 return Promise.reject(_error);
642 });
643 }
644}
645class _RemoteWorkspaceImpl {
646 constructor() {
647 }
648 attach(connection) {
649 this._connection = connection;
650 }
651 get connection() {
652 if (!this._connection) {
653 throw new Error('Remote is not attached to a connection yet.');
654 }
655 return this._connection;
656 }
657 initialize(_capabilities) {
658 }
659 fillServerCapabilities(_capabilities) {
660 }
661 applyEdit(paramOrEdit) {
662 function isApplyWorkspaceEditParams(value) {
663 return value && !!value.edit;
664 }
665 let params = isApplyWorkspaceEditParams(paramOrEdit) ? paramOrEdit : { edit: paramOrEdit };
666 return this._connection.sendRequest(vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, params);
667 }
668}
669const RemoteWorkspaceImpl = workspaceFolders_1.WorkspaceFoldersFeature(configuration_1.ConfigurationFeature(_RemoteWorkspaceImpl));
670class TelemetryImpl {
671 constructor() {
672 }
673 attach(connection) {
674 this._connection = connection;
675 }
676 get connection() {
677 if (!this._connection) {
678 throw new Error('Remote is not attached to a connection yet.');
679 }
680 return this._connection;
681 }
682 initialize(_capabilities) {
683 }
684 fillServerCapabilities(_capabilities) {
685 }
686 logEvent(data) {
687 this._connection.sendNotification(vscode_languageserver_protocol_1.TelemetryEventNotification.type, data);
688 }
689}
690class TracerImpl {
691 constructor() {
692 this._trace = vscode_languageserver_protocol_1.Trace.Off;
693 }
694 attach(connection) {
695 this._connection = connection;
696 }
697 get connection() {
698 if (!this._connection) {
699 throw new Error('Remote is not attached to a connection yet.');
700 }
701 return this._connection;
702 }
703 initialize(_capabilities) {
704 }
705 fillServerCapabilities(_capabilities) {
706 }
707 set trace(value) {
708 this._trace = value;
709 }
710 log(message, verbose) {
711 if (this._trace === vscode_languageserver_protocol_1.Trace.Off) {
712 return;
713 }
714 this._connection.sendNotification(vscode_languageserver_protocol_1.LogTraceNotification.type, {
715 message: message,
716 verbose: this._trace === vscode_languageserver_protocol_1.Trace.Verbose ? verbose : undefined
717 });
718 }
719}
720class LanguagesImpl {
721 constructor() {
722 }
723 attach(connection) {
724 this._connection = connection;
725 }
726 get connection() {
727 if (!this._connection) {
728 throw new Error('Remote is not attached to a connection yet.');
729 }
730 return this._connection;
731 }
732 initialize(_capabilities) {
733 }
734 fillServerCapabilities(_capabilities) {
735 }
736 attachWorkDoneProgress(params) {
737 return progress_1.attachWorkDone(this.connection, params);
738 }
739 attachPartialResultProgress(_type, params) {
740 return progress_1.attachPartialResult(this.connection, params);
741 }
742}
743exports.LanguagesImpl = LanguagesImpl;
744function combineConsoleFeatures(one, two) {
745 return function (Base) {
746 return two(one(Base));
747 };
748}
749exports.combineConsoleFeatures = combineConsoleFeatures;
750function combineTelemetryFeatures(one, two) {
751 return function (Base) {
752 return two(one(Base));
753 };
754}
755exports.combineTelemetryFeatures = combineTelemetryFeatures;
756function combineTracerFeatures(one, two) {
757 return function (Base) {
758 return two(one(Base));
759 };
760}
761exports.combineTracerFeatures = combineTracerFeatures;
762function combineClientFeatures(one, two) {
763 return function (Base) {
764 return two(one(Base));
765 };
766}
767exports.combineClientFeatures = combineClientFeatures;
768function combineWindowFeatures(one, two) {
769 return function (Base) {
770 return two(one(Base));
771 };
772}
773exports.combineWindowFeatures = combineWindowFeatures;
774function combineWorkspaceFeatures(one, two) {
775 return function (Base) {
776 return two(one(Base));
777 };
778}
779exports.combineWorkspaceFeatures = combineWorkspaceFeatures;
780function combineLanguagesFeatures(one, two) {
781 return function (Base) {
782 return two(one(Base));
783 };
784}
785exports.combineLanguagesFeatures = combineLanguagesFeatures;
786function combineFeatures(one, two) {
787 function combine(one, two, func) {
788 if (one && two) {
789 return func(one, two);
790 }
791 else if (one) {
792 return one;
793 }
794 else {
795 return two;
796 }
797 }
798 let result = {
799 __brand: 'features',
800 console: combine(one.console, two.console, combineConsoleFeatures),
801 tracer: combine(one.tracer, two.tracer, combineTracerFeatures),
802 telemetry: combine(one.telemetry, two.telemetry, combineTelemetryFeatures),
803 client: combine(one.client, two.client, combineClientFeatures),
804 window: combine(one.window, two.window, combineWindowFeatures),
805 workspace: combine(one.workspace, two.workspace, combineWorkspaceFeatures)
806 };
807 return result;
808}
809exports.combineFeatures = combineFeatures;
810function createConnection(arg1, arg2, arg3, arg4) {
811 let factories;
812 let input;
813 let output;
814 let strategy;
815 if (arg1 !== void 0 && arg1.__brand === 'features') {
816 factories = arg1;
817 arg1 = arg2;
818 arg2 = arg3;
819 arg3 = arg4;
820 }
821 if (vscode_languageserver_protocol_1.ConnectionStrategy.is(arg1)) {
822 strategy = arg1;
823 }
824 else {
825 input = arg1;
826 output = arg2;
827 strategy = arg3;
828 }
829 return _createConnection(input, output, strategy, factories);
830}
831exports.createConnection = createConnection;
832function _createConnection(input, output, strategy, factories) {
833 if (!input && !output && process.argv.length > 2) {
834 let port = void 0;
835 let pipeName = void 0;
836 let argv = process.argv.slice(2);
837 for (let i = 0; i < argv.length; i++) {
838 let arg = argv[i];
839 if (arg === '--node-ipc') {
840 input = new vscode_languageserver_protocol_1.IPCMessageReader(process);
841 output = new vscode_languageserver_protocol_1.IPCMessageWriter(process);
842 break;
843 }
844 else if (arg === '--stdio') {
845 input = process.stdin;
846 output = process.stdout;
847 break;
848 }
849 else if (arg === '--socket') {
850 port = parseInt(argv[i + 1]);
851 break;
852 }
853 else if (arg === '--pipe') {
854 pipeName = argv[i + 1];
855 break;
856 }
857 else {
858 var args = arg.split('=');
859 if (args[0] === '--socket') {
860 port = parseInt(args[1]);
861 break;
862 }
863 else if (args[0] === '--pipe') {
864 pipeName = args[1];
865 break;
866 }
867 }
868 }
869 if (port) {
870 let transport = vscode_languageserver_protocol_1.createServerSocketTransport(port);
871 input = transport[0];
872 output = transport[1];
873 }
874 else if (pipeName) {
875 let transport = vscode_languageserver_protocol_1.createServerPipeTransport(pipeName);
876 input = transport[0];
877 output = transport[1];
878 }
879 }
880 var commandLineMessage = 'Use arguments of createConnection or set command line parameters: \'--node-ipc\', \'--stdio\' or \'--socket={number}\'';
881 if (!input) {
882 throw new Error('Connection input stream is not set. ' + commandLineMessage);
883 }
884 if (!output) {
885 throw new Error('Connection output stream is not set. ' + commandLineMessage);
886 }
887 // Backwards compatibility
888 if (Is.func(input.read) && Is.func(input.on)) {
889 let inputStream = input;
890 inputStream.on('end', () => {
891 process.exit(shutdownReceived ? 0 : 1);
892 });
893 inputStream.on('close', () => {
894 process.exit(shutdownReceived ? 0 : 1);
895 });
896 }
897 const logger = (factories && factories.console ? new (factories.console(RemoteConsoleImpl))() : new RemoteConsoleImpl());
898 const connection = vscode_languageserver_protocol_1.createProtocolConnection(input, output, logger, strategy);
899 logger.rawAttach(connection);
900 const tracer = (factories && factories.tracer ? new (factories.tracer(TracerImpl))() : new TracerImpl());
901 const telemetry = (factories && factories.telemetry ? new (factories.telemetry(TelemetryImpl))() : new TelemetryImpl());
902 const client = (factories && factories.client ? new (factories.client(RemoteClientImpl))() : new RemoteClientImpl());
903 const remoteWindow = (factories && factories.window ? new (factories.window(RemoteWindowImpl))() : new RemoteWindowImpl());
904 const workspace = (factories && factories.workspace ? new (factories.workspace(RemoteWorkspaceImpl))() : new RemoteWorkspaceImpl());
905 const languages = (factories && factories.languages ? new (factories.languages(LanguagesImpl))() : new LanguagesImpl());
906 const allRemotes = [logger, tracer, telemetry, client, remoteWindow, workspace, languages];
907 function asPromise(value) {
908 if (value instanceof Promise) {
909 return value;
910 }
911 else if (Is.thenable(value)) {
912 return new Promise((resolve, reject) => {
913 value.then((resolved) => resolve(resolved), (error) => reject(error));
914 });
915 }
916 else {
917 return Promise.resolve(value);
918 }
919 }
920 let shutdownHandler = undefined;
921 let initializeHandler = undefined;
922 let exitHandler = undefined;
923 let protocolConnection = {
924 listen: () => connection.listen(),
925 sendRequest: (type, ...params) => connection.sendRequest(Is.string(type) ? type : type.method, ...params),
926 onRequest: (type, handler) => connection.onRequest(type, handler),
927 sendNotification: (type, param) => {
928 const method = Is.string(type) ? type : type.method;
929 if (arguments.length === 1) {
930 connection.sendNotification(method);
931 }
932 else {
933 connection.sendNotification(method, param);
934 }
935 },
936 onNotification: (type, handler) => connection.onNotification(type, handler),
937 onProgress: connection.onProgress,
938 sendProgress: connection.sendProgress,
939 onInitialize: (handler) => initializeHandler = handler,
940 onInitialized: (handler) => connection.onNotification(vscode_languageserver_protocol_1.InitializedNotification.type, handler),
941 onShutdown: (handler) => shutdownHandler = handler,
942 onExit: (handler) => exitHandler = handler,
943 get console() { return logger; },
944 get telemetry() { return telemetry; },
945 get tracer() { return tracer; },
946 get client() { return client; },
947 get window() { return remoteWindow; },
948 get workspace() { return workspace; },
949 get languages() { return languages; },
950 onDidChangeConfiguration: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, handler),
951 onDidChangeWatchedFiles: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type, handler),
952 __textDocumentSync: undefined,
953 onDidOpenTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, handler),
954 onDidChangeTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, handler),
955 onDidCloseTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, handler),
956 onWillSaveTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type, handler),
957 onWillSaveTextDocumentWaitUntil: (handler) => connection.onRequest(vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type, handler),
958 onDidSaveTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, handler),
959 sendDiagnostics: (params) => connection.sendNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, params),
960 onHover: (handler) => connection.onRequest(vscode_languageserver_protocol_1.HoverRequest.type, (params, cancel) => {
961 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
962 }),
963 onCompletion: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CompletionRequest.type, (params, cancel) => {
964 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
965 }),
966 onCompletionResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, handler),
967 onSignatureHelp: (handler) => connection.onRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, (params, cancel) => {
968 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
969 }),
970 onDeclaration: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, (params, cancel) => {
971 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
972 }),
973 onDefinition: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, (params, cancel) => {
974 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
975 }),
976 onTypeDefinition: (handler) => connection.onRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, (params, cancel) => {
977 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
978 }),
979 onImplementation: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, (params, cancel) => {
980 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
981 }),
982 onReferences: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, (params, cancel) => {
983 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
984 }),
985 onDocumentHighlight: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, (params, cancel) => {
986 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
987 }),
988 onDocumentSymbol: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, (params, cancel) => {
989 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
990 }),
991 onWorkspaceSymbol: (handler) => connection.onRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, (params, cancel) => {
992 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
993 }),
994 onCodeAction: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, (params, cancel) => {
995 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
996 }),
997 onCodeLens: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, (params, cancel) => {
998 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
999 }),
1000 onCodeLensResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, (params, cancel) => {
1001 return handler(params, cancel);
1002 }),
1003 onDocumentFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, (params, cancel) => {
1004 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1005 }),
1006 onDocumentRangeFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, (params, cancel) => {
1007 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1008 }),
1009 onDocumentOnTypeFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, (params, cancel) => {
1010 return handler(params, cancel);
1011 }),
1012 onRenameRequest: (handler) => connection.onRequest(vscode_languageserver_protocol_1.RenameRequest.type, (params, cancel) => {
1013 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1014 }),
1015 onPrepareRename: (handler) => connection.onRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, (params, cancel) => {
1016 return handler(params, cancel);
1017 }),
1018 onDocumentLinks: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, (params, cancel) => {
1019 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1020 }),
1021 onDocumentLinkResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, (params, cancel) => {
1022 return handler(params, cancel);
1023 }),
1024 onDocumentColor: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, (params, cancel) => {
1025 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1026 }),
1027 onColorPresentation: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, (params, cancel) => {
1028 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1029 }),
1030 onFoldingRanges: (handler) => connection.onRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, (params, cancel) => {
1031 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1032 }),
1033 onSelectionRanges: (handler) => connection.onRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, (params, cancel) => {
1034 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1035 }),
1036 onExecuteCommand: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, (params, cancel) => {
1037 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1038 }),
1039 dispose: () => connection.dispose()
1040 };
1041 for (let remote of allRemotes) {
1042 remote.attach(protocolConnection);
1043 }
1044 connection.onRequest(vscode_languageserver_protocol_1.InitializeRequest.type, (params) => {
1045 const processId = params.processId;
1046 if (Is.number(processId) && exitTimer === void 0) {
1047 // We received a parent process id. Set up a timer to periodically check
1048 // if the parent is still alive.
1049 setInterval(() => {
1050 try {
1051 process.kill(processId, 0);
1052 }
1053 catch (ex) {
1054 // Parent process doesn't exist anymore. Exit the server.
1055 process.exit(shutdownReceived ? 0 : 1);
1056 }
1057 }, 3000);
1058 }
1059 if (Is.string(params.trace)) {
1060 tracer.trace = vscode_languageserver_protocol_1.Trace.fromString(params.trace);
1061 }
1062 for (let remote of allRemotes) {
1063 remote.initialize(params.capabilities);
1064 }
1065 if (initializeHandler) {
1066 let result = initializeHandler(params, new vscode_languageserver_protocol_1.CancellationTokenSource().token, progress_1.attachWorkDone(connection, params), undefined);
1067 return asPromise(result).then((value) => {
1068 if (value instanceof vscode_languageserver_protocol_1.ResponseError) {
1069 return value;
1070 }
1071 let result = value;
1072 if (!result) {
1073 result = { capabilities: {} };
1074 }
1075 let capabilities = result.capabilities;
1076 if (!capabilities) {
1077 capabilities = {};
1078 result.capabilities = capabilities;
1079 }
1080 if (capabilities.textDocumentSync === void 0 || capabilities.textDocumentSync === null) {
1081 capabilities.textDocumentSync = Is.number(protocolConnection.__textDocumentSync) ? protocolConnection.__textDocumentSync : vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
1082 }
1083 else if (!Is.number(capabilities.textDocumentSync) && !Is.number(capabilities.textDocumentSync.change)) {
1084 capabilities.textDocumentSync.change = Is.number(protocolConnection.__textDocumentSync) ? protocolConnection.__textDocumentSync : vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
1085 }
1086 for (let remote of allRemotes) {
1087 remote.fillServerCapabilities(capabilities);
1088 }
1089 return result;
1090 });
1091 }
1092 else {
1093 let result = { capabilities: { textDocumentSync: vscode_languageserver_protocol_1.TextDocumentSyncKind.None } };
1094 for (let remote of allRemotes) {
1095 remote.fillServerCapabilities(result.capabilities);
1096 }
1097 return result;
1098 }
1099 });
1100 connection.onRequest(vscode_languageserver_protocol_1.ShutdownRequest.type, () => {
1101 shutdownReceived = true;
1102 if (shutdownHandler) {
1103 return shutdownHandler(new vscode_languageserver_protocol_1.CancellationTokenSource().token);
1104 }
1105 else {
1106 return undefined;
1107 }
1108 });
1109 connection.onNotification(vscode_languageserver_protocol_1.ExitNotification.type, () => {
1110 try {
1111 if (exitHandler) {
1112 exitHandler();
1113 }
1114 }
1115 finally {
1116 if (shutdownReceived) {
1117 process.exit(0);
1118 }
1119 else {
1120 process.exit(1);
1121 }
1122 }
1123 });
1124 connection.onNotification(vscode_languageserver_protocol_1.SetTraceNotification.type, (params) => {
1125 tracer.trace = vscode_languageserver_protocol_1.Trace.fromString(params.value);
1126 });
1127 return protocolConnection;
1128}
1129// Export the protocol currently in proposed state.
1130const callHierarchy_proposed_1 = __webpack_require__(42);
1131const st = __webpack_require__(43);
1132var ProposedFeatures;
1133(function (ProposedFeatures) {
1134 ProposedFeatures.all = {
1135 __brand: 'features',
1136 languages: combineLanguagesFeatures(callHierarchy_proposed_1.CallHierarchyFeature, st.SemanticTokensFeature)
1137 };
1138 ProposedFeatures.SemanticTokensBuilder = st.SemanticTokensBuilder;
1139})(ProposedFeatures = exports.ProposedFeatures || (exports.ProposedFeatures = {}));
1140//# sourceMappingURL=main.js.map
1141
1142/***/ }),
1143/* 3 */
1144/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1145
1146"use strict";
1147/* --------------------------------------------------------------------------------------------
1148 * Copyright (c) Microsoft Corporation. All rights reserved.
1149 * Licensed under the MIT License. See License.txt in the project root for license information.
1150 * ------------------------------------------------------------------------------------------ */
1151
1152function __export(m) {
1153 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
1154}
1155Object.defineProperty(exports, "__esModule", ({ value: true }));
1156const vscode_jsonrpc_1 = __webpack_require__(4);
1157exports.ErrorCodes = vscode_jsonrpc_1.ErrorCodes;
1158exports.ResponseError = vscode_jsonrpc_1.ResponseError;
1159exports.CancellationToken = vscode_jsonrpc_1.CancellationToken;
1160exports.CancellationTokenSource = vscode_jsonrpc_1.CancellationTokenSource;
1161exports.Disposable = vscode_jsonrpc_1.Disposable;
1162exports.Event = vscode_jsonrpc_1.Event;
1163exports.Emitter = vscode_jsonrpc_1.Emitter;
1164exports.Trace = vscode_jsonrpc_1.Trace;
1165exports.TraceFormat = vscode_jsonrpc_1.TraceFormat;
1166exports.SetTraceNotification = vscode_jsonrpc_1.SetTraceNotification;
1167exports.LogTraceNotification = vscode_jsonrpc_1.LogTraceNotification;
1168exports.RequestType = vscode_jsonrpc_1.RequestType;
1169exports.RequestType0 = vscode_jsonrpc_1.RequestType0;
1170exports.NotificationType = vscode_jsonrpc_1.NotificationType;
1171exports.NotificationType0 = vscode_jsonrpc_1.NotificationType0;
1172exports.MessageReader = vscode_jsonrpc_1.MessageReader;
1173exports.MessageWriter = vscode_jsonrpc_1.MessageWriter;
1174exports.ConnectionStrategy = vscode_jsonrpc_1.ConnectionStrategy;
1175exports.StreamMessageReader = vscode_jsonrpc_1.StreamMessageReader;
1176exports.StreamMessageWriter = vscode_jsonrpc_1.StreamMessageWriter;
1177exports.IPCMessageReader = vscode_jsonrpc_1.IPCMessageReader;
1178exports.IPCMessageWriter = vscode_jsonrpc_1.IPCMessageWriter;
1179exports.createClientPipeTransport = vscode_jsonrpc_1.createClientPipeTransport;
1180exports.createServerPipeTransport = vscode_jsonrpc_1.createServerPipeTransport;
1181exports.generateRandomPipeName = vscode_jsonrpc_1.generateRandomPipeName;
1182exports.createClientSocketTransport = vscode_jsonrpc_1.createClientSocketTransport;
1183exports.createServerSocketTransport = vscode_jsonrpc_1.createServerSocketTransport;
1184exports.ProgressType = vscode_jsonrpc_1.ProgressType;
1185__export(__webpack_require__(18));
1186__export(__webpack_require__(19));
1187const callHierarchy = __webpack_require__(31);
1188const st = __webpack_require__(32);
1189var Proposed;
1190(function (Proposed) {
1191 let CallHierarchyPrepareRequest;
1192 (function (CallHierarchyPrepareRequest) {
1193 CallHierarchyPrepareRequest.method = callHierarchy.CallHierarchyPrepareRequest.method;
1194 CallHierarchyPrepareRequest.type = callHierarchy.CallHierarchyPrepareRequest.type;
1195 })(CallHierarchyPrepareRequest = Proposed.CallHierarchyPrepareRequest || (Proposed.CallHierarchyPrepareRequest = {}));
1196 let CallHierarchyIncomingCallsRequest;
1197 (function (CallHierarchyIncomingCallsRequest) {
1198 CallHierarchyIncomingCallsRequest.method = callHierarchy.CallHierarchyIncomingCallsRequest.method;
1199 CallHierarchyIncomingCallsRequest.type = callHierarchy.CallHierarchyIncomingCallsRequest.type;
1200 })(CallHierarchyIncomingCallsRequest = Proposed.CallHierarchyIncomingCallsRequest || (Proposed.CallHierarchyIncomingCallsRequest = {}));
1201 let CallHierarchyOutgoingCallsRequest;
1202 (function (CallHierarchyOutgoingCallsRequest) {
1203 CallHierarchyOutgoingCallsRequest.method = callHierarchy.CallHierarchyOutgoingCallsRequest.method;
1204 CallHierarchyOutgoingCallsRequest.type = callHierarchy.CallHierarchyOutgoingCallsRequest.type;
1205 })(CallHierarchyOutgoingCallsRequest = Proposed.CallHierarchyOutgoingCallsRequest || (Proposed.CallHierarchyOutgoingCallsRequest = {}));
1206 Proposed.SemanticTokenTypes = st.SemanticTokenTypes;
1207 Proposed.SemanticTokenModifiers = st.SemanticTokenModifiers;
1208 Proposed.SemanticTokens = st.SemanticTokens;
1209 let SemanticTokensRequest;
1210 (function (SemanticTokensRequest) {
1211 SemanticTokensRequest.method = st.SemanticTokensRequest.method;
1212 SemanticTokensRequest.type = st.SemanticTokensRequest.type;
1213 })(SemanticTokensRequest = Proposed.SemanticTokensRequest || (Proposed.SemanticTokensRequest = {}));
1214 let SemanticTokensEditsRequest;
1215 (function (SemanticTokensEditsRequest) {
1216 SemanticTokensEditsRequest.method = st.SemanticTokensEditsRequest.method;
1217 SemanticTokensEditsRequest.type = st.SemanticTokensEditsRequest.type;
1218 })(SemanticTokensEditsRequest = Proposed.SemanticTokensEditsRequest || (Proposed.SemanticTokensEditsRequest = {}));
1219 let SemanticTokensRangeRequest;
1220 (function (SemanticTokensRangeRequest) {
1221 SemanticTokensRangeRequest.method = st.SemanticTokensRangeRequest.method;
1222 SemanticTokensRangeRequest.type = st.SemanticTokensRangeRequest.type;
1223 })(SemanticTokensRangeRequest = Proposed.SemanticTokensRangeRequest || (Proposed.SemanticTokensRangeRequest = {}));
1224})(Proposed = exports.Proposed || (exports.Proposed = {}));
1225function createProtocolConnection(reader, writer, logger, strategy) {
1226 return vscode_jsonrpc_1.createMessageConnection(reader, writer, logger, strategy);
1227}
1228exports.createProtocolConnection = createProtocolConnection;
1229
1230
1231/***/ }),
1232/* 4 */
1233/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1234
1235"use strict";
1236/* --------------------------------------------------------------------------------------------
1237 * Copyright (c) Microsoft Corporation. All rights reserved.
1238 * Licensed under the MIT License. See License.txt in the project root for license information.
1239 * ------------------------------------------------------------------------------------------ */
1240/// <reference path="../typings/thenable.d.ts" />
1241
1242function __export(m) {
1243 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
1244}
1245Object.defineProperty(exports, "__esModule", ({ value: true }));
1246const Is = __webpack_require__(5);
1247const messages_1 = __webpack_require__(6);
1248exports.RequestType = messages_1.RequestType;
1249exports.RequestType0 = messages_1.RequestType0;
1250exports.RequestType1 = messages_1.RequestType1;
1251exports.RequestType2 = messages_1.RequestType2;
1252exports.RequestType3 = messages_1.RequestType3;
1253exports.RequestType4 = messages_1.RequestType4;
1254exports.RequestType5 = messages_1.RequestType5;
1255exports.RequestType6 = messages_1.RequestType6;
1256exports.RequestType7 = messages_1.RequestType7;
1257exports.RequestType8 = messages_1.RequestType8;
1258exports.RequestType9 = messages_1.RequestType9;
1259exports.ResponseError = messages_1.ResponseError;
1260exports.ErrorCodes = messages_1.ErrorCodes;
1261exports.NotificationType = messages_1.NotificationType;
1262exports.NotificationType0 = messages_1.NotificationType0;
1263exports.NotificationType1 = messages_1.NotificationType1;
1264exports.NotificationType2 = messages_1.NotificationType2;
1265exports.NotificationType3 = messages_1.NotificationType3;
1266exports.NotificationType4 = messages_1.NotificationType4;
1267exports.NotificationType5 = messages_1.NotificationType5;
1268exports.NotificationType6 = messages_1.NotificationType6;
1269exports.NotificationType7 = messages_1.NotificationType7;
1270exports.NotificationType8 = messages_1.NotificationType8;
1271exports.NotificationType9 = messages_1.NotificationType9;
1272const messageReader_1 = __webpack_require__(7);
1273exports.MessageReader = messageReader_1.MessageReader;
1274exports.StreamMessageReader = messageReader_1.StreamMessageReader;
1275exports.IPCMessageReader = messageReader_1.IPCMessageReader;
1276exports.SocketMessageReader = messageReader_1.SocketMessageReader;
1277const messageWriter_1 = __webpack_require__(9);
1278exports.MessageWriter = messageWriter_1.MessageWriter;
1279exports.StreamMessageWriter = messageWriter_1.StreamMessageWriter;
1280exports.IPCMessageWriter = messageWriter_1.IPCMessageWriter;
1281exports.SocketMessageWriter = messageWriter_1.SocketMessageWriter;
1282const events_1 = __webpack_require__(8);
1283exports.Disposable = events_1.Disposable;
1284exports.Event = events_1.Event;
1285exports.Emitter = events_1.Emitter;
1286const cancellation_1 = __webpack_require__(10);
1287exports.CancellationTokenSource = cancellation_1.CancellationTokenSource;
1288exports.CancellationToken = cancellation_1.CancellationToken;
1289const linkedMap_1 = __webpack_require__(11);
1290__export(__webpack_require__(12));
1291__export(__webpack_require__(17));
1292var CancelNotification;
1293(function (CancelNotification) {
1294 CancelNotification.type = new messages_1.NotificationType('$/cancelRequest');
1295})(CancelNotification || (CancelNotification = {}));
1296var ProgressNotification;
1297(function (ProgressNotification) {
1298 ProgressNotification.type = new messages_1.NotificationType('$/progress');
1299})(ProgressNotification || (ProgressNotification = {}));
1300class ProgressType {
1301 constructor() {
1302 }
1303}
1304exports.ProgressType = ProgressType;
1305exports.NullLogger = Object.freeze({
1306 error: () => { },
1307 warn: () => { },
1308 info: () => { },
1309 log: () => { }
1310});
1311var Trace;
1312(function (Trace) {
1313 Trace[Trace["Off"] = 0] = "Off";
1314 Trace[Trace["Messages"] = 1] = "Messages";
1315 Trace[Trace["Verbose"] = 2] = "Verbose";
1316})(Trace = exports.Trace || (exports.Trace = {}));
1317(function (Trace) {
1318 function fromString(value) {
1319 if (!Is.string(value)) {
1320 return Trace.Off;
1321 }
1322 value = value.toLowerCase();
1323 switch (value) {
1324 case 'off':
1325 return Trace.Off;
1326 case 'messages':
1327 return Trace.Messages;
1328 case 'verbose':
1329 return Trace.Verbose;
1330 default:
1331 return Trace.Off;
1332 }
1333 }
1334 Trace.fromString = fromString;
1335 function toString(value) {
1336 switch (value) {
1337 case Trace.Off:
1338 return 'off';
1339 case Trace.Messages:
1340 return 'messages';
1341 case Trace.Verbose:
1342 return 'verbose';
1343 default:
1344 return 'off';
1345 }
1346 }
1347 Trace.toString = toString;
1348})(Trace = exports.Trace || (exports.Trace = {}));
1349var TraceFormat;
1350(function (TraceFormat) {
1351 TraceFormat["Text"] = "text";
1352 TraceFormat["JSON"] = "json";
1353})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));
1354(function (TraceFormat) {
1355 function fromString(value) {
1356 value = value.toLowerCase();
1357 if (value === 'json') {
1358 return TraceFormat.JSON;
1359 }
1360 else {
1361 return TraceFormat.Text;
1362 }
1363 }
1364 TraceFormat.fromString = fromString;
1365})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));
1366var SetTraceNotification;
1367(function (SetTraceNotification) {
1368 SetTraceNotification.type = new messages_1.NotificationType('$/setTraceNotification');
1369})(SetTraceNotification = exports.SetTraceNotification || (exports.SetTraceNotification = {}));
1370var LogTraceNotification;
1371(function (LogTraceNotification) {
1372 LogTraceNotification.type = new messages_1.NotificationType('$/logTraceNotification');
1373})(LogTraceNotification = exports.LogTraceNotification || (exports.LogTraceNotification = {}));
1374var ConnectionErrors;
1375(function (ConnectionErrors) {
1376 /**
1377 * The connection is closed.
1378 */
1379 ConnectionErrors[ConnectionErrors["Closed"] = 1] = "Closed";
1380 /**
1381 * The connection got disposed.
1382 */
1383 ConnectionErrors[ConnectionErrors["Disposed"] = 2] = "Disposed";
1384 /**
1385 * The connection is already in listening mode.
1386 */
1387 ConnectionErrors[ConnectionErrors["AlreadyListening"] = 3] = "AlreadyListening";
1388})(ConnectionErrors = exports.ConnectionErrors || (exports.ConnectionErrors = {}));
1389class ConnectionError extends Error {
1390 constructor(code, message) {
1391 super(message);
1392 this.code = code;
1393 Object.setPrototypeOf(this, ConnectionError.prototype);
1394 }
1395}
1396exports.ConnectionError = ConnectionError;
1397var ConnectionStrategy;
1398(function (ConnectionStrategy) {
1399 function is(value) {
1400 let candidate = value;
1401 return candidate && Is.func(candidate.cancelUndispatched);
1402 }
1403 ConnectionStrategy.is = is;
1404})(ConnectionStrategy = exports.ConnectionStrategy || (exports.ConnectionStrategy = {}));
1405var ConnectionState;
1406(function (ConnectionState) {
1407 ConnectionState[ConnectionState["New"] = 1] = "New";
1408 ConnectionState[ConnectionState["Listening"] = 2] = "Listening";
1409 ConnectionState[ConnectionState["Closed"] = 3] = "Closed";
1410 ConnectionState[ConnectionState["Disposed"] = 4] = "Disposed";
1411})(ConnectionState || (ConnectionState = {}));
1412function _createMessageConnection(messageReader, messageWriter, logger, strategy) {
1413 let sequenceNumber = 0;
1414 let notificationSquenceNumber = 0;
1415 let unknownResponseSquenceNumber = 0;
1416 const version = '2.0';
1417 let starRequestHandler = undefined;
1418 let requestHandlers = Object.create(null);
1419 let starNotificationHandler = undefined;
1420 let notificationHandlers = Object.create(null);
1421 let progressHandlers = new Map();
1422 let timer;
1423 let messageQueue = new linkedMap_1.LinkedMap();
1424 let responsePromises = Object.create(null);
1425 let requestTokens = Object.create(null);
1426 let trace = Trace.Off;
1427 let traceFormat = TraceFormat.Text;
1428 let tracer;
1429 let state = ConnectionState.New;
1430 let errorEmitter = new events_1.Emitter();
1431 let closeEmitter = new events_1.Emitter();
1432 let unhandledNotificationEmitter = new events_1.Emitter();
1433 let unhandledProgressEmitter = new events_1.Emitter();
1434 let disposeEmitter = new events_1.Emitter();
1435 function createRequestQueueKey(id) {
1436 return 'req-' + id.toString();
1437 }
1438 function createResponseQueueKey(id) {
1439 if (id === null) {
1440 return 'res-unknown-' + (++unknownResponseSquenceNumber).toString();
1441 }
1442 else {
1443 return 'res-' + id.toString();
1444 }
1445 }
1446 function createNotificationQueueKey() {
1447 return 'not-' + (++notificationSquenceNumber).toString();
1448 }
1449 function addMessageToQueue(queue, message) {
1450 if (messages_1.isRequestMessage(message)) {
1451 queue.set(createRequestQueueKey(message.id), message);
1452 }
1453 else if (messages_1.isResponseMessage(message)) {
1454 queue.set(createResponseQueueKey(message.id), message);
1455 }
1456 else {
1457 queue.set(createNotificationQueueKey(), message);
1458 }
1459 }
1460 function cancelUndispatched(_message) {
1461 return undefined;
1462 }
1463 function isListening() {
1464 return state === ConnectionState.Listening;
1465 }
1466 function isClosed() {
1467 return state === ConnectionState.Closed;
1468 }
1469 function isDisposed() {
1470 return state === ConnectionState.Disposed;
1471 }
1472 function closeHandler() {
1473 if (state === ConnectionState.New || state === ConnectionState.Listening) {
1474 state = ConnectionState.Closed;
1475 closeEmitter.fire(undefined);
1476 }
1477 // If the connection is disposed don't sent close events.
1478 }
1479 function readErrorHandler(error) {
1480 errorEmitter.fire([error, undefined, undefined]);
1481 }
1482 function writeErrorHandler(data) {
1483 errorEmitter.fire(data);
1484 }
1485 messageReader.onClose(closeHandler);
1486 messageReader.onError(readErrorHandler);
1487 messageWriter.onClose(closeHandler);
1488 messageWriter.onError(writeErrorHandler);
1489 function triggerMessageQueue() {
1490 if (timer || messageQueue.size === 0) {
1491 return;
1492 }
1493 timer = setImmediate(() => {
1494 timer = undefined;
1495 processMessageQueue();
1496 });
1497 }
1498 function processMessageQueue() {
1499 if (messageQueue.size === 0) {
1500 return;
1501 }
1502 let message = messageQueue.shift();
1503 try {
1504 if (messages_1.isRequestMessage(message)) {
1505 handleRequest(message);
1506 }
1507 else if (messages_1.isNotificationMessage(message)) {
1508 handleNotification(message);
1509 }
1510 else if (messages_1.isResponseMessage(message)) {
1511 handleResponse(message);
1512 }
1513 else {
1514 handleInvalidMessage(message);
1515 }
1516 }
1517 finally {
1518 triggerMessageQueue();
1519 }
1520 }
1521 let callback = (message) => {
1522 try {
1523 // We have received a cancellation message. Check if the message is still in the queue
1524 // and cancel it if allowed to do so.
1525 if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {
1526 let key = createRequestQueueKey(message.params.id);
1527 let toCancel = messageQueue.get(key);
1528 if (messages_1.isRequestMessage(toCancel)) {
1529 let response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
1530 if (response && (response.error !== void 0 || response.result !== void 0)) {
1531 messageQueue.delete(key);
1532 response.id = toCancel.id;
1533 traceSendingResponse(response, message.method, Date.now());
1534 messageWriter.write(response);
1535 return;
1536 }
1537 }
1538 }
1539 addMessageToQueue(messageQueue, message);
1540 }
1541 finally {
1542 triggerMessageQueue();
1543 }
1544 };
1545 function handleRequest(requestMessage) {
1546 if (isDisposed()) {
1547 // we return here silently since we fired an event when the
1548 // connection got disposed.
1549 return;
1550 }
1551 function reply(resultOrError, method, startTime) {
1552 let message = {
1553 jsonrpc: version,
1554 id: requestMessage.id
1555 };
1556 if (resultOrError instanceof messages_1.ResponseError) {
1557 message.error = resultOrError.toJson();
1558 }
1559 else {
1560 message.result = resultOrError === void 0 ? null : resultOrError;
1561 }
1562 traceSendingResponse(message, method, startTime);
1563 messageWriter.write(message);
1564 }
1565 function replyError(error, method, startTime) {
1566 let message = {
1567 jsonrpc: version,
1568 id: requestMessage.id,
1569 error: error.toJson()
1570 };
1571 traceSendingResponse(message, method, startTime);
1572 messageWriter.write(message);
1573 }
1574 function replySuccess(result, method, startTime) {
1575 // The JSON RPC defines that a response must either have a result or an error
1576 // So we can't treat undefined as a valid response result.
1577 if (result === void 0) {
1578 result = null;
1579 }
1580 let message = {
1581 jsonrpc: version,
1582 id: requestMessage.id,
1583 result: result
1584 };
1585 traceSendingResponse(message, method, startTime);
1586 messageWriter.write(message);
1587 }
1588 traceReceivedRequest(requestMessage);
1589 let element = requestHandlers[requestMessage.method];
1590 let type;
1591 let requestHandler;
1592 if (element) {
1593 type = element.type;
1594 requestHandler = element.handler;
1595 }
1596 let startTime = Date.now();
1597 if (requestHandler || starRequestHandler) {
1598 let cancellationSource = new cancellation_1.CancellationTokenSource();
1599 let tokenKey = String(requestMessage.id);
1600 requestTokens[tokenKey] = cancellationSource;
1601 try {
1602 let handlerResult;
1603 if (requestMessage.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {
1604 handlerResult = requestHandler
1605 ? requestHandler(cancellationSource.token)
1606 : starRequestHandler(requestMessage.method, cancellationSource.token);
1607 }
1608 else if (Is.array(requestMessage.params) && (type === void 0 || type.numberOfParams > 1)) {
1609 handlerResult = requestHandler
1610 ? requestHandler(...requestMessage.params, cancellationSource.token)
1611 : starRequestHandler(requestMessage.method, ...requestMessage.params, cancellationSource.token);
1612 }
1613 else {
1614 handlerResult = requestHandler
1615 ? requestHandler(requestMessage.params, cancellationSource.token)
1616 : starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
1617 }
1618 let promise = handlerResult;
1619 if (!handlerResult) {
1620 delete requestTokens[tokenKey];
1621 replySuccess(handlerResult, requestMessage.method, startTime);
1622 }
1623 else if (promise.then) {
1624 promise.then((resultOrError) => {
1625 delete requestTokens[tokenKey];
1626 reply(resultOrError, requestMessage.method, startTime);
1627 }, error => {
1628 delete requestTokens[tokenKey];
1629 if (error instanceof messages_1.ResponseError) {
1630 replyError(error, requestMessage.method, startTime);
1631 }
1632 else if (error && Is.string(error.message)) {
1633 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
1634 }
1635 else {
1636 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
1637 }
1638 });
1639 }
1640 else {
1641 delete requestTokens[tokenKey];
1642 reply(handlerResult, requestMessage.method, startTime);
1643 }
1644 }
1645 catch (error) {
1646 delete requestTokens[tokenKey];
1647 if (error instanceof messages_1.ResponseError) {
1648 reply(error, requestMessage.method, startTime);
1649 }
1650 else if (error && Is.string(error.message)) {
1651 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
1652 }
1653 else {
1654 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
1655 }
1656 }
1657 }
1658 else {
1659 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
1660 }
1661 }
1662 function handleResponse(responseMessage) {
1663 if (isDisposed()) {
1664 // See handle request.
1665 return;
1666 }
1667 if (responseMessage.id === null) {
1668 if (responseMessage.error) {
1669 logger.error(`Received response message without id: Error is: \n${JSON.stringify(responseMessage.error, undefined, 4)}`);
1670 }
1671 else {
1672 logger.error(`Received response message without id. No further error information provided.`);
1673 }
1674 }
1675 else {
1676 let key = String(responseMessage.id);
1677 let responsePromise = responsePromises[key];
1678 traceReceivedResponse(responseMessage, responsePromise);
1679 if (responsePromise) {
1680 delete responsePromises[key];
1681 try {
1682 if (responseMessage.error) {
1683 let error = responseMessage.error;
1684 responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
1685 }
1686 else if (responseMessage.result !== void 0) {
1687 responsePromise.resolve(responseMessage.result);
1688 }
1689 else {
1690 throw new Error('Should never happen.');
1691 }
1692 }
1693 catch (error) {
1694 if (error.message) {
1695 logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
1696 }
1697 else {
1698 logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
1699 }
1700 }
1701 }
1702 }
1703 }
1704 function handleNotification(message) {
1705 if (isDisposed()) {
1706 // See handle request.
1707 return;
1708 }
1709 let type = undefined;
1710 let notificationHandler;
1711 if (message.method === CancelNotification.type.method) {
1712 notificationHandler = (params) => {
1713 let id = params.id;
1714 let source = requestTokens[String(id)];
1715 if (source) {
1716 source.cancel();
1717 }
1718 };
1719 }
1720 else {
1721 let element = notificationHandlers[message.method];
1722 if (element) {
1723 notificationHandler = element.handler;
1724 type = element.type;
1725 }
1726 }
1727 if (notificationHandler || starNotificationHandler) {
1728 try {
1729 traceReceivedNotification(message);
1730 if (message.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {
1731 notificationHandler ? notificationHandler() : starNotificationHandler(message.method);
1732 }
1733 else if (Is.array(message.params) && (type === void 0 || type.numberOfParams > 1)) {
1734 notificationHandler ? notificationHandler(...message.params) : starNotificationHandler(message.method, ...message.params);
1735 }
1736 else {
1737 notificationHandler ? notificationHandler(message.params) : starNotificationHandler(message.method, message.params);
1738 }
1739 }
1740 catch (error) {
1741 if (error.message) {
1742 logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
1743 }
1744 else {
1745 logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
1746 }
1747 }
1748 }
1749 else {
1750 unhandledNotificationEmitter.fire(message);
1751 }
1752 }
1753 function handleInvalidMessage(message) {
1754 if (!message) {
1755 logger.error('Received empty message.');
1756 return;
1757 }
1758 logger.error(`Received message which is neither a response nor a notification message:\n${JSON.stringify(message, null, 4)}`);
1759 // Test whether we find an id to reject the promise
1760 let responseMessage = message;
1761 if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {
1762 let key = String(responseMessage.id);
1763 let responseHandler = responsePromises[key];
1764 if (responseHandler) {
1765 responseHandler.reject(new Error('The received response has neither a result nor an error property.'));
1766 }
1767 }
1768 }
1769 function traceSendingRequest(message) {
1770 if (trace === Trace.Off || !tracer) {
1771 return;
1772 }
1773 if (traceFormat === TraceFormat.Text) {
1774 let data = undefined;
1775 if (trace === Trace.Verbose && message.params) {
1776 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1777 }
1778 tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
1779 }
1780 else {
1781 logLSPMessage('send-request', message);
1782 }
1783 }
1784 function traceSendingNotification(message) {
1785 if (trace === Trace.Off || !tracer) {
1786 return;
1787 }
1788 if (traceFormat === TraceFormat.Text) {
1789 let data = undefined;
1790 if (trace === Trace.Verbose) {
1791 if (message.params) {
1792 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1793 }
1794 else {
1795 data = 'No parameters provided.\n\n';
1796 }
1797 }
1798 tracer.log(`Sending notification '${message.method}'.`, data);
1799 }
1800 else {
1801 logLSPMessage('send-notification', message);
1802 }
1803 }
1804 function traceSendingResponse(message, method, startTime) {
1805 if (trace === Trace.Off || !tracer) {
1806 return;
1807 }
1808 if (traceFormat === TraceFormat.Text) {
1809 let data = undefined;
1810 if (trace === Trace.Verbose) {
1811 if (message.error && message.error.data) {
1812 data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;
1813 }
1814 else {
1815 if (message.result) {
1816 data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;
1817 }
1818 else if (message.error === void 0) {
1819 data = 'No result returned.\n\n';
1820 }
1821 }
1822 }
1823 tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
1824 }
1825 else {
1826 logLSPMessage('send-response', message);
1827 }
1828 }
1829 function traceReceivedRequest(message) {
1830 if (trace === Trace.Off || !tracer) {
1831 return;
1832 }
1833 if (traceFormat === TraceFormat.Text) {
1834 let data = undefined;
1835 if (trace === Trace.Verbose && message.params) {
1836 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1837 }
1838 tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
1839 }
1840 else {
1841 logLSPMessage('receive-request', message);
1842 }
1843 }
1844 function traceReceivedNotification(message) {
1845 if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {
1846 return;
1847 }
1848 if (traceFormat === TraceFormat.Text) {
1849 let data = undefined;
1850 if (trace === Trace.Verbose) {
1851 if (message.params) {
1852 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1853 }
1854 else {
1855 data = 'No parameters provided.\n\n';
1856 }
1857 }
1858 tracer.log(`Received notification '${message.method}'.`, data);
1859 }
1860 else {
1861 logLSPMessage('receive-notification', message);
1862 }
1863 }
1864 function traceReceivedResponse(message, responsePromise) {
1865 if (trace === Trace.Off || !tracer) {
1866 return;
1867 }
1868 if (traceFormat === TraceFormat.Text) {
1869 let data = undefined;
1870 if (trace === Trace.Verbose) {
1871 if (message.error && message.error.data) {
1872 data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;
1873 }
1874 else {
1875 if (message.result) {
1876 data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;
1877 }
1878 else if (message.error === void 0) {
1879 data = 'No result returned.\n\n';
1880 }
1881 }
1882 }
1883 if (responsePromise) {
1884 let error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : '';
1885 tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
1886 }
1887 else {
1888 tracer.log(`Received response ${message.id} without active response promise.`, data);
1889 }
1890 }
1891 else {
1892 logLSPMessage('receive-response', message);
1893 }
1894 }
1895 function logLSPMessage(type, message) {
1896 if (!tracer || trace === Trace.Off) {
1897 return;
1898 }
1899 const lspMessage = {
1900 isLSPMessage: true,
1901 type,
1902 message,
1903 timestamp: Date.now()
1904 };
1905 tracer.log(lspMessage);
1906 }
1907 function throwIfClosedOrDisposed() {
1908 if (isClosed()) {
1909 throw new ConnectionError(ConnectionErrors.Closed, 'Connection is closed.');
1910 }
1911 if (isDisposed()) {
1912 throw new ConnectionError(ConnectionErrors.Disposed, 'Connection is disposed.');
1913 }
1914 }
1915 function throwIfListening() {
1916 if (isListening()) {
1917 throw new ConnectionError(ConnectionErrors.AlreadyListening, 'Connection is already listening');
1918 }
1919 }
1920 function throwIfNotListening() {
1921 if (!isListening()) {
1922 throw new Error('Call listen() first.');
1923 }
1924 }
1925 function undefinedToNull(param) {
1926 if (param === void 0) {
1927 return null;
1928 }
1929 else {
1930 return param;
1931 }
1932 }
1933 function computeMessageParams(type, params) {
1934 let result;
1935 let numberOfParams = type.numberOfParams;
1936 switch (numberOfParams) {
1937 case 0:
1938 result = null;
1939 break;
1940 case 1:
1941 result = undefinedToNull(params[0]);
1942 break;
1943 default:
1944 result = [];
1945 for (let i = 0; i < params.length && i < numberOfParams; i++) {
1946 result.push(undefinedToNull(params[i]));
1947 }
1948 if (params.length < numberOfParams) {
1949 for (let i = params.length; i < numberOfParams; i++) {
1950 result.push(null);
1951 }
1952 }
1953 break;
1954 }
1955 return result;
1956 }
1957 let connection = {
1958 sendNotification: (type, ...params) => {
1959 throwIfClosedOrDisposed();
1960 let method;
1961 let messageParams;
1962 if (Is.string(type)) {
1963 method = type;
1964 switch (params.length) {
1965 case 0:
1966 messageParams = null;
1967 break;
1968 case 1:
1969 messageParams = params[0];
1970 break;
1971 default:
1972 messageParams = params;
1973 break;
1974 }
1975 }
1976 else {
1977 method = type.method;
1978 messageParams = computeMessageParams(type, params);
1979 }
1980 let notificationMessage = {
1981 jsonrpc: version,
1982 method: method,
1983 params: messageParams
1984 };
1985 traceSendingNotification(notificationMessage);
1986 messageWriter.write(notificationMessage);
1987 },
1988 onNotification: (type, handler) => {
1989 throwIfClosedOrDisposed();
1990 if (Is.func(type)) {
1991 starNotificationHandler = type;
1992 }
1993 else if (handler) {
1994 if (Is.string(type)) {
1995 notificationHandlers[type] = { type: undefined, handler };
1996 }
1997 else {
1998 notificationHandlers[type.method] = { type, handler };
1999 }
2000 }
2001 },
2002 onProgress: (_type, token, handler) => {
2003 if (progressHandlers.has(token)) {
2004 throw new Error(`Progress handler for token ${token} already registered`);
2005 }
2006 progressHandlers.set(token, handler);
2007 return {
2008 dispose: () => {
2009 progressHandlers.delete(token);
2010 }
2011 };
2012 },
2013 sendProgress: (_type, token, value) => {
2014 connection.sendNotification(ProgressNotification.type, { token, value });
2015 },
2016 onUnhandledProgress: unhandledProgressEmitter.event,
2017 sendRequest: (type, ...params) => {
2018 throwIfClosedOrDisposed();
2019 throwIfNotListening();
2020 let method;
2021 let messageParams;
2022 let token = undefined;
2023 if (Is.string(type)) {
2024 method = type;
2025 switch (params.length) {
2026 case 0:
2027 messageParams = null;
2028 break;
2029 case 1:
2030 // The cancellation token is optional so it can also be undefined.
2031 if (cancellation_1.CancellationToken.is(params[0])) {
2032 messageParams = null;
2033 token = params[0];
2034 }
2035 else {
2036 messageParams = undefinedToNull(params[0]);
2037 }
2038 break;
2039 default:
2040 const last = params.length - 1;
2041 if (cancellation_1.CancellationToken.is(params[last])) {
2042 token = params[last];
2043 if (params.length === 2) {
2044 messageParams = undefinedToNull(params[0]);
2045 }
2046 else {
2047 messageParams = params.slice(0, last).map(value => undefinedToNull(value));
2048 }
2049 }
2050 else {
2051 messageParams = params.map(value => undefinedToNull(value));
2052 }
2053 break;
2054 }
2055 }
2056 else {
2057 method = type.method;
2058 messageParams = computeMessageParams(type, params);
2059 let numberOfParams = type.numberOfParams;
2060 token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : undefined;
2061 }
2062 let id = sequenceNumber++;
2063 let result = new Promise((resolve, reject) => {
2064 let requestMessage = {
2065 jsonrpc: version,
2066 id: id,
2067 method: method,
2068 params: messageParams
2069 };
2070 let responsePromise = { method: method, timerStart: Date.now(), resolve, reject };
2071 traceSendingRequest(requestMessage);
2072 try {
2073 messageWriter.write(requestMessage);
2074 }
2075 catch (e) {
2076 // Writing the message failed. So we need to reject the promise.
2077 responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : 'Unknown reason'));
2078 responsePromise = null;
2079 }
2080 if (responsePromise) {
2081 responsePromises[String(id)] = responsePromise;
2082 }
2083 });
2084 if (token) {
2085 token.onCancellationRequested(() => {
2086 connection.sendNotification(CancelNotification.type, { id });
2087 });
2088 }
2089 return result;
2090 },
2091 onRequest: (type, handler) => {
2092 throwIfClosedOrDisposed();
2093 if (Is.func(type)) {
2094 starRequestHandler = type;
2095 }
2096 else if (handler) {
2097 if (Is.string(type)) {
2098 requestHandlers[type] = { type: undefined, handler };
2099 }
2100 else {
2101 requestHandlers[type.method] = { type, handler };
2102 }
2103 }
2104 },
2105 trace: (_value, _tracer, sendNotificationOrTraceOptions) => {
2106 let _sendNotification = false;
2107 let _traceFormat = TraceFormat.Text;
2108 if (sendNotificationOrTraceOptions !== void 0) {
2109 if (Is.boolean(sendNotificationOrTraceOptions)) {
2110 _sendNotification = sendNotificationOrTraceOptions;
2111 }
2112 else {
2113 _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
2114 _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
2115 }
2116 }
2117 trace = _value;
2118 traceFormat = _traceFormat;
2119 if (trace === Trace.Off) {
2120 tracer = undefined;
2121 }
2122 else {
2123 tracer = _tracer;
2124 }
2125 if (_sendNotification && !isClosed() && !isDisposed()) {
2126 connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });
2127 }
2128 },
2129 onError: errorEmitter.event,
2130 onClose: closeEmitter.event,
2131 onUnhandledNotification: unhandledNotificationEmitter.event,
2132 onDispose: disposeEmitter.event,
2133 dispose: () => {
2134 if (isDisposed()) {
2135 return;
2136 }
2137 state = ConnectionState.Disposed;
2138 disposeEmitter.fire(undefined);
2139 let error = new Error('Connection got disposed.');
2140 Object.keys(responsePromises).forEach((key) => {
2141 responsePromises[key].reject(error);
2142 });
2143 responsePromises = Object.create(null);
2144 requestTokens = Object.create(null);
2145 messageQueue = new linkedMap_1.LinkedMap();
2146 // Test for backwards compatibility
2147 if (Is.func(messageWriter.dispose)) {
2148 messageWriter.dispose();
2149 }
2150 if (Is.func(messageReader.dispose)) {
2151 messageReader.dispose();
2152 }
2153 },
2154 listen: () => {
2155 throwIfClosedOrDisposed();
2156 throwIfListening();
2157 state = ConnectionState.Listening;
2158 messageReader.listen(callback);
2159 },
2160 inspect: () => {
2161 // eslint-disable-next-line no-console
2162 console.log('inspect');
2163 }
2164 };
2165 connection.onNotification(LogTraceNotification.type, (params) => {
2166 if (trace === Trace.Off || !tracer) {
2167 return;
2168 }
2169 tracer.log(params.message, trace === Trace.Verbose ? params.verbose : undefined);
2170 });
2171 connection.onNotification(ProgressNotification.type, (params) => {
2172 const handler = progressHandlers.get(params.token);
2173 if (handler) {
2174 handler(params.value);
2175 }
2176 else {
2177 unhandledProgressEmitter.fire(params);
2178 }
2179 });
2180 return connection;
2181}
2182function isMessageReader(value) {
2183 return value.listen !== void 0 && value.read === void 0;
2184}
2185function isMessageWriter(value) {
2186 return value.write !== void 0 && value.end === void 0;
2187}
2188function createMessageConnection(input, output, logger, strategy) {
2189 if (!logger) {
2190 logger = exports.NullLogger;
2191 }
2192 let reader = isMessageReader(input) ? input : new messageReader_1.StreamMessageReader(input);
2193 let writer = isMessageWriter(output) ? output : new messageWriter_1.StreamMessageWriter(output);
2194 return _createMessageConnection(reader, writer, logger, strategy);
2195}
2196exports.createMessageConnection = createMessageConnection;
2197
2198
2199/***/ }),
2200/* 5 */
2201/***/ ((__unused_webpack_module, exports) => {
2202
2203"use strict";
2204/* --------------------------------------------------------------------------------------------
2205 * Copyright (c) Microsoft Corporation. All rights reserved.
2206 * Licensed under the MIT License. See License.txt in the project root for license information.
2207 * ------------------------------------------------------------------------------------------ */
2208
2209Object.defineProperty(exports, "__esModule", ({ value: true }));
2210function boolean(value) {
2211 return value === true || value === false;
2212}
2213exports.boolean = boolean;
2214function string(value) {
2215 return typeof value === 'string' || value instanceof String;
2216}
2217exports.string = string;
2218function number(value) {
2219 return typeof value === 'number' || value instanceof Number;
2220}
2221exports.number = number;
2222function error(value) {
2223 return value instanceof Error;
2224}
2225exports.error = error;
2226function func(value) {
2227 return typeof value === 'function';
2228}
2229exports.func = func;
2230function array(value) {
2231 return Array.isArray(value);
2232}
2233exports.array = array;
2234function stringArray(value) {
2235 return array(value) && value.every(elem => string(elem));
2236}
2237exports.stringArray = stringArray;
2238
2239
2240/***/ }),
2241/* 6 */
2242/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2243
2244"use strict";
2245/* --------------------------------------------------------------------------------------------
2246 * Copyright (c) Microsoft Corporation. All rights reserved.
2247 * Licensed under the MIT License. See License.txt in the project root for license information.
2248 * ------------------------------------------------------------------------------------------ */
2249
2250Object.defineProperty(exports, "__esModule", ({ value: true }));
2251const is = __webpack_require__(5);
2252/**
2253 * Predefined error codes.
2254 */
2255var ErrorCodes;
2256(function (ErrorCodes) {
2257 // Defined by JSON RPC
2258 ErrorCodes.ParseError = -32700;
2259 ErrorCodes.InvalidRequest = -32600;
2260 ErrorCodes.MethodNotFound = -32601;
2261 ErrorCodes.InvalidParams = -32602;
2262 ErrorCodes.InternalError = -32603;
2263 ErrorCodes.serverErrorStart = -32099;
2264 ErrorCodes.serverErrorEnd = -32000;
2265 ErrorCodes.ServerNotInitialized = -32002;
2266 ErrorCodes.UnknownErrorCode = -32001;
2267 // Defined by the protocol.
2268 ErrorCodes.RequestCancelled = -32800;
2269 ErrorCodes.ContentModified = -32801;
2270 // Defined by VSCode library.
2271 ErrorCodes.MessageWriteError = 1;
2272 ErrorCodes.MessageReadError = 2;
2273})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}));
2274/**
2275 * An error object return in a response in case a request
2276 * has failed.
2277 */
2278class ResponseError extends Error {
2279 constructor(code, message, data) {
2280 super(message);
2281 this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;
2282 this.data = data;
2283 Object.setPrototypeOf(this, ResponseError.prototype);
2284 }
2285 toJson() {
2286 return {
2287 code: this.code,
2288 message: this.message,
2289 data: this.data,
2290 };
2291 }
2292}
2293exports.ResponseError = ResponseError;
2294/**
2295 * An abstract implementation of a MessageType.
2296 */
2297class AbstractMessageType {
2298 constructor(_method, _numberOfParams) {
2299 this._method = _method;
2300 this._numberOfParams = _numberOfParams;
2301 }
2302 get method() {
2303 return this._method;
2304 }
2305 get numberOfParams() {
2306 return this._numberOfParams;
2307 }
2308}
2309exports.AbstractMessageType = AbstractMessageType;
2310/**
2311 * Classes to type request response pairs
2312 *
2313 * The type parameter RO will be removed in the next major version
2314 * of the JSON RPC library since it is a LSP concept and doesn't
2315 * belong here. For now it is tagged as default never.
2316 */
2317class RequestType0 extends AbstractMessageType {
2318 constructor(method) {
2319 super(method, 0);
2320 }
2321}
2322exports.RequestType0 = RequestType0;
2323class RequestType extends AbstractMessageType {
2324 constructor(method) {
2325 super(method, 1);
2326 }
2327}
2328exports.RequestType = RequestType;
2329class RequestType1 extends AbstractMessageType {
2330 constructor(method) {
2331 super(method, 1);
2332 }
2333}
2334exports.RequestType1 = RequestType1;
2335class RequestType2 extends AbstractMessageType {
2336 constructor(method) {
2337 super(method, 2);
2338 }
2339}
2340exports.RequestType2 = RequestType2;
2341class RequestType3 extends AbstractMessageType {
2342 constructor(method) {
2343 super(method, 3);
2344 }
2345}
2346exports.RequestType3 = RequestType3;
2347class RequestType4 extends AbstractMessageType {
2348 constructor(method) {
2349 super(method, 4);
2350 }
2351}
2352exports.RequestType4 = RequestType4;
2353class RequestType5 extends AbstractMessageType {
2354 constructor(method) {
2355 super(method, 5);
2356 }
2357}
2358exports.RequestType5 = RequestType5;
2359class RequestType6 extends AbstractMessageType {
2360 constructor(method) {
2361 super(method, 6);
2362 }
2363}
2364exports.RequestType6 = RequestType6;
2365class RequestType7 extends AbstractMessageType {
2366 constructor(method) {
2367 super(method, 7);
2368 }
2369}
2370exports.RequestType7 = RequestType7;
2371class RequestType8 extends AbstractMessageType {
2372 constructor(method) {
2373 super(method, 8);
2374 }
2375}
2376exports.RequestType8 = RequestType8;
2377class RequestType9 extends AbstractMessageType {
2378 constructor(method) {
2379 super(method, 9);
2380 }
2381}
2382exports.RequestType9 = RequestType9;
2383/**
2384 * The type parameter RO will be removed in the next major version
2385 * of the JSON RPC library since it is a LSP concept and doesn't
2386 * belong here. For now it is tagged as default never.
2387 */
2388class NotificationType extends AbstractMessageType {
2389 constructor(method) {
2390 super(method, 1);
2391 this._ = undefined;
2392 }
2393}
2394exports.NotificationType = NotificationType;
2395class NotificationType0 extends AbstractMessageType {
2396 constructor(method) {
2397 super(method, 0);
2398 }
2399}
2400exports.NotificationType0 = NotificationType0;
2401class NotificationType1 extends AbstractMessageType {
2402 constructor(method) {
2403 super(method, 1);
2404 }
2405}
2406exports.NotificationType1 = NotificationType1;
2407class NotificationType2 extends AbstractMessageType {
2408 constructor(method) {
2409 super(method, 2);
2410 }
2411}
2412exports.NotificationType2 = NotificationType2;
2413class NotificationType3 extends AbstractMessageType {
2414 constructor(method) {
2415 super(method, 3);
2416 }
2417}
2418exports.NotificationType3 = NotificationType3;
2419class NotificationType4 extends AbstractMessageType {
2420 constructor(method) {
2421 super(method, 4);
2422 }
2423}
2424exports.NotificationType4 = NotificationType4;
2425class NotificationType5 extends AbstractMessageType {
2426 constructor(method) {
2427 super(method, 5);
2428 }
2429}
2430exports.NotificationType5 = NotificationType5;
2431class NotificationType6 extends AbstractMessageType {
2432 constructor(method) {
2433 super(method, 6);
2434 }
2435}
2436exports.NotificationType6 = NotificationType6;
2437class NotificationType7 extends AbstractMessageType {
2438 constructor(method) {
2439 super(method, 7);
2440 }
2441}
2442exports.NotificationType7 = NotificationType7;
2443class NotificationType8 extends AbstractMessageType {
2444 constructor(method) {
2445 super(method, 8);
2446 }
2447}
2448exports.NotificationType8 = NotificationType8;
2449class NotificationType9 extends AbstractMessageType {
2450 constructor(method) {
2451 super(method, 9);
2452 }
2453}
2454exports.NotificationType9 = NotificationType9;
2455/**
2456 * Tests if the given message is a request message
2457 */
2458function isRequestMessage(message) {
2459 let candidate = message;
2460 return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));
2461}
2462exports.isRequestMessage = isRequestMessage;
2463/**
2464 * Tests if the given message is a notification message
2465 */
2466function isNotificationMessage(message) {
2467 let candidate = message;
2468 return candidate && is.string(candidate.method) && message.id === void 0;
2469}
2470exports.isNotificationMessage = isNotificationMessage;
2471/**
2472 * Tests if the given message is a response message
2473 */
2474function isResponseMessage(message) {
2475 let candidate = message;
2476 return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);
2477}
2478exports.isResponseMessage = isResponseMessage;
2479
2480
2481/***/ }),
2482/* 7 */
2483/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2484
2485"use strict";
2486/* --------------------------------------------------------------------------------------------
2487 * Copyright (c) Microsoft Corporation. All rights reserved.
2488 * Licensed under the MIT License. See License.txt in the project root for license information.
2489 * ------------------------------------------------------------------------------------------ */
2490
2491Object.defineProperty(exports, "__esModule", ({ value: true }));
2492const events_1 = __webpack_require__(8);
2493const Is = __webpack_require__(5);
2494let DefaultSize = 8192;
2495let CR = Buffer.from('\r', 'ascii')[0];
2496let LF = Buffer.from('\n', 'ascii')[0];
2497let CRLF = '\r\n';
2498class MessageBuffer {
2499 constructor(encoding = 'utf8') {
2500 this.encoding = encoding;
2501 this.index = 0;
2502 this.buffer = Buffer.allocUnsafe(DefaultSize);
2503 }
2504 append(chunk) {
2505 var toAppend = chunk;
2506 if (typeof (chunk) === 'string') {
2507 var str = chunk;
2508 var bufferLen = Buffer.byteLength(str, this.encoding);
2509 toAppend = Buffer.allocUnsafe(bufferLen);
2510 toAppend.write(str, 0, bufferLen, this.encoding);
2511 }
2512 if (this.buffer.length - this.index >= toAppend.length) {
2513 toAppend.copy(this.buffer, this.index, 0, toAppend.length);
2514 }
2515 else {
2516 var newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;
2517 if (this.index === 0) {
2518 this.buffer = Buffer.allocUnsafe(newSize);
2519 toAppend.copy(this.buffer, 0, 0, toAppend.length);
2520 }
2521 else {
2522 this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);
2523 }
2524 }
2525 this.index += toAppend.length;
2526 }
2527 tryReadHeaders() {
2528 let result = undefined;
2529 let current = 0;
2530 while (current + 3 < this.index && (this.buffer[current] !== CR || this.buffer[current + 1] !== LF || this.buffer[current + 2] !== CR || this.buffer[current + 3] !== LF)) {
2531 current++;
2532 }
2533 // No header / body separator found (e.g CRLFCRLF)
2534 if (current + 3 >= this.index) {
2535 return result;
2536 }
2537 result = Object.create(null);
2538 let headers = this.buffer.toString('ascii', 0, current).split(CRLF);
2539 headers.forEach((header) => {
2540 let index = header.indexOf(':');
2541 if (index === -1) {
2542 throw new Error('Message header must separate key and value using :');
2543 }
2544 let key = header.substr(0, index);
2545 let value = header.substr(index + 1).trim();
2546 result[key] = value;
2547 });
2548 let nextStart = current + 4;
2549 this.buffer = this.buffer.slice(nextStart);
2550 this.index = this.index - nextStart;
2551 return result;
2552 }
2553 tryReadContent(length) {
2554 if (this.index < length) {
2555 return null;
2556 }
2557 let result = this.buffer.toString(this.encoding, 0, length);
2558 let nextStart = length;
2559 this.buffer.copy(this.buffer, 0, nextStart);
2560 this.index = this.index - nextStart;
2561 return result;
2562 }
2563 get numberOfBytes() {
2564 return this.index;
2565 }
2566}
2567var MessageReader;
2568(function (MessageReader) {
2569 function is(value) {
2570 let candidate = value;
2571 return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) &&
2572 Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);
2573 }
2574 MessageReader.is = is;
2575})(MessageReader = exports.MessageReader || (exports.MessageReader = {}));
2576class AbstractMessageReader {
2577 constructor() {
2578 this.errorEmitter = new events_1.Emitter();
2579 this.closeEmitter = new events_1.Emitter();
2580 this.partialMessageEmitter = new events_1.Emitter();
2581 }
2582 dispose() {
2583 this.errorEmitter.dispose();
2584 this.closeEmitter.dispose();
2585 }
2586 get onError() {
2587 return this.errorEmitter.event;
2588 }
2589 fireError(error) {
2590 this.errorEmitter.fire(this.asError(error));
2591 }
2592 get onClose() {
2593 return this.closeEmitter.event;
2594 }
2595 fireClose() {
2596 this.closeEmitter.fire(undefined);
2597 }
2598 get onPartialMessage() {
2599 return this.partialMessageEmitter.event;
2600 }
2601 firePartialMessage(info) {
2602 this.partialMessageEmitter.fire(info);
2603 }
2604 asError(error) {
2605 if (error instanceof Error) {
2606 return error;
2607 }
2608 else {
2609 return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);
2610 }
2611 }
2612}
2613exports.AbstractMessageReader = AbstractMessageReader;
2614class StreamMessageReader extends AbstractMessageReader {
2615 constructor(readable, encoding = 'utf8') {
2616 super();
2617 this.readable = readable;
2618 this.buffer = new MessageBuffer(encoding);
2619 this._partialMessageTimeout = 10000;
2620 }
2621 set partialMessageTimeout(timeout) {
2622 this._partialMessageTimeout = timeout;
2623 }
2624 get partialMessageTimeout() {
2625 return this._partialMessageTimeout;
2626 }
2627 listen(callback) {
2628 this.nextMessageLength = -1;
2629 this.messageToken = 0;
2630 this.partialMessageTimer = undefined;
2631 this.callback = callback;
2632 this.readable.on('data', (data) => {
2633 this.onData(data);
2634 });
2635 this.readable.on('error', (error) => this.fireError(error));
2636 this.readable.on('close', () => this.fireClose());
2637 }
2638 onData(data) {
2639 this.buffer.append(data);
2640 while (true) {
2641 if (this.nextMessageLength === -1) {
2642 let headers = this.buffer.tryReadHeaders();
2643 if (!headers) {
2644 return;
2645 }
2646 let contentLength = headers['Content-Length'];
2647 if (!contentLength) {
2648 throw new Error('Header must provide a Content-Length property.');
2649 }
2650 let length = parseInt(contentLength);
2651 if (isNaN(length)) {
2652 throw new Error('Content-Length value must be a number.');
2653 }
2654 this.nextMessageLength = length;
2655 // Take the encoding form the header. For compatibility
2656 // treat both utf-8 and utf8 as node utf8
2657 }
2658 var msg = this.buffer.tryReadContent(this.nextMessageLength);
2659 if (msg === null) {
2660 /** We haven't received the full message yet. */
2661 this.setPartialMessageTimer();
2662 return;
2663 }
2664 this.clearPartialMessageTimer();
2665 this.nextMessageLength = -1;
2666 this.messageToken++;
2667 var json = JSON.parse(msg);
2668 this.callback(json);
2669 }
2670 }
2671 clearPartialMessageTimer() {
2672 if (this.partialMessageTimer) {
2673 clearTimeout(this.partialMessageTimer);
2674 this.partialMessageTimer = undefined;
2675 }
2676 }
2677 setPartialMessageTimer() {
2678 this.clearPartialMessageTimer();
2679 if (this._partialMessageTimeout <= 0) {
2680 return;
2681 }
2682 this.partialMessageTimer = setTimeout((token, timeout) => {
2683 this.partialMessageTimer = undefined;
2684 if (token === this.messageToken) {
2685 this.firePartialMessage({ messageToken: token, waitingTime: timeout });
2686 this.setPartialMessageTimer();
2687 }
2688 }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
2689 }
2690}
2691exports.StreamMessageReader = StreamMessageReader;
2692class IPCMessageReader extends AbstractMessageReader {
2693 constructor(process) {
2694 super();
2695 this.process = process;
2696 let eventEmitter = this.process;
2697 eventEmitter.on('error', (error) => this.fireError(error));
2698 eventEmitter.on('close', () => this.fireClose());
2699 }
2700 listen(callback) {
2701 this.process.on('message', callback);
2702 }
2703}
2704exports.IPCMessageReader = IPCMessageReader;
2705class SocketMessageReader extends StreamMessageReader {
2706 constructor(socket, encoding = 'utf-8') {
2707 super(socket, encoding);
2708 }
2709}
2710exports.SocketMessageReader = SocketMessageReader;
2711
2712
2713/***/ }),
2714/* 8 */
2715/***/ ((__unused_webpack_module, exports) => {
2716
2717"use strict";
2718/* --------------------------------------------------------------------------------------------
2719 * Copyright (c) Microsoft Corporation. All rights reserved.
2720 * Licensed under the MIT License. See License.txt in the project root for license information.
2721 * ------------------------------------------------------------------------------------------ */
2722
2723Object.defineProperty(exports, "__esModule", ({ value: true }));
2724var Disposable;
2725(function (Disposable) {
2726 function create(func) {
2727 return {
2728 dispose: func
2729 };
2730 }
2731 Disposable.create = create;
2732})(Disposable = exports.Disposable || (exports.Disposable = {}));
2733var Event;
2734(function (Event) {
2735 const _disposable = { dispose() { } };
2736 Event.None = function () { return _disposable; };
2737})(Event = exports.Event || (exports.Event = {}));
2738class CallbackList {
2739 add(callback, context = null, bucket) {
2740 if (!this._callbacks) {
2741 this._callbacks = [];
2742 this._contexts = [];
2743 }
2744 this._callbacks.push(callback);
2745 this._contexts.push(context);
2746 if (Array.isArray(bucket)) {
2747 bucket.push({ dispose: () => this.remove(callback, context) });
2748 }
2749 }
2750 remove(callback, context = null) {
2751 if (!this._callbacks) {
2752 return;
2753 }
2754 var foundCallbackWithDifferentContext = false;
2755 for (var i = 0, len = this._callbacks.length; i < len; i++) {
2756 if (this._callbacks[i] === callback) {
2757 if (this._contexts[i] === context) {
2758 // callback & context match => remove it
2759 this._callbacks.splice(i, 1);
2760 this._contexts.splice(i, 1);
2761 return;
2762 }
2763 else {
2764 foundCallbackWithDifferentContext = true;
2765 }
2766 }
2767 }
2768 if (foundCallbackWithDifferentContext) {
2769 throw new Error('When adding a listener with a context, you should remove it with the same context');
2770 }
2771 }
2772 invoke(...args) {
2773 if (!this._callbacks) {
2774 return [];
2775 }
2776 var ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
2777 for (var i = 0, len = callbacks.length; i < len; i++) {
2778 try {
2779 ret.push(callbacks[i].apply(contexts[i], args));
2780 }
2781 catch (e) {
2782 // eslint-disable-next-line no-console
2783 console.error(e);
2784 }
2785 }
2786 return ret;
2787 }
2788 isEmpty() {
2789 return !this._callbacks || this._callbacks.length === 0;
2790 }
2791 dispose() {
2792 this._callbacks = undefined;
2793 this._contexts = undefined;
2794 }
2795}
2796class Emitter {
2797 constructor(_options) {
2798 this._options = _options;
2799 }
2800 /**
2801 * For the public to allow to subscribe
2802 * to events from this Emitter
2803 */
2804 get event() {
2805 if (!this._event) {
2806 this._event = (listener, thisArgs, disposables) => {
2807 if (!this._callbacks) {
2808 this._callbacks = new CallbackList();
2809 }
2810 if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {
2811 this._options.onFirstListenerAdd(this);
2812 }
2813 this._callbacks.add(listener, thisArgs);
2814 let result;
2815 result = {
2816 dispose: () => {
2817 this._callbacks.remove(listener, thisArgs);
2818 result.dispose = Emitter._noop;
2819 if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {
2820 this._options.onLastListenerRemove(this);
2821 }
2822 }
2823 };
2824 if (Array.isArray(disposables)) {
2825 disposables.push(result);
2826 }
2827 return result;
2828 };
2829 }
2830 return this._event;
2831 }
2832 /**
2833 * To be kept private to fire an event to
2834 * subscribers
2835 */
2836 fire(event) {
2837 if (this._callbacks) {
2838 this._callbacks.invoke.call(this._callbacks, event);
2839 }
2840 }
2841 dispose() {
2842 if (this._callbacks) {
2843 this._callbacks.dispose();
2844 this._callbacks = undefined;
2845 }
2846 }
2847}
2848exports.Emitter = Emitter;
2849Emitter._noop = function () { };
2850
2851
2852/***/ }),
2853/* 9 */
2854/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2855
2856"use strict";
2857/* --------------------------------------------------------------------------------------------
2858 * Copyright (c) Microsoft Corporation. All rights reserved.
2859 * Licensed under the MIT License. See License.txt in the project root for license information.
2860 * ------------------------------------------------------------------------------------------ */
2861
2862Object.defineProperty(exports, "__esModule", ({ value: true }));
2863const events_1 = __webpack_require__(8);
2864const Is = __webpack_require__(5);
2865let ContentLength = 'Content-Length: ';
2866let CRLF = '\r\n';
2867var MessageWriter;
2868(function (MessageWriter) {
2869 function is(value) {
2870 let candidate = value;
2871 return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) &&
2872 Is.func(candidate.onError) && Is.func(candidate.write);
2873 }
2874 MessageWriter.is = is;
2875})(MessageWriter = exports.MessageWriter || (exports.MessageWriter = {}));
2876class AbstractMessageWriter {
2877 constructor() {
2878 this.errorEmitter = new events_1.Emitter();
2879 this.closeEmitter = new events_1.Emitter();
2880 }
2881 dispose() {
2882 this.errorEmitter.dispose();
2883 this.closeEmitter.dispose();
2884 }
2885 get onError() {
2886 return this.errorEmitter.event;
2887 }
2888 fireError(error, message, count) {
2889 this.errorEmitter.fire([this.asError(error), message, count]);
2890 }
2891 get onClose() {
2892 return this.closeEmitter.event;
2893 }
2894 fireClose() {
2895 this.closeEmitter.fire(undefined);
2896 }
2897 asError(error) {
2898 if (error instanceof Error) {
2899 return error;
2900 }
2901 else {
2902 return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);
2903 }
2904 }
2905}
2906exports.AbstractMessageWriter = AbstractMessageWriter;
2907class StreamMessageWriter extends AbstractMessageWriter {
2908 constructor(writable, encoding = 'utf8') {
2909 super();
2910 this.writable = writable;
2911 this.encoding = encoding;
2912 this.errorCount = 0;
2913 this.writable.on('error', (error) => this.fireError(error));
2914 this.writable.on('close', () => this.fireClose());
2915 }
2916 write(msg) {
2917 let json = JSON.stringify(msg);
2918 let contentLength = Buffer.byteLength(json, this.encoding);
2919 let headers = [
2920 ContentLength, contentLength.toString(), CRLF,
2921 CRLF
2922 ];
2923 try {
2924 // Header must be written in ASCII encoding
2925 this.writable.write(headers.join(''), 'ascii');
2926 // Now write the content. This can be written in any encoding
2927 this.writable.write(json, this.encoding);
2928 this.errorCount = 0;
2929 }
2930 catch (error) {
2931 this.errorCount++;
2932 this.fireError(error, msg, this.errorCount);
2933 }
2934 }
2935}
2936exports.StreamMessageWriter = StreamMessageWriter;
2937class IPCMessageWriter extends AbstractMessageWriter {
2938 constructor(process) {
2939 super();
2940 this.process = process;
2941 this.errorCount = 0;
2942 this.queue = [];
2943 this.sending = false;
2944 let eventEmitter = this.process;
2945 eventEmitter.on('error', (error) => this.fireError(error));
2946 eventEmitter.on('close', () => this.fireClose);
2947 }
2948 write(msg) {
2949 if (!this.sending && this.queue.length === 0) {
2950 // See https://github.com/nodejs/node/issues/7657
2951 this.doWriteMessage(msg);
2952 }
2953 else {
2954 this.queue.push(msg);
2955 }
2956 }
2957 doWriteMessage(msg) {
2958 try {
2959 if (this.process.send) {
2960 this.sending = true;
2961 this.process.send(msg, undefined, undefined, (error) => {
2962 this.sending = false;
2963 if (error) {
2964 this.errorCount++;
2965 this.fireError(error, msg, this.errorCount);
2966 }
2967 else {
2968 this.errorCount = 0;
2969 }
2970 if (this.queue.length > 0) {
2971 this.doWriteMessage(this.queue.shift());
2972 }
2973 });
2974 }
2975 }
2976 catch (error) {
2977 this.errorCount++;
2978 this.fireError(error, msg, this.errorCount);
2979 }
2980 }
2981}
2982exports.IPCMessageWriter = IPCMessageWriter;
2983class SocketMessageWriter extends AbstractMessageWriter {
2984 constructor(socket, encoding = 'utf8') {
2985 super();
2986 this.socket = socket;
2987 this.queue = [];
2988 this.sending = false;
2989 this.encoding = encoding;
2990 this.errorCount = 0;
2991 this.socket.on('error', (error) => this.fireError(error));
2992 this.socket.on('close', () => this.fireClose());
2993 }
2994 dispose() {
2995 super.dispose();
2996 this.socket.destroy();
2997 }
2998 write(msg) {
2999 if (!this.sending && this.queue.length === 0) {
3000 // See https://github.com/nodejs/node/issues/7657
3001 this.doWriteMessage(msg);
3002 }
3003 else {
3004 this.queue.push(msg);
3005 }
3006 }
3007 doWriteMessage(msg) {
3008 let json = JSON.stringify(msg);
3009 let contentLength = Buffer.byteLength(json, this.encoding);
3010 let headers = [
3011 ContentLength, contentLength.toString(), CRLF,
3012 CRLF
3013 ];
3014 try {
3015 // Header must be written in ASCII encoding
3016 this.sending = true;
3017 this.socket.write(headers.join(''), 'ascii', (error) => {
3018 if (error) {
3019 this.handleError(error, msg);
3020 }
3021 try {
3022 // Now write the content. This can be written in any encoding
3023 this.socket.write(json, this.encoding, (error) => {
3024 this.sending = false;
3025 if (error) {
3026 this.handleError(error, msg);
3027 }
3028 else {
3029 this.errorCount = 0;
3030 }
3031 if (this.queue.length > 0) {
3032 this.doWriteMessage(this.queue.shift());
3033 }
3034 });
3035 }
3036 catch (error) {
3037 this.handleError(error, msg);
3038 }
3039 });
3040 }
3041 catch (error) {
3042 this.handleError(error, msg);
3043 }
3044 }
3045 handleError(error, msg) {
3046 this.errorCount++;
3047 this.fireError(error, msg, this.errorCount);
3048 }
3049}
3050exports.SocketMessageWriter = SocketMessageWriter;
3051
3052
3053/***/ }),
3054/* 10 */
3055/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
3056
3057"use strict";
3058/*---------------------------------------------------------------------------------------------
3059 * Copyright (c) Microsoft Corporation. All rights reserved.
3060 * Licensed under the MIT License. See License.txt in the project root for license information.
3061 *--------------------------------------------------------------------------------------------*/
3062
3063Object.defineProperty(exports, "__esModule", ({ value: true }));
3064const events_1 = __webpack_require__(8);
3065const Is = __webpack_require__(5);
3066var CancellationToken;
3067(function (CancellationToken) {
3068 CancellationToken.None = Object.freeze({
3069 isCancellationRequested: false,
3070 onCancellationRequested: events_1.Event.None
3071 });
3072 CancellationToken.Cancelled = Object.freeze({
3073 isCancellationRequested: true,
3074 onCancellationRequested: events_1.Event.None
3075 });
3076 function is(value) {
3077 let candidate = value;
3078 return candidate && (candidate === CancellationToken.None
3079 || candidate === CancellationToken.Cancelled
3080 || (Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested));
3081 }
3082 CancellationToken.is = is;
3083})(CancellationToken = exports.CancellationToken || (exports.CancellationToken = {}));
3084const shortcutEvent = Object.freeze(function (callback, context) {
3085 let handle = setTimeout(callback.bind(context), 0);
3086 return { dispose() { clearTimeout(handle); } };
3087});
3088class MutableToken {
3089 constructor() {
3090 this._isCancelled = false;
3091 }
3092 cancel() {
3093 if (!this._isCancelled) {
3094 this._isCancelled = true;
3095 if (this._emitter) {
3096 this._emitter.fire(undefined);
3097 this.dispose();
3098 }
3099 }
3100 }
3101 get isCancellationRequested() {
3102 return this._isCancelled;
3103 }
3104 get onCancellationRequested() {
3105 if (this._isCancelled) {
3106 return shortcutEvent;
3107 }
3108 if (!this._emitter) {
3109 this._emitter = new events_1.Emitter();
3110 }
3111 return this._emitter.event;
3112 }
3113 dispose() {
3114 if (this._emitter) {
3115 this._emitter.dispose();
3116 this._emitter = undefined;
3117 }
3118 }
3119}
3120class CancellationTokenSource {
3121 get token() {
3122 if (!this._token) {
3123 // be lazy and create the token only when
3124 // actually needed
3125 this._token = new MutableToken();
3126 }
3127 return this._token;
3128 }
3129 cancel() {
3130 if (!this._token) {
3131 // save an object by returning the default
3132 // cancelled token when cancellation happens
3133 // before someone asks for the token
3134 this._token = CancellationToken.Cancelled;
3135 }
3136 else {
3137 this._token.cancel();
3138 }
3139 }
3140 dispose() {
3141 if (!this._token) {
3142 // ensure to initialize with an empty token if we had none
3143 this._token = CancellationToken.None;
3144 }
3145 else if (this._token instanceof MutableToken) {
3146 // actually dispose
3147 this._token.dispose();
3148 }
3149 }
3150}
3151exports.CancellationTokenSource = CancellationTokenSource;
3152
3153
3154/***/ }),
3155/* 11 */
3156/***/ ((__unused_webpack_module, exports) => {
3157
3158"use strict";
3159
3160/*---------------------------------------------------------------------------------------------
3161 * Copyright (c) Microsoft Corporation. All rights reserved.
3162 * Licensed under the MIT License. See License.txt in the project root for license information.
3163 *--------------------------------------------------------------------------------------------*/
3164Object.defineProperty(exports, "__esModule", ({ value: true }));
3165var Touch;
3166(function (Touch) {
3167 Touch.None = 0;
3168 Touch.First = 1;
3169 Touch.Last = 2;
3170})(Touch = exports.Touch || (exports.Touch = {}));
3171class LinkedMap {
3172 constructor() {
3173 this._map = new Map();
3174 this._head = undefined;
3175 this._tail = undefined;
3176 this._size = 0;
3177 }
3178 clear() {
3179 this._map.clear();
3180 this._head = undefined;
3181 this._tail = undefined;
3182 this._size = 0;
3183 }
3184 isEmpty() {
3185 return !this._head && !this._tail;
3186 }
3187 get size() {
3188 return this._size;
3189 }
3190 has(key) {
3191 return this._map.has(key);
3192 }
3193 get(key) {
3194 const item = this._map.get(key);
3195 if (!item) {
3196 return undefined;
3197 }
3198 return item.value;
3199 }
3200 set(key, value, touch = Touch.None) {
3201 let item = this._map.get(key);
3202 if (item) {
3203 item.value = value;
3204 if (touch !== Touch.None) {
3205 this.touch(item, touch);
3206 }
3207 }
3208 else {
3209 item = { key, value, next: undefined, previous: undefined };
3210 switch (touch) {
3211 case Touch.None:
3212 this.addItemLast(item);
3213 break;
3214 case Touch.First:
3215 this.addItemFirst(item);
3216 break;
3217 case Touch.Last:
3218 this.addItemLast(item);
3219 break;
3220 default:
3221 this.addItemLast(item);
3222 break;
3223 }
3224 this._map.set(key, item);
3225 this._size++;
3226 }
3227 }
3228 delete(key) {
3229 const item = this._map.get(key);
3230 if (!item) {
3231 return false;
3232 }
3233 this._map.delete(key);
3234 this.removeItem(item);
3235 this._size--;
3236 return true;
3237 }
3238 shift() {
3239 if (!this._head && !this._tail) {
3240 return undefined;
3241 }
3242 if (!this._head || !this._tail) {
3243 throw new Error('Invalid list');
3244 }
3245 const item = this._head;
3246 this._map.delete(item.key);
3247 this.removeItem(item);
3248 this._size--;
3249 return item.value;
3250 }
3251 forEach(callbackfn, thisArg) {
3252 let current = this._head;
3253 while (current) {
3254 if (thisArg) {
3255 callbackfn.bind(thisArg)(current.value, current.key, this);
3256 }
3257 else {
3258 callbackfn(current.value, current.key, this);
3259 }
3260 current = current.next;
3261 }
3262 }
3263 forEachReverse(callbackfn, thisArg) {
3264 let current = this._tail;
3265 while (current) {
3266 if (thisArg) {
3267 callbackfn.bind(thisArg)(current.value, current.key, this);
3268 }
3269 else {
3270 callbackfn(current.value, current.key, this);
3271 }
3272 current = current.previous;
3273 }
3274 }
3275 values() {
3276 let result = [];
3277 let current = this._head;
3278 while (current) {
3279 result.push(current.value);
3280 current = current.next;
3281 }
3282 return result;
3283 }
3284 keys() {
3285 let result = [];
3286 let current = this._head;
3287 while (current) {
3288 result.push(current.key);
3289 current = current.next;
3290 }
3291 return result;
3292 }
3293 /* JSON RPC run on es5 which has no Symbol.iterator
3294 public keys(): IterableIterator<K> {
3295 let current = this._head;
3296 let iterator: IterableIterator<K> = {
3297 [Symbol.iterator]() {
3298 return iterator;
3299 },
3300 next():IteratorResult<K> {
3301 if (current) {
3302 let result = { value: current.key, done: false };
3303 current = current.next;
3304 return result;
3305 } else {
3306 return { value: undefined, done: true };
3307 }
3308 }
3309 };
3310 return iterator;
3311 }
3312
3313 public values(): IterableIterator<V> {
3314 let current = this._head;
3315 let iterator: IterableIterator<V> = {
3316 [Symbol.iterator]() {
3317 return iterator;
3318 },
3319 next():IteratorResult<V> {
3320 if (current) {
3321 let result = { value: current.value, done: false };
3322 current = current.next;
3323 return result;
3324 } else {
3325 return { value: undefined, done: true };
3326 }
3327 }
3328 };
3329 return iterator;
3330 }
3331 */
3332 addItemFirst(item) {
3333 // First time Insert
3334 if (!this._head && !this._tail) {
3335 this._tail = item;
3336 }
3337 else if (!this._head) {
3338 throw new Error('Invalid list');
3339 }
3340 else {
3341 item.next = this._head;
3342 this._head.previous = item;
3343 }
3344 this._head = item;
3345 }
3346 addItemLast(item) {
3347 // First time Insert
3348 if (!this._head && !this._tail) {
3349 this._head = item;
3350 }
3351 else if (!this._tail) {
3352 throw new Error('Invalid list');
3353 }
3354 else {
3355 item.previous = this._tail;
3356 this._tail.next = item;
3357 }
3358 this._tail = item;
3359 }
3360 removeItem(item) {
3361 if (item === this._head && item === this._tail) {
3362 this._head = undefined;
3363 this._tail = undefined;
3364 }
3365 else if (item === this._head) {
3366 this._head = item.next;
3367 }
3368 else if (item === this._tail) {
3369 this._tail = item.previous;
3370 }
3371 else {
3372 const next = item.next;
3373 const previous = item.previous;
3374 if (!next || !previous) {
3375 throw new Error('Invalid list');
3376 }
3377 next.previous = previous;
3378 previous.next = next;
3379 }
3380 }
3381 touch(item, touch) {
3382 if (!this._head || !this._tail) {
3383 throw new Error('Invalid list');
3384 }
3385 if ((touch !== Touch.First && touch !== Touch.Last)) {
3386 return;
3387 }
3388 if (touch === Touch.First) {
3389 if (item === this._head) {
3390 return;
3391 }
3392 const next = item.next;
3393 const previous = item.previous;
3394 // Unlink the item
3395 if (item === this._tail) {
3396 // previous must be defined since item was not head but is tail
3397 // So there are more than on item in the map
3398 previous.next = undefined;
3399 this._tail = previous;
3400 }
3401 else {
3402 // Both next and previous are not undefined since item was neither head nor tail.
3403 next.previous = previous;
3404 previous.next = next;
3405 }
3406 // Insert the node at head
3407 item.previous = undefined;
3408 item.next = this._head;
3409 this._head.previous = item;
3410 this._head = item;
3411 }
3412 else if (touch === Touch.Last) {
3413 if (item === this._tail) {
3414 return;
3415 }
3416 const next = item.next;
3417 const previous = item.previous;
3418 // Unlink the item.
3419 if (item === this._head) {
3420 // next must be defined since item was not tail but is head
3421 // So there are more than on item in the map
3422 next.previous = undefined;
3423 this._head = next;
3424 }
3425 else {
3426 // Both next and previous are not undefined since item was neither head nor tail.
3427 next.previous = previous;
3428 previous.next = next;
3429 }
3430 item.next = undefined;
3431 item.previous = this._tail;
3432 this._tail.next = item;
3433 this._tail = item;
3434 }
3435 }
3436}
3437exports.LinkedMap = LinkedMap;
3438
3439
3440/***/ }),
3441/* 12 */
3442/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
3443
3444"use strict";
3445/* --------------------------------------------------------------------------------------------
3446 * Copyright (c) Microsoft Corporation. All rights reserved.
3447 * Licensed under the MIT License. See License.txt in the project root for license information.
3448 * ------------------------------------------------------------------------------------------ */
3449
3450Object.defineProperty(exports, "__esModule", ({ value: true }));
3451const path_1 = __webpack_require__(13);
3452const os_1 = __webpack_require__(14);
3453const crypto_1 = __webpack_require__(15);
3454const net_1 = __webpack_require__(16);
3455const messageReader_1 = __webpack_require__(7);
3456const messageWriter_1 = __webpack_require__(9);
3457function generateRandomPipeName() {
3458 const randomSuffix = crypto_1.randomBytes(21).toString('hex');
3459 if (process.platform === 'win32') {
3460 return `\\\\.\\pipe\\vscode-jsonrpc-${randomSuffix}-sock`;
3461 }
3462 else {
3463 // Mac/Unix: use socket file
3464 return path_1.join(os_1.tmpdir(), `vscode-${randomSuffix}.sock`);
3465 }
3466}
3467exports.generateRandomPipeName = generateRandomPipeName;
3468function createClientPipeTransport(pipeName, encoding = 'utf-8') {
3469 let connectResolve;
3470 let connected = new Promise((resolve, _reject) => {
3471 connectResolve = resolve;
3472 });
3473 return new Promise((resolve, reject) => {
3474 let server = net_1.createServer((socket) => {
3475 server.close();
3476 connectResolve([
3477 new messageReader_1.SocketMessageReader(socket, encoding),
3478 new messageWriter_1.SocketMessageWriter(socket, encoding)
3479 ]);
3480 });
3481 server.on('error', reject);
3482 server.listen(pipeName, () => {
3483 server.removeListener('error', reject);
3484 resolve({
3485 onConnected: () => { return connected; }
3486 });
3487 });
3488 });
3489}
3490exports.createClientPipeTransport = createClientPipeTransport;
3491function createServerPipeTransport(pipeName, encoding = 'utf-8') {
3492 const socket = net_1.createConnection(pipeName);
3493 return [
3494 new messageReader_1.SocketMessageReader(socket, encoding),
3495 new messageWriter_1.SocketMessageWriter(socket, encoding)
3496 ];
3497}
3498exports.createServerPipeTransport = createServerPipeTransport;
3499
3500
3501/***/ }),
3502/* 13 */
3503/***/ ((module) => {
3504
3505"use strict";
3506module.exports = require("path");;
3507
3508/***/ }),
3509/* 14 */
3510/***/ ((module) => {
3511
3512"use strict";
3513module.exports = require("os");;
3514
3515/***/ }),
3516/* 15 */
3517/***/ ((module) => {
3518
3519"use strict";
3520module.exports = require("crypto");;
3521
3522/***/ }),
3523/* 16 */
3524/***/ ((module) => {
3525
3526"use strict";
3527module.exports = require("net");;
3528
3529/***/ }),
3530/* 17 */
3531/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
3532
3533"use strict";
3534/* --------------------------------------------------------------------------------------------
3535 * Copyright (c) Microsoft Corporation. All rights reserved.
3536 * Licensed under the MIT License. See License.txt in the project root for license information.
3537 * ------------------------------------------------------------------------------------------ */
3538
3539Object.defineProperty(exports, "__esModule", ({ value: true }));
3540const net_1 = __webpack_require__(16);
3541const messageReader_1 = __webpack_require__(7);
3542const messageWriter_1 = __webpack_require__(9);
3543function createClientSocketTransport(port, encoding = 'utf-8') {
3544 let connectResolve;
3545 let connected = new Promise((resolve, _reject) => {
3546 connectResolve = resolve;
3547 });
3548 return new Promise((resolve, reject) => {
3549 let server = net_1.createServer((socket) => {
3550 server.close();
3551 connectResolve([
3552 new messageReader_1.SocketMessageReader(socket, encoding),
3553 new messageWriter_1.SocketMessageWriter(socket, encoding)
3554 ]);
3555 });
3556 server.on('error', reject);
3557 server.listen(port, '127.0.0.1', () => {
3558 server.removeListener('error', reject);
3559 resolve({
3560 onConnected: () => { return connected; }
3561 });
3562 });
3563 });
3564}
3565exports.createClientSocketTransport = createClientSocketTransport;
3566function createServerSocketTransport(port, encoding = 'utf-8') {
3567 const socket = net_1.createConnection(port, '127.0.0.1');
3568 return [
3569 new messageReader_1.SocketMessageReader(socket, encoding),
3570 new messageWriter_1.SocketMessageWriter(socket, encoding)
3571 ];
3572}
3573exports.createServerSocketTransport = createServerSocketTransport;
3574
3575
3576/***/ }),
3577/* 18 */
3578/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3579
3580"use strict";
3581__webpack_require__.r(__webpack_exports__);
3582/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3583/* harmony export */ "Position": () => /* binding */ Position,
3584/* harmony export */ "Range": () => /* binding */ Range,
3585/* harmony export */ "Location": () => /* binding */ Location,
3586/* harmony export */ "LocationLink": () => /* binding */ LocationLink,
3587/* harmony export */ "Color": () => /* binding */ Color,
3588/* harmony export */ "ColorInformation": () => /* binding */ ColorInformation,
3589/* harmony export */ "ColorPresentation": () => /* binding */ ColorPresentation,
3590/* harmony export */ "FoldingRangeKind": () => /* binding */ FoldingRangeKind,
3591/* harmony export */ "FoldingRange": () => /* binding */ FoldingRange,
3592/* harmony export */ "DiagnosticRelatedInformation": () => /* binding */ DiagnosticRelatedInformation,
3593/* harmony export */ "DiagnosticSeverity": () => /* binding */ DiagnosticSeverity,
3594/* harmony export */ "DiagnosticTag": () => /* binding */ DiagnosticTag,
3595/* harmony export */ "Diagnostic": () => /* binding */ Diagnostic,
3596/* harmony export */ "Command": () => /* binding */ Command,
3597/* harmony export */ "TextEdit": () => /* binding */ TextEdit,
3598/* harmony export */ "TextDocumentEdit": () => /* binding */ TextDocumentEdit,
3599/* harmony export */ "CreateFile": () => /* binding */ CreateFile,
3600/* harmony export */ "RenameFile": () => /* binding */ RenameFile,
3601/* harmony export */ "DeleteFile": () => /* binding */ DeleteFile,
3602/* harmony export */ "WorkspaceEdit": () => /* binding */ WorkspaceEdit,
3603/* harmony export */ "WorkspaceChange": () => /* binding */ WorkspaceChange,
3604/* harmony export */ "TextDocumentIdentifier": () => /* binding */ TextDocumentIdentifier,
3605/* harmony export */ "VersionedTextDocumentIdentifier": () => /* binding */ VersionedTextDocumentIdentifier,
3606/* harmony export */ "TextDocumentItem": () => /* binding */ TextDocumentItem,
3607/* harmony export */ "MarkupKind": () => /* binding */ MarkupKind,
3608/* harmony export */ "MarkupContent": () => /* binding */ MarkupContent,
3609/* harmony export */ "CompletionItemKind": () => /* binding */ CompletionItemKind,
3610/* harmony export */ "InsertTextFormat": () => /* binding */ InsertTextFormat,
3611/* harmony export */ "CompletionItemTag": () => /* binding */ CompletionItemTag,
3612/* harmony export */ "CompletionItem": () => /* binding */ CompletionItem,
3613/* harmony export */ "CompletionList": () => /* binding */ CompletionList,
3614/* harmony export */ "MarkedString": () => /* binding */ MarkedString,
3615/* harmony export */ "Hover": () => /* binding */ Hover,
3616/* harmony export */ "ParameterInformation": () => /* binding */ ParameterInformation,
3617/* harmony export */ "SignatureInformation": () => /* binding */ SignatureInformation,
3618/* harmony export */ "DocumentHighlightKind": () => /* binding */ DocumentHighlightKind,
3619/* harmony export */ "DocumentHighlight": () => /* binding */ DocumentHighlight,
3620/* harmony export */ "SymbolKind": () => /* binding */ SymbolKind,
3621/* harmony export */ "SymbolTag": () => /* binding */ SymbolTag,
3622/* harmony export */ "SymbolInformation": () => /* binding */ SymbolInformation,
3623/* harmony export */ "DocumentSymbol": () => /* binding */ DocumentSymbol,
3624/* harmony export */ "CodeActionKind": () => /* binding */ CodeActionKind,
3625/* harmony export */ "CodeActionContext": () => /* binding */ CodeActionContext,
3626/* harmony export */ "CodeAction": () => /* binding */ CodeAction,
3627/* harmony export */ "CodeLens": () => /* binding */ CodeLens,
3628/* harmony export */ "FormattingOptions": () => /* binding */ FormattingOptions,
3629/* harmony export */ "DocumentLink": () => /* binding */ DocumentLink,
3630/* harmony export */ "SelectionRange": () => /* binding */ SelectionRange,
3631/* harmony export */ "EOL": () => /* binding */ EOL,
3632/* harmony export */ "TextDocument": () => /* binding */ TextDocument
3633/* harmony export */ });
3634/* --------------------------------------------------------------------------------------------
3635 * Copyright (c) Microsoft Corporation. All rights reserved.
3636 * Licensed under the MIT License. See License.txt in the project root for license information.
3637 * ------------------------------------------------------------------------------------------ */
3638
3639/**
3640 * The Position namespace provides helper functions to work with
3641 * [Position](#Position) literals.
3642 */
3643var Position;
3644(function (Position) {
3645 /**
3646 * Creates a new Position literal from the given line and character.
3647 * @param line The position's line.
3648 * @param character The position's character.
3649 */
3650 function create(line, character) {
3651 return { line: line, character: character };
3652 }
3653 Position.create = create;
3654 /**
3655 * Checks whether the given liternal conforms to the [Position](#Position) interface.
3656 */
3657 function is(value) {
3658 var candidate = value;
3659 return Is.objectLiteral(candidate) && Is.number(candidate.line) && Is.number(candidate.character);
3660 }
3661 Position.is = is;
3662})(Position || (Position = {}));
3663/**
3664 * The Range namespace provides helper functions to work with
3665 * [Range](#Range) literals.
3666 */
3667var Range;
3668(function (Range) {
3669 function create(one, two, three, four) {
3670 if (Is.number(one) && Is.number(two) && Is.number(three) && Is.number(four)) {
3671 return { start: Position.create(one, two), end: Position.create(three, four) };
3672 }
3673 else if (Position.is(one) && Position.is(two)) {
3674 return { start: one, end: two };
3675 }
3676 else {
3677 throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");
3678 }
3679 }
3680 Range.create = create;
3681 /**
3682 * Checks whether the given literal conforms to the [Range](#Range) interface.
3683 */
3684 function is(value) {
3685 var candidate = value;
3686 return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
3687 }
3688 Range.is = is;
3689})(Range || (Range = {}));
3690/**
3691 * The Location namespace provides helper functions to work with
3692 * [Location](#Location) literals.
3693 */
3694var Location;
3695(function (Location) {
3696 /**
3697 * Creates a Location literal.
3698 * @param uri The location's uri.
3699 * @param range The location's range.
3700 */
3701 function create(uri, range) {
3702 return { uri: uri, range: range };
3703 }
3704 Location.create = create;
3705 /**
3706 * Checks whether the given literal conforms to the [Location](#Location) interface.
3707 */
3708 function is(value) {
3709 var candidate = value;
3710 return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
3711 }
3712 Location.is = is;
3713})(Location || (Location = {}));
3714/**
3715 * The LocationLink namespace provides helper functions to work with
3716 * [LocationLink](#LocationLink) literals.
3717 */
3718var LocationLink;
3719(function (LocationLink) {
3720 /**
3721 * Creates a LocationLink literal.
3722 * @param targetUri The definition's uri.
3723 * @param targetRange The full range of the definition.
3724 * @param targetSelectionRange The span of the symbol definition at the target.
3725 * @param originSelectionRange The span of the symbol being defined in the originating source file.
3726 */
3727 function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
3728 return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };
3729 }
3730 LocationLink.create = create;
3731 /**
3732 * Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.
3733 */
3734 function is(value) {
3735 var candidate = value;
3736 return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)
3737 && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange))
3738 && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
3739 }
3740 LocationLink.is = is;
3741})(LocationLink || (LocationLink = {}));
3742/**
3743 * The Color namespace provides helper functions to work with
3744 * [Color](#Color) literals.
3745 */
3746var Color;
3747(function (Color) {
3748 /**
3749 * Creates a new Color literal.
3750 */
3751 function create(red, green, blue, alpha) {
3752 return {
3753 red: red,
3754 green: green,
3755 blue: blue,
3756 alpha: alpha,
3757 };
3758 }
3759 Color.create = create;
3760 /**
3761 * Checks whether the given literal conforms to the [Color](#Color) interface.
3762 */
3763 function is(value) {
3764 var candidate = value;
3765 return Is.number(candidate.red)
3766 && Is.number(candidate.green)
3767 && Is.number(candidate.blue)
3768 && Is.number(candidate.alpha);
3769 }
3770 Color.is = is;
3771})(Color || (Color = {}));
3772/**
3773 * The ColorInformation namespace provides helper functions to work with
3774 * [ColorInformation](#ColorInformation) literals.
3775 */
3776var ColorInformation;
3777(function (ColorInformation) {
3778 /**
3779 * Creates a new ColorInformation literal.
3780 */
3781 function create(range, color) {
3782 return {
3783 range: range,
3784 color: color,
3785 };
3786 }
3787 ColorInformation.create = create;
3788 /**
3789 * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
3790 */
3791 function is(value) {
3792 var candidate = value;
3793 return Range.is(candidate.range) && Color.is(candidate.color);
3794 }
3795 ColorInformation.is = is;
3796})(ColorInformation || (ColorInformation = {}));
3797/**
3798 * The Color namespace provides helper functions to work with
3799 * [ColorPresentation](#ColorPresentation) literals.
3800 */
3801var ColorPresentation;
3802(function (ColorPresentation) {
3803 /**
3804 * Creates a new ColorInformation literal.
3805 */
3806 function create(label, textEdit, additionalTextEdits) {
3807 return {
3808 label: label,
3809 textEdit: textEdit,
3810 additionalTextEdits: additionalTextEdits,
3811 };
3812 }
3813 ColorPresentation.create = create;
3814 /**
3815 * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
3816 */
3817 function is(value) {
3818 var candidate = value;
3819 return Is.string(candidate.label)
3820 && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))
3821 && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
3822 }
3823 ColorPresentation.is = is;
3824})(ColorPresentation || (ColorPresentation = {}));
3825/**
3826 * Enum of known range kinds
3827 */
3828var FoldingRangeKind;
3829(function (FoldingRangeKind) {
3830 /**
3831 * Folding range for a comment
3832 */
3833 FoldingRangeKind["Comment"] = "comment";
3834 /**
3835 * Folding range for a imports or includes
3836 */
3837 FoldingRangeKind["Imports"] = "imports";
3838 /**
3839 * Folding range for a region (e.g. `#region`)
3840 */
3841 FoldingRangeKind["Region"] = "region";
3842})(FoldingRangeKind || (FoldingRangeKind = {}));
3843/**
3844 * The folding range namespace provides helper functions to work with
3845 * [FoldingRange](#FoldingRange) literals.
3846 */
3847var FoldingRange;
3848(function (FoldingRange) {
3849 /**
3850 * Creates a new FoldingRange literal.
3851 */
3852 function create(startLine, endLine, startCharacter, endCharacter, kind) {
3853 var result = {
3854 startLine: startLine,
3855 endLine: endLine
3856 };
3857 if (Is.defined(startCharacter)) {
3858 result.startCharacter = startCharacter;
3859 }
3860 if (Is.defined(endCharacter)) {
3861 result.endCharacter = endCharacter;
3862 }
3863 if (Is.defined(kind)) {
3864 result.kind = kind;
3865 }
3866 return result;
3867 }
3868 FoldingRange.create = create;
3869 /**
3870 * Checks whether the given literal conforms to the [FoldingRange](#FoldingRange) interface.
3871 */
3872 function is(value) {
3873 var candidate = value;
3874 return Is.number(candidate.startLine) && Is.number(candidate.startLine)
3875 && (Is.undefined(candidate.startCharacter) || Is.number(candidate.startCharacter))
3876 && (Is.undefined(candidate.endCharacter) || Is.number(candidate.endCharacter))
3877 && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
3878 }
3879 FoldingRange.is = is;
3880})(FoldingRange || (FoldingRange = {}));
3881/**
3882 * The DiagnosticRelatedInformation namespace provides helper functions to work with
3883 * [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) literals.
3884 */
3885var DiagnosticRelatedInformation;
3886(function (DiagnosticRelatedInformation) {
3887 /**
3888 * Creates a new DiagnosticRelatedInformation literal.
3889 */
3890 function create(location, message) {
3891 return {
3892 location: location,
3893 message: message
3894 };
3895 }
3896 DiagnosticRelatedInformation.create = create;
3897 /**
3898 * Checks whether the given literal conforms to the [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) interface.
3899 */
3900 function is(value) {
3901 var candidate = value;
3902 return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
3903 }
3904 DiagnosticRelatedInformation.is = is;
3905})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));
3906/**
3907 * The diagnostic's severity.
3908 */
3909var DiagnosticSeverity;
3910(function (DiagnosticSeverity) {
3911 /**
3912 * Reports an error.
3913 */
3914 DiagnosticSeverity.Error = 1;
3915 /**
3916 * Reports a warning.
3917 */
3918 DiagnosticSeverity.Warning = 2;
3919 /**
3920 * Reports an information.
3921 */
3922 DiagnosticSeverity.Information = 3;
3923 /**
3924 * Reports a hint.
3925 */
3926 DiagnosticSeverity.Hint = 4;
3927})(DiagnosticSeverity || (DiagnosticSeverity = {}));
3928/**
3929 * The diagnostic tags.
3930 *
3931 * @since 3.15.0
3932 */
3933var DiagnosticTag;
3934(function (DiagnosticTag) {
3935 /**
3936 * Unused or unnecessary code.
3937 *
3938 * Clients are allowed to render diagnostics with this tag faded out instead of having
3939 * an error squiggle.
3940 */
3941 DiagnosticTag.Unnecessary = 1;
3942 /**
3943 * Deprecated or obsolete code.
3944 *
3945 * Clients are allowed to rendered diagnostics with this tag strike through.
3946 */
3947 DiagnosticTag.Deprecated = 2;
3948})(DiagnosticTag || (DiagnosticTag = {}));
3949/**
3950 * The Diagnostic namespace provides helper functions to work with
3951 * [Diagnostic](#Diagnostic) literals.
3952 */
3953var Diagnostic;
3954(function (Diagnostic) {
3955 /**
3956 * Creates a new Diagnostic literal.
3957 */
3958 function create(range, message, severity, code, source, relatedInformation) {
3959 var result = { range: range, message: message };
3960 if (Is.defined(severity)) {
3961 result.severity = severity;
3962 }
3963 if (Is.defined(code)) {
3964 result.code = code;
3965 }
3966 if (Is.defined(source)) {
3967 result.source = source;
3968 }
3969 if (Is.defined(relatedInformation)) {
3970 result.relatedInformation = relatedInformation;
3971 }
3972 return result;
3973 }
3974 Diagnostic.create = create;
3975 /**
3976 * Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.
3977 */
3978 function is(value) {
3979 var candidate = value;
3980 return Is.defined(candidate)
3981 && Range.is(candidate.range)
3982 && Is.string(candidate.message)
3983 && (Is.number(candidate.severity) || Is.undefined(candidate.severity))
3984 && (Is.number(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))
3985 && (Is.string(candidate.source) || Is.undefined(candidate.source))
3986 && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
3987 }
3988 Diagnostic.is = is;
3989})(Diagnostic || (Diagnostic = {}));
3990/**
3991 * The Command namespace provides helper functions to work with
3992 * [Command](#Command) literals.
3993 */
3994var Command;
3995(function (Command) {
3996 /**
3997 * Creates a new Command literal.
3998 */
3999 function create(title, command) {
4000 var args = [];
4001 for (var _i = 2; _i < arguments.length; _i++) {
4002 args[_i - 2] = arguments[_i];
4003 }
4004 var result = { title: title, command: command };
4005 if (Is.defined(args) && args.length > 0) {
4006 result.arguments = args;
4007 }
4008 return result;
4009 }
4010 Command.create = create;
4011 /**
4012 * Checks whether the given literal conforms to the [Command](#Command) interface.
4013 */
4014 function is(value) {
4015 var candidate = value;
4016 return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);
4017 }
4018 Command.is = is;
4019})(Command || (Command = {}));
4020/**
4021 * The TextEdit namespace provides helper function to create replace,
4022 * insert and delete edits more easily.
4023 */
4024var TextEdit;
4025(function (TextEdit) {
4026 /**
4027 * Creates a replace text edit.
4028 * @param range The range of text to be replaced.
4029 * @param newText The new text.
4030 */
4031 function replace(range, newText) {
4032 return { range: range, newText: newText };
4033 }
4034 TextEdit.replace = replace;
4035 /**
4036 * Creates a insert text edit.
4037 * @param position The position to insert the text at.
4038 * @param newText The text to be inserted.
4039 */
4040 function insert(position, newText) {
4041 return { range: { start: position, end: position }, newText: newText };
4042 }
4043 TextEdit.insert = insert;
4044 /**
4045 * Creates a delete text edit.
4046 * @param range The range of text to be deleted.
4047 */
4048 function del(range) {
4049 return { range: range, newText: '' };
4050 }
4051 TextEdit.del = del;
4052 function is(value) {
4053 var candidate = value;
4054 return Is.objectLiteral(candidate)
4055 && Is.string(candidate.newText)
4056 && Range.is(candidate.range);
4057 }
4058 TextEdit.is = is;
4059})(TextEdit || (TextEdit = {}));
4060/**
4061 * The TextDocumentEdit namespace provides helper function to create
4062 * an edit that manipulates a text document.
4063 */
4064var TextDocumentEdit;
4065(function (TextDocumentEdit) {
4066 /**
4067 * Creates a new `TextDocumentEdit`
4068 */
4069 function create(textDocument, edits) {
4070 return { textDocument: textDocument, edits: edits };
4071 }
4072 TextDocumentEdit.create = create;
4073 function is(value) {
4074 var candidate = value;
4075 return Is.defined(candidate)
4076 && VersionedTextDocumentIdentifier.is(candidate.textDocument)
4077 && Array.isArray(candidate.edits);
4078 }
4079 TextDocumentEdit.is = is;
4080})(TextDocumentEdit || (TextDocumentEdit = {}));
4081var CreateFile;
4082(function (CreateFile) {
4083 function create(uri, options) {
4084 var result = {
4085 kind: 'create',
4086 uri: uri
4087 };
4088 if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
4089 result.options = options;
4090 }
4091 return result;
4092 }
4093 CreateFile.create = create;
4094 function is(value) {
4095 var candidate = value;
4096 return candidate && candidate.kind === 'create' && Is.string(candidate.uri) &&
4097 (candidate.options === void 0 ||
4098 ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));
4099 }
4100 CreateFile.is = is;
4101})(CreateFile || (CreateFile = {}));
4102var RenameFile;
4103(function (RenameFile) {
4104 function create(oldUri, newUri, options) {
4105 var result = {
4106 kind: 'rename',
4107 oldUri: oldUri,
4108 newUri: newUri
4109 };
4110 if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
4111 result.options = options;
4112 }
4113 return result;
4114 }
4115 RenameFile.create = create;
4116 function is(value) {
4117 var candidate = value;
4118 return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) &&
4119 (candidate.options === void 0 ||
4120 ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));
4121 }
4122 RenameFile.is = is;
4123})(RenameFile || (RenameFile = {}));
4124var DeleteFile;
4125(function (DeleteFile) {
4126 function create(uri, options) {
4127 var result = {
4128 kind: 'delete',
4129 uri: uri
4130 };
4131 if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) {
4132 result.options = options;
4133 }
4134 return result;
4135 }
4136 DeleteFile.create = create;
4137 function is(value) {
4138 var candidate = value;
4139 return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) &&
4140 (candidate.options === void 0 ||
4141 ((candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))));
4142 }
4143 DeleteFile.is = is;
4144})(DeleteFile || (DeleteFile = {}));
4145var WorkspaceEdit;
4146(function (WorkspaceEdit) {
4147 function is(value) {
4148 var candidate = value;
4149 return candidate &&
4150 (candidate.changes !== void 0 || candidate.documentChanges !== void 0) &&
4151 (candidate.documentChanges === void 0 || candidate.documentChanges.every(function (change) {
4152 if (Is.string(change.kind)) {
4153 return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
4154 }
4155 else {
4156 return TextDocumentEdit.is(change);
4157 }
4158 }));
4159 }
4160 WorkspaceEdit.is = is;
4161})(WorkspaceEdit || (WorkspaceEdit = {}));
4162var TextEditChangeImpl = /** @class */ (function () {
4163 function TextEditChangeImpl(edits) {
4164 this.edits = edits;
4165 }
4166 TextEditChangeImpl.prototype.insert = function (position, newText) {
4167 this.edits.push(TextEdit.insert(position, newText));
4168 };
4169 TextEditChangeImpl.prototype.replace = function (range, newText) {
4170 this.edits.push(TextEdit.replace(range, newText));
4171 };
4172 TextEditChangeImpl.prototype.delete = function (range) {
4173 this.edits.push(TextEdit.del(range));
4174 };
4175 TextEditChangeImpl.prototype.add = function (edit) {
4176 this.edits.push(edit);
4177 };
4178 TextEditChangeImpl.prototype.all = function () {
4179 return this.edits;
4180 };
4181 TextEditChangeImpl.prototype.clear = function () {
4182 this.edits.splice(0, this.edits.length);
4183 };
4184 return TextEditChangeImpl;
4185}());
4186/**
4187 * A workspace change helps constructing changes to a workspace.
4188 */
4189var WorkspaceChange = /** @class */ (function () {
4190 function WorkspaceChange(workspaceEdit) {
4191 var _this = this;
4192 this._textEditChanges = Object.create(null);
4193 if (workspaceEdit) {
4194 this._workspaceEdit = workspaceEdit;
4195 if (workspaceEdit.documentChanges) {
4196 workspaceEdit.documentChanges.forEach(function (change) {
4197 if (TextDocumentEdit.is(change)) {
4198 var textEditChange = new TextEditChangeImpl(change.edits);
4199 _this._textEditChanges[change.textDocument.uri] = textEditChange;
4200 }
4201 });
4202 }
4203 else if (workspaceEdit.changes) {
4204 Object.keys(workspaceEdit.changes).forEach(function (key) {
4205 var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
4206 _this._textEditChanges[key] = textEditChange;
4207 });
4208 }
4209 }
4210 }
4211 Object.defineProperty(WorkspaceChange.prototype, "edit", {
4212 /**
4213 * Returns the underlying [WorkspaceEdit](#WorkspaceEdit) literal
4214 * use to be returned from a workspace edit operation like rename.
4215 */
4216 get: function () {
4217 return this._workspaceEdit;
4218 },
4219 enumerable: true,
4220 configurable: true
4221 });
4222 WorkspaceChange.prototype.getTextEditChange = function (key) {
4223 if (VersionedTextDocumentIdentifier.is(key)) {
4224 if (!this._workspaceEdit) {
4225 this._workspaceEdit = {
4226 documentChanges: []
4227 };
4228 }
4229 if (!this._workspaceEdit.documentChanges) {
4230 throw new Error('Workspace edit is not configured for document changes.');
4231 }
4232 var textDocument = key;
4233 var result = this._textEditChanges[textDocument.uri];
4234 if (!result) {
4235 var edits = [];
4236 var textDocumentEdit = {
4237 textDocument: textDocument,
4238 edits: edits
4239 };
4240 this._workspaceEdit.documentChanges.push(textDocumentEdit);
4241 result = new TextEditChangeImpl(edits);
4242 this._textEditChanges[textDocument.uri] = result;
4243 }
4244 return result;
4245 }
4246 else {
4247 if (!this._workspaceEdit) {
4248 this._workspaceEdit = {
4249 changes: Object.create(null)
4250 };
4251 }
4252 if (!this._workspaceEdit.changes) {
4253 throw new Error('Workspace edit is not configured for normal text edit changes.');
4254 }
4255 var result = this._textEditChanges[key];
4256 if (!result) {
4257 var edits = [];
4258 this._workspaceEdit.changes[key] = edits;
4259 result = new TextEditChangeImpl(edits);
4260 this._textEditChanges[key] = result;
4261 }
4262 return result;
4263 }
4264 };
4265 WorkspaceChange.prototype.createFile = function (uri, options) {
4266 this.checkDocumentChanges();
4267 this._workspaceEdit.documentChanges.push(CreateFile.create(uri, options));
4268 };
4269 WorkspaceChange.prototype.renameFile = function (oldUri, newUri, options) {
4270 this.checkDocumentChanges();
4271 this._workspaceEdit.documentChanges.push(RenameFile.create(oldUri, newUri, options));
4272 };
4273 WorkspaceChange.prototype.deleteFile = function (uri, options) {
4274 this.checkDocumentChanges();
4275 this._workspaceEdit.documentChanges.push(DeleteFile.create(uri, options));
4276 };
4277 WorkspaceChange.prototype.checkDocumentChanges = function () {
4278 if (!this._workspaceEdit || !this._workspaceEdit.documentChanges) {
4279 throw new Error('Workspace edit is not configured for document changes.');
4280 }
4281 };
4282 return WorkspaceChange;
4283}());
4284
4285/**
4286 * The TextDocumentIdentifier namespace provides helper functions to work with
4287 * [TextDocumentIdentifier](#TextDocumentIdentifier) literals.
4288 */
4289var TextDocumentIdentifier;
4290(function (TextDocumentIdentifier) {
4291 /**
4292 * Creates a new TextDocumentIdentifier literal.
4293 * @param uri The document's uri.
4294 */
4295 function create(uri) {
4296 return { uri: uri };
4297 }
4298 TextDocumentIdentifier.create = create;
4299 /**
4300 * Checks whether the given literal conforms to the [TextDocumentIdentifier](#TextDocumentIdentifier) interface.
4301 */
4302 function is(value) {
4303 var candidate = value;
4304 return Is.defined(candidate) && Is.string(candidate.uri);
4305 }
4306 TextDocumentIdentifier.is = is;
4307})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));
4308/**
4309 * The VersionedTextDocumentIdentifier namespace provides helper functions to work with
4310 * [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) literals.
4311 */
4312var VersionedTextDocumentIdentifier;
4313(function (VersionedTextDocumentIdentifier) {
4314 /**
4315 * Creates a new VersionedTextDocumentIdentifier literal.
4316 * @param uri The document's uri.
4317 * @param uri The document's text.
4318 */
4319 function create(uri, version) {
4320 return { uri: uri, version: version };
4321 }
4322 VersionedTextDocumentIdentifier.create = create;
4323 /**
4324 * Checks whether the given literal conforms to the [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) interface.
4325 */
4326 function is(value) {
4327 var candidate = value;
4328 return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.number(candidate.version));
4329 }
4330 VersionedTextDocumentIdentifier.is = is;
4331})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));
4332/**
4333 * The TextDocumentItem namespace provides helper functions to work with
4334 * [TextDocumentItem](#TextDocumentItem) literals.
4335 */
4336var TextDocumentItem;
4337(function (TextDocumentItem) {
4338 /**
4339 * Creates a new TextDocumentItem literal.
4340 * @param uri The document's uri.
4341 * @param languageId The document's language identifier.
4342 * @param version The document's version number.
4343 * @param text The document's text.
4344 */
4345 function create(uri, languageId, version, text) {
4346 return { uri: uri, languageId: languageId, version: version, text: text };
4347 }
4348 TextDocumentItem.create = create;
4349 /**
4350 * Checks whether the given literal conforms to the [TextDocumentItem](#TextDocumentItem) interface.
4351 */
4352 function is(value) {
4353 var candidate = value;
4354 return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.number(candidate.version) && Is.string(candidate.text);
4355 }
4356 TextDocumentItem.is = is;
4357})(TextDocumentItem || (TextDocumentItem = {}));
4358/**
4359 * Describes the content type that a client supports in various
4360 * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.
4361 *
4362 * Please note that `MarkupKinds` must not start with a `$`. This kinds
4363 * are reserved for internal usage.
4364 */
4365var MarkupKind;
4366(function (MarkupKind) {
4367 /**
4368 * Plain text is supported as a content format
4369 */
4370 MarkupKind.PlainText = 'plaintext';
4371 /**
4372 * Markdown is supported as a content format
4373 */
4374 MarkupKind.Markdown = 'markdown';
4375})(MarkupKind || (MarkupKind = {}));
4376(function (MarkupKind) {
4377 /**
4378 * Checks whether the given value is a value of the [MarkupKind](#MarkupKind) type.
4379 */
4380 function is(value) {
4381 var candidate = value;
4382 return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;
4383 }
4384 MarkupKind.is = is;
4385})(MarkupKind || (MarkupKind = {}));
4386var MarkupContent;
4387(function (MarkupContent) {
4388 /**
4389 * Checks whether the given value conforms to the [MarkupContent](#MarkupContent) interface.
4390 */
4391 function is(value) {
4392 var candidate = value;
4393 return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
4394 }
4395 MarkupContent.is = is;
4396})(MarkupContent || (MarkupContent = {}));
4397/**
4398 * The kind of a completion entry.
4399 */
4400var CompletionItemKind;
4401(function (CompletionItemKind) {
4402 CompletionItemKind.Text = 1;
4403 CompletionItemKind.Method = 2;
4404 CompletionItemKind.Function = 3;
4405 CompletionItemKind.Constructor = 4;
4406 CompletionItemKind.Field = 5;
4407 CompletionItemKind.Variable = 6;
4408 CompletionItemKind.Class = 7;
4409 CompletionItemKind.Interface = 8;
4410 CompletionItemKind.Module = 9;
4411 CompletionItemKind.Property = 10;
4412 CompletionItemKind.Unit = 11;
4413 CompletionItemKind.Value = 12;
4414 CompletionItemKind.Enum = 13;
4415 CompletionItemKind.Keyword = 14;
4416 CompletionItemKind.Snippet = 15;
4417 CompletionItemKind.Color = 16;
4418 CompletionItemKind.File = 17;
4419 CompletionItemKind.Reference = 18;
4420 CompletionItemKind.Folder = 19;
4421 CompletionItemKind.EnumMember = 20;
4422 CompletionItemKind.Constant = 21;
4423 CompletionItemKind.Struct = 22;
4424 CompletionItemKind.Event = 23;
4425 CompletionItemKind.Operator = 24;
4426 CompletionItemKind.TypeParameter = 25;
4427})(CompletionItemKind || (CompletionItemKind = {}));
4428/**
4429 * Defines whether the insert text in a completion item should be interpreted as
4430 * plain text or a snippet.
4431 */
4432var InsertTextFormat;
4433(function (InsertTextFormat) {
4434 /**
4435 * The primary text to be inserted is treated as a plain string.
4436 */
4437 InsertTextFormat.PlainText = 1;
4438 /**
4439 * The primary text to be inserted is treated as a snippet.
4440 *
4441 * A snippet can define tab stops and placeholders with `$1`, `$2`
4442 * and `${3:foo}`. `$0` defines the final tab stop, it defaults to
4443 * the end of the snippet. Placeholders with equal identifiers are linked,
4444 * that is typing in one will update others too.
4445 *
4446 * See also: https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md
4447 */
4448 InsertTextFormat.Snippet = 2;
4449})(InsertTextFormat || (InsertTextFormat = {}));
4450/**
4451 * Completion item tags are extra annotations that tweak the rendering of a completion
4452 * item.
4453 *
4454 * @since 3.15.0
4455 */
4456var CompletionItemTag;
4457(function (CompletionItemTag) {
4458 /**
4459 * Render a completion as obsolete, usually using a strike-out.
4460 */
4461 CompletionItemTag.Deprecated = 1;
4462})(CompletionItemTag || (CompletionItemTag = {}));
4463/**
4464 * The CompletionItem namespace provides functions to deal with
4465 * completion items.
4466 */
4467var CompletionItem;
4468(function (CompletionItem) {
4469 /**
4470 * Create a completion item and seed it with a label.
4471 * @param label The completion item's label
4472 */
4473 function create(label) {
4474 return { label: label };
4475 }
4476 CompletionItem.create = create;
4477})(CompletionItem || (CompletionItem = {}));
4478/**
4479 * The CompletionList namespace provides functions to deal with
4480 * completion lists.
4481 */
4482var CompletionList;
4483(function (CompletionList) {
4484 /**
4485 * Creates a new completion list.
4486 *
4487 * @param items The completion items.
4488 * @param isIncomplete The list is not complete.
4489 */
4490 function create(items, isIncomplete) {
4491 return { items: items ? items : [], isIncomplete: !!isIncomplete };
4492 }
4493 CompletionList.create = create;
4494})(CompletionList || (CompletionList = {}));
4495var MarkedString;
4496(function (MarkedString) {
4497 /**
4498 * Creates a marked string from plain text.
4499 *
4500 * @param plainText The plain text.
4501 */
4502 function fromPlainText(plainText) {
4503 return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
4504 }
4505 MarkedString.fromPlainText = fromPlainText;
4506 /**
4507 * Checks whether the given value conforms to the [MarkedString](#MarkedString) type.
4508 */
4509 function is(value) {
4510 var candidate = value;
4511 return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));
4512 }
4513 MarkedString.is = is;
4514})(MarkedString || (MarkedString = {}));
4515var Hover;
4516(function (Hover) {
4517 /**
4518 * Checks whether the given value conforms to the [Hover](#Hover) interface.
4519 */
4520 function is(value) {
4521 var candidate = value;
4522 return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||
4523 MarkedString.is(candidate.contents) ||
4524 Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range.is(value.range));
4525 }
4526 Hover.is = is;
4527})(Hover || (Hover = {}));
4528/**
4529 * The ParameterInformation namespace provides helper functions to work with
4530 * [ParameterInformation](#ParameterInformation) literals.
4531 */
4532var ParameterInformation;
4533(function (ParameterInformation) {
4534 /**
4535 * Creates a new parameter information literal.
4536 *
4537 * @param label A label string.
4538 * @param documentation A doc string.
4539 */
4540 function create(label, documentation) {
4541 return documentation ? { label: label, documentation: documentation } : { label: label };
4542 }
4543 ParameterInformation.create = create;
4544})(ParameterInformation || (ParameterInformation = {}));
4545/**
4546 * The SignatureInformation namespace provides helper functions to work with
4547 * [SignatureInformation](#SignatureInformation) literals.
4548 */
4549var SignatureInformation;
4550(function (SignatureInformation) {
4551 function create(label, documentation) {
4552 var parameters = [];
4553 for (var _i = 2; _i < arguments.length; _i++) {
4554 parameters[_i - 2] = arguments[_i];
4555 }
4556 var result = { label: label };
4557 if (Is.defined(documentation)) {
4558 result.documentation = documentation;
4559 }
4560 if (Is.defined(parameters)) {
4561 result.parameters = parameters;
4562 }
4563 else {
4564 result.parameters = [];
4565 }
4566 return result;
4567 }
4568 SignatureInformation.create = create;
4569})(SignatureInformation || (SignatureInformation = {}));
4570/**
4571 * A document highlight kind.
4572 */
4573var DocumentHighlightKind;
4574(function (DocumentHighlightKind) {
4575 /**
4576 * A textual occurrence.
4577 */
4578 DocumentHighlightKind.Text = 1;
4579 /**
4580 * Read-access of a symbol, like reading a variable.
4581 */
4582 DocumentHighlightKind.Read = 2;
4583 /**
4584 * Write-access of a symbol, like writing to a variable.
4585 */
4586 DocumentHighlightKind.Write = 3;
4587})(DocumentHighlightKind || (DocumentHighlightKind = {}));
4588/**
4589 * DocumentHighlight namespace to provide helper functions to work with
4590 * [DocumentHighlight](#DocumentHighlight) literals.
4591 */
4592var DocumentHighlight;
4593(function (DocumentHighlight) {
4594 /**
4595 * Create a DocumentHighlight object.
4596 * @param range The range the highlight applies to.
4597 */
4598 function create(range, kind) {
4599 var result = { range: range };
4600 if (Is.number(kind)) {
4601 result.kind = kind;
4602 }
4603 return result;
4604 }
4605 DocumentHighlight.create = create;
4606})(DocumentHighlight || (DocumentHighlight = {}));
4607/**
4608 * A symbol kind.
4609 */
4610var SymbolKind;
4611(function (SymbolKind) {
4612 SymbolKind.File = 1;
4613 SymbolKind.Module = 2;
4614 SymbolKind.Namespace = 3;
4615 SymbolKind.Package = 4;
4616 SymbolKind.Class = 5;
4617 SymbolKind.Method = 6;
4618 SymbolKind.Property = 7;
4619 SymbolKind.Field = 8;
4620 SymbolKind.Constructor = 9;
4621 SymbolKind.Enum = 10;
4622 SymbolKind.Interface = 11;
4623 SymbolKind.Function = 12;
4624 SymbolKind.Variable = 13;
4625 SymbolKind.Constant = 14;
4626 SymbolKind.String = 15;
4627 SymbolKind.Number = 16;
4628 SymbolKind.Boolean = 17;
4629 SymbolKind.Array = 18;
4630 SymbolKind.Object = 19;
4631 SymbolKind.Key = 20;
4632 SymbolKind.Null = 21;
4633 SymbolKind.EnumMember = 22;
4634 SymbolKind.Struct = 23;
4635 SymbolKind.Event = 24;
4636 SymbolKind.Operator = 25;
4637 SymbolKind.TypeParameter = 26;
4638})(SymbolKind || (SymbolKind = {}));
4639/**
4640 * Symbol tags are extra annotations that tweak the rendering of a symbol.
4641 * @since 3.15
4642 */
4643var SymbolTag;
4644(function (SymbolTag) {
4645 /**
4646 * Render a symbol as obsolete, usually using a strike-out.
4647 */
4648 SymbolTag.Deprecated = 1;
4649})(SymbolTag || (SymbolTag = {}));
4650var SymbolInformation;
4651(function (SymbolInformation) {
4652 /**
4653 * Creates a new symbol information literal.
4654 *
4655 * @param name The name of the symbol.
4656 * @param kind The kind of the symbol.
4657 * @param range The range of the location of the symbol.
4658 * @param uri The resource of the location of symbol, defaults to the current document.
4659 * @param containerName The name of the symbol containing the symbol.
4660 */
4661 function create(name, kind, range, uri, containerName) {
4662 var result = {
4663 name: name,
4664 kind: kind,
4665 location: { uri: uri, range: range }
4666 };
4667 if (containerName) {
4668 result.containerName = containerName;
4669 }
4670 return result;
4671 }
4672 SymbolInformation.create = create;
4673})(SymbolInformation || (SymbolInformation = {}));
4674var DocumentSymbol;
4675(function (DocumentSymbol) {
4676 /**
4677 * Creates a new symbol information literal.
4678 *
4679 * @param name The name of the symbol.
4680 * @param detail The detail of the symbol.
4681 * @param kind The kind of the symbol.
4682 * @param range The range of the symbol.
4683 * @param selectionRange The selectionRange of the symbol.
4684 * @param children Children of the symbol.
4685 */
4686 function create(name, detail, kind, range, selectionRange, children) {
4687 var result = {
4688 name: name,
4689 detail: detail,
4690 kind: kind,
4691 range: range,
4692 selectionRange: selectionRange
4693 };
4694 if (children !== void 0) {
4695 result.children = children;
4696 }
4697 return result;
4698 }
4699 DocumentSymbol.create = create;
4700 /**
4701 * Checks whether the given literal conforms to the [DocumentSymbol](#DocumentSymbol) interface.
4702 */
4703 function is(value) {
4704 var candidate = value;
4705 return candidate &&
4706 Is.string(candidate.name) && Is.number(candidate.kind) &&
4707 Range.is(candidate.range) && Range.is(candidate.selectionRange) &&
4708 (candidate.detail === void 0 || Is.string(candidate.detail)) &&
4709 (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) &&
4710 (candidate.children === void 0 || Array.isArray(candidate.children));
4711 }
4712 DocumentSymbol.is = is;
4713})(DocumentSymbol || (DocumentSymbol = {}));
4714/**
4715 * A set of predefined code action kinds
4716 */
4717var CodeActionKind;
4718(function (CodeActionKind) {
4719 /**
4720 * Empty kind.
4721 */
4722 CodeActionKind.Empty = '';
4723 /**
4724 * Base kind for quickfix actions: 'quickfix'
4725 */
4726 CodeActionKind.QuickFix = 'quickfix';
4727 /**
4728 * Base kind for refactoring actions: 'refactor'
4729 */
4730 CodeActionKind.Refactor = 'refactor';
4731 /**
4732 * Base kind for refactoring extraction actions: 'refactor.extract'
4733 *
4734 * Example extract actions:
4735 *
4736 * - Extract method
4737 * - Extract function
4738 * - Extract variable
4739 * - Extract interface from class
4740 * - ...
4741 */
4742 CodeActionKind.RefactorExtract = 'refactor.extract';
4743 /**
4744 * Base kind for refactoring inline actions: 'refactor.inline'
4745 *
4746 * Example inline actions:
4747 *
4748 * - Inline function
4749 * - Inline variable
4750 * - Inline constant
4751 * - ...
4752 */
4753 CodeActionKind.RefactorInline = 'refactor.inline';
4754 /**
4755 * Base kind for refactoring rewrite actions: 'refactor.rewrite'
4756 *
4757 * Example rewrite actions:
4758 *
4759 * - Convert JavaScript function to class
4760 * - Add or remove parameter
4761 * - Encapsulate field
4762 * - Make method static
4763 * - Move method to base class
4764 * - ...
4765 */
4766 CodeActionKind.RefactorRewrite = 'refactor.rewrite';
4767 /**
4768 * Base kind for source actions: `source`
4769 *
4770 * Source code actions apply to the entire file.
4771 */
4772 CodeActionKind.Source = 'source';
4773 /**
4774 * Base kind for an organize imports source action: `source.organizeImports`
4775 */
4776 CodeActionKind.SourceOrganizeImports = 'source.organizeImports';
4777 /**
4778 * Base kind for auto-fix source actions: `source.fixAll`.
4779 *
4780 * Fix all actions automatically fix errors that have a clear fix that do not require user input.
4781 * They should not suppress errors or perform unsafe fixes such as generating new types or classes.
4782 *
4783 * @since 3.15.0
4784 */
4785 CodeActionKind.SourceFixAll = 'source.fixAll';
4786})(CodeActionKind || (CodeActionKind = {}));
4787/**
4788 * The CodeActionContext namespace provides helper functions to work with
4789 * [CodeActionContext](#CodeActionContext) literals.
4790 */
4791var CodeActionContext;
4792(function (CodeActionContext) {
4793 /**
4794 * Creates a new CodeActionContext literal.
4795 */
4796 function create(diagnostics, only) {
4797 var result = { diagnostics: diagnostics };
4798 if (only !== void 0 && only !== null) {
4799 result.only = only;
4800 }
4801 return result;
4802 }
4803 CodeActionContext.create = create;
4804 /**
4805 * Checks whether the given literal conforms to the [CodeActionContext](#CodeActionContext) interface.
4806 */
4807 function is(value) {
4808 var candidate = value;
4809 return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string));
4810 }
4811 CodeActionContext.is = is;
4812})(CodeActionContext || (CodeActionContext = {}));
4813var CodeAction;
4814(function (CodeAction) {
4815 function create(title, commandOrEdit, kind) {
4816 var result = { title: title };
4817 if (Command.is(commandOrEdit)) {
4818 result.command = commandOrEdit;
4819 }
4820 else {
4821 result.edit = commandOrEdit;
4822 }
4823 if (kind !== void 0) {
4824 result.kind = kind;
4825 }
4826 return result;
4827 }
4828 CodeAction.create = create;
4829 function is(value) {
4830 var candidate = value;
4831 return candidate && Is.string(candidate.title) &&
4832 (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&
4833 (candidate.kind === void 0 || Is.string(candidate.kind)) &&
4834 (candidate.edit !== void 0 || candidate.command !== void 0) &&
4835 (candidate.command === void 0 || Command.is(candidate.command)) &&
4836 (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) &&
4837 (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));
4838 }
4839 CodeAction.is = is;
4840})(CodeAction || (CodeAction = {}));
4841/**
4842 * The CodeLens namespace provides helper functions to work with
4843 * [CodeLens](#CodeLens) literals.
4844 */
4845var CodeLens;
4846(function (CodeLens) {
4847 /**
4848 * Creates a new CodeLens literal.
4849 */
4850 function create(range, data) {
4851 var result = { range: range };
4852 if (Is.defined(data)) {
4853 result.data = data;
4854 }
4855 return result;
4856 }
4857 CodeLens.create = create;
4858 /**
4859 * Checks whether the given literal conforms to the [CodeLens](#CodeLens) interface.
4860 */
4861 function is(value) {
4862 var candidate = value;
4863 return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
4864 }
4865 CodeLens.is = is;
4866})(CodeLens || (CodeLens = {}));
4867/**
4868 * The FormattingOptions namespace provides helper functions to work with
4869 * [FormattingOptions](#FormattingOptions) literals.
4870 */
4871var FormattingOptions;
4872(function (FormattingOptions) {
4873 /**
4874 * Creates a new FormattingOptions literal.
4875 */
4876 function create(tabSize, insertSpaces) {
4877 return { tabSize: tabSize, insertSpaces: insertSpaces };
4878 }
4879 FormattingOptions.create = create;
4880 /**
4881 * Checks whether the given literal conforms to the [FormattingOptions](#FormattingOptions) interface.
4882 */
4883 function is(value) {
4884 var candidate = value;
4885 return Is.defined(candidate) && Is.number(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
4886 }
4887 FormattingOptions.is = is;
4888})(FormattingOptions || (FormattingOptions = {}));
4889/**
4890 * The DocumentLink namespace provides helper functions to work with
4891 * [DocumentLink](#DocumentLink) literals.
4892 */
4893var DocumentLink;
4894(function (DocumentLink) {
4895 /**
4896 * Creates a new DocumentLink literal.
4897 */
4898 function create(range, target, data) {
4899 return { range: range, target: target, data: data };
4900 }
4901 DocumentLink.create = create;
4902 /**
4903 * Checks whether the given literal conforms to the [DocumentLink](#DocumentLink) interface.
4904 */
4905 function is(value) {
4906 var candidate = value;
4907 return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
4908 }
4909 DocumentLink.is = is;
4910})(DocumentLink || (DocumentLink = {}));
4911/**
4912 * The SelectionRange namespace provides helper function to work with
4913 * SelectionRange literals.
4914 */
4915var SelectionRange;
4916(function (SelectionRange) {
4917 /**
4918 * Creates a new SelectionRange
4919 * @param range the range.
4920 * @param parent an optional parent.
4921 */
4922 function create(range, parent) {
4923 return { range: range, parent: parent };
4924 }
4925 SelectionRange.create = create;
4926 function is(value) {
4927 var candidate = value;
4928 return candidate !== undefined && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));
4929 }
4930 SelectionRange.is = is;
4931})(SelectionRange || (SelectionRange = {}));
4932var EOL = ['\n', '\r\n', '\r'];
4933/**
4934 * @deprecated Use the text document from the new vscode-languageserver-textdocument package.
4935 */
4936var TextDocument;
4937(function (TextDocument) {
4938 /**
4939 * Creates a new ITextDocument literal from the given uri and content.
4940 * @param uri The document's uri.
4941 * @param languageId The document's language Id.
4942 * @param content The document's content.
4943 */
4944 function create(uri, languageId, version, content) {
4945 return new FullTextDocument(uri, languageId, version, content);
4946 }
4947 TextDocument.create = create;
4948 /**
4949 * Checks whether the given literal conforms to the [ITextDocument](#ITextDocument) interface.
4950 */
4951 function is(value) {
4952 var candidate = value;
4953 return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.number(candidate.lineCount)
4954 && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
4955 }
4956 TextDocument.is = is;
4957 function applyEdits(document, edits) {
4958 var text = document.getText();
4959 var sortedEdits = mergeSort(edits, function (a, b) {
4960 var diff = a.range.start.line - b.range.start.line;
4961 if (diff === 0) {
4962 return a.range.start.character - b.range.start.character;
4963 }
4964 return diff;
4965 });
4966 var lastModifiedOffset = text.length;
4967 for (var i = sortedEdits.length - 1; i >= 0; i--) {
4968 var e = sortedEdits[i];
4969 var startOffset = document.offsetAt(e.range.start);
4970 var endOffset = document.offsetAt(e.range.end);
4971 if (endOffset <= lastModifiedOffset) {
4972 text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
4973 }
4974 else {
4975 throw new Error('Overlapping edit');
4976 }
4977 lastModifiedOffset = startOffset;
4978 }
4979 return text;
4980 }
4981 TextDocument.applyEdits = applyEdits;
4982 function mergeSort(data, compare) {
4983 if (data.length <= 1) {
4984 // sorted
4985 return data;
4986 }
4987 var p = (data.length / 2) | 0;
4988 var left = data.slice(0, p);
4989 var right = data.slice(p);
4990 mergeSort(left, compare);
4991 mergeSort(right, compare);
4992 var leftIdx = 0;
4993 var rightIdx = 0;
4994 var i = 0;
4995 while (leftIdx < left.length && rightIdx < right.length) {
4996 var ret = compare(left[leftIdx], right[rightIdx]);
4997 if (ret <= 0) {
4998 // smaller_equal -> take left to preserve order
4999 data[i++] = left[leftIdx++];
5000 }
5001 else {
5002 // greater -> take right
5003 data[i++] = right[rightIdx++];
5004 }
5005 }
5006 while (leftIdx < left.length) {
5007 data[i++] = left[leftIdx++];
5008 }
5009 while (rightIdx < right.length) {
5010 data[i++] = right[rightIdx++];
5011 }
5012 return data;
5013 }
5014})(TextDocument || (TextDocument = {}));
5015var FullTextDocument = /** @class */ (function () {
5016 function FullTextDocument(uri, languageId, version, content) {
5017 this._uri = uri;
5018 this._languageId = languageId;
5019 this._version = version;
5020 this._content = content;
5021 this._lineOffsets = undefined;
5022 }
5023 Object.defineProperty(FullTextDocument.prototype, "uri", {
5024 get: function () {
5025 return this._uri;
5026 },
5027 enumerable: true,
5028 configurable: true
5029 });
5030 Object.defineProperty(FullTextDocument.prototype, "languageId", {
5031 get: function () {
5032 return this._languageId;
5033 },
5034 enumerable: true,
5035 configurable: true
5036 });
5037 Object.defineProperty(FullTextDocument.prototype, "version", {
5038 get: function () {
5039 return this._version;
5040 },
5041 enumerable: true,
5042 configurable: true
5043 });
5044 FullTextDocument.prototype.getText = function (range) {
5045 if (range) {
5046 var start = this.offsetAt(range.start);
5047 var end = this.offsetAt(range.end);
5048 return this._content.substring(start, end);
5049 }
5050 return this._content;
5051 };
5052 FullTextDocument.prototype.update = function (event, version) {
5053 this._content = event.text;
5054 this._version = version;
5055 this._lineOffsets = undefined;
5056 };
5057 FullTextDocument.prototype.getLineOffsets = function () {
5058 if (this._lineOffsets === undefined) {
5059 var lineOffsets = [];
5060 var text = this._content;
5061 var isLineStart = true;
5062 for (var i = 0; i < text.length; i++) {
5063 if (isLineStart) {
5064 lineOffsets.push(i);
5065 isLineStart = false;
5066 }
5067 var ch = text.charAt(i);
5068 isLineStart = (ch === '\r' || ch === '\n');
5069 if (ch === '\r' && i + 1 < text.length && text.charAt(i + 1) === '\n') {
5070 i++;
5071 }
5072 }
5073 if (isLineStart && text.length > 0) {
5074 lineOffsets.push(text.length);
5075 }
5076 this._lineOffsets = lineOffsets;
5077 }
5078 return this._lineOffsets;
5079 };
5080 FullTextDocument.prototype.positionAt = function (offset) {
5081 offset = Math.max(Math.min(offset, this._content.length), 0);
5082 var lineOffsets = this.getLineOffsets();
5083 var low = 0, high = lineOffsets.length;
5084 if (high === 0) {
5085 return Position.create(0, offset);
5086 }
5087 while (low < high) {
5088 var mid = Math.floor((low + high) / 2);
5089 if (lineOffsets[mid] > offset) {
5090 high = mid;
5091 }
5092 else {
5093 low = mid + 1;
5094 }
5095 }
5096 // low is the least x for which the line offset is larger than the current offset
5097 // or array.length if no line offset is larger than the current offset
5098 var line = low - 1;
5099 return Position.create(line, offset - lineOffsets[line]);
5100 };
5101 FullTextDocument.prototype.offsetAt = function (position) {
5102 var lineOffsets = this.getLineOffsets();
5103 if (position.line >= lineOffsets.length) {
5104 return this._content.length;
5105 }
5106 else if (position.line < 0) {
5107 return 0;
5108 }
5109 var lineOffset = lineOffsets[position.line];
5110 var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
5111 return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
5112 };
5113 Object.defineProperty(FullTextDocument.prototype, "lineCount", {
5114 get: function () {
5115 return this.getLineOffsets().length;
5116 },
5117 enumerable: true,
5118 configurable: true
5119 });
5120 return FullTextDocument;
5121}());
5122var Is;
5123(function (Is) {
5124 var toString = Object.prototype.toString;
5125 function defined(value) {
5126 return typeof value !== 'undefined';
5127 }
5128 Is.defined = defined;
5129 function undefined(value) {
5130 return typeof value === 'undefined';
5131 }
5132 Is.undefined = undefined;
5133 function boolean(value) {
5134 return value === true || value === false;
5135 }
5136 Is.boolean = boolean;
5137 function string(value) {
5138 return toString.call(value) === '[object String]';
5139 }
5140 Is.string = string;
5141 function number(value) {
5142 return toString.call(value) === '[object Number]';
5143 }
5144 Is.number = number;
5145 function func(value) {
5146 return toString.call(value) === '[object Function]';
5147 }
5148 Is.func = func;
5149 function objectLiteral(value) {
5150 // Strictly speaking class instances pass this check as well. Since the LSP
5151 // doesn't use classes we ignore this for now. If we do we need to add something
5152 // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
5153 return value !== null && typeof value === 'object';
5154 }
5155 Is.objectLiteral = objectLiteral;
5156 function typedArray(value, check) {
5157 return Array.isArray(value) && value.every(check);
5158 }
5159 Is.typedArray = typedArray;
5160})(Is || (Is = {}));
5161
5162
5163/***/ }),
5164/* 19 */
5165/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
5166
5167"use strict";
5168/* --------------------------------------------------------------------------------------------
5169 * Copyright (c) Microsoft Corporation. All rights reserved.
5170 * Licensed under the MIT License. See License.txt in the project root for license information.
5171 * ------------------------------------------------------------------------------------------ */
5172
5173Object.defineProperty(exports, "__esModule", ({ value: true }));
5174const Is = __webpack_require__(20);
5175const vscode_jsonrpc_1 = __webpack_require__(4);
5176const messages_1 = __webpack_require__(21);
5177const protocol_implementation_1 = __webpack_require__(22);
5178exports.ImplementationRequest = protocol_implementation_1.ImplementationRequest;
5179const protocol_typeDefinition_1 = __webpack_require__(23);
5180exports.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;
5181const protocol_workspaceFolders_1 = __webpack_require__(24);
5182exports.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;
5183exports.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;
5184const protocol_configuration_1 = __webpack_require__(25);
5185exports.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;
5186const protocol_colorProvider_1 = __webpack_require__(26);
5187exports.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;
5188exports.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;
5189const protocol_foldingRange_1 = __webpack_require__(27);
5190exports.FoldingRangeRequest = protocol_foldingRange_1.FoldingRangeRequest;
5191const protocol_declaration_1 = __webpack_require__(28);
5192exports.DeclarationRequest = protocol_declaration_1.DeclarationRequest;
5193const protocol_selectionRange_1 = __webpack_require__(29);
5194exports.SelectionRangeRequest = protocol_selectionRange_1.SelectionRangeRequest;
5195const protocol_progress_1 = __webpack_require__(30);
5196exports.WorkDoneProgress = protocol_progress_1.WorkDoneProgress;
5197exports.WorkDoneProgressCreateRequest = protocol_progress_1.WorkDoneProgressCreateRequest;
5198exports.WorkDoneProgressCancelNotification = protocol_progress_1.WorkDoneProgressCancelNotification;
5199// @ts-ignore: to avoid inlining LocatioLink as dynamic import
5200let __noDynamicImport;
5201/**
5202 * The DocumentFilter namespace provides helper functions to work with
5203 * [DocumentFilter](#DocumentFilter) literals.
5204 */
5205var DocumentFilter;
5206(function (DocumentFilter) {
5207 function is(value) {
5208 const candidate = value;
5209 return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);
5210 }
5211 DocumentFilter.is = is;
5212})(DocumentFilter = exports.DocumentFilter || (exports.DocumentFilter = {}));
5213/**
5214 * The DocumentSelector namespace provides helper functions to work with
5215 * [DocumentSelector](#DocumentSelector)s.
5216 */
5217var DocumentSelector;
5218(function (DocumentSelector) {
5219 function is(value) {
5220 if (!Array.isArray(value)) {
5221 return false;
5222 }
5223 for (let elem of value) {
5224 if (!Is.string(elem) && !DocumentFilter.is(elem)) {
5225 return false;
5226 }
5227 }
5228 return true;
5229 }
5230 DocumentSelector.is = is;
5231})(DocumentSelector = exports.DocumentSelector || (exports.DocumentSelector = {}));
5232/**
5233 * The `client/registerCapability` request is sent from the server to the client to register a new capability
5234 * handler on the client side.
5235 */
5236var RegistrationRequest;
5237(function (RegistrationRequest) {
5238 RegistrationRequest.type = new messages_1.ProtocolRequestType('client/registerCapability');
5239})(RegistrationRequest = exports.RegistrationRequest || (exports.RegistrationRequest = {}));
5240/**
5241 * The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability
5242 * handler on the client side.
5243 */
5244var UnregistrationRequest;
5245(function (UnregistrationRequest) {
5246 UnregistrationRequest.type = new messages_1.ProtocolRequestType('client/unregisterCapability');
5247})(UnregistrationRequest = exports.UnregistrationRequest || (exports.UnregistrationRequest = {}));
5248var ResourceOperationKind;
5249(function (ResourceOperationKind) {
5250 /**
5251 * Supports creating new files and folders.
5252 */
5253 ResourceOperationKind.Create = 'create';
5254 /**
5255 * Supports renaming existing files and folders.
5256 */
5257 ResourceOperationKind.Rename = 'rename';
5258 /**
5259 * Supports deleting existing files and folders.
5260 */
5261 ResourceOperationKind.Delete = 'delete';
5262})(ResourceOperationKind = exports.ResourceOperationKind || (exports.ResourceOperationKind = {}));
5263var FailureHandlingKind;
5264(function (FailureHandlingKind) {
5265 /**
5266 * Applying the workspace change is simply aborted if one of the changes provided
5267 * fails. All operations executed before the failing operation stay executed.
5268 */
5269 FailureHandlingKind.Abort = 'abort';
5270 /**
5271 * All operations are executed transactional. That means they either all
5272 * succeed or no changes at all are applied to the workspace.
5273 */
5274 FailureHandlingKind.Transactional = 'transactional';
5275 /**
5276 * If the workspace edit contains only textual file changes they are executed transactional.
5277 * If resource changes (create, rename or delete file) are part of the change the failure
5278 * handling startegy is abort.
5279 */
5280 FailureHandlingKind.TextOnlyTransactional = 'textOnlyTransactional';
5281 /**
5282 * The client tries to undo the operations already executed. But there is no
5283 * guarantee that this is succeeding.
5284 */
5285 FailureHandlingKind.Undo = 'undo';
5286})(FailureHandlingKind = exports.FailureHandlingKind || (exports.FailureHandlingKind = {}));
5287/**
5288 * The StaticRegistrationOptions namespace provides helper functions to work with
5289 * [StaticRegistrationOptions](#StaticRegistrationOptions) literals.
5290 */
5291var StaticRegistrationOptions;
5292(function (StaticRegistrationOptions) {
5293 function hasId(value) {
5294 const candidate = value;
5295 return candidate && Is.string(candidate.id) && candidate.id.length > 0;
5296 }
5297 StaticRegistrationOptions.hasId = hasId;
5298})(StaticRegistrationOptions = exports.StaticRegistrationOptions || (exports.StaticRegistrationOptions = {}));
5299/**
5300 * The TextDocumentRegistrationOptions namespace provides helper functions to work with
5301 * [TextDocumentRegistrationOptions](#TextDocumentRegistrationOptions) literals.
5302 */
5303var TextDocumentRegistrationOptions;
5304(function (TextDocumentRegistrationOptions) {
5305 function is(value) {
5306 const candidate = value;
5307 return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));
5308 }
5309 TextDocumentRegistrationOptions.is = is;
5310})(TextDocumentRegistrationOptions = exports.TextDocumentRegistrationOptions || (exports.TextDocumentRegistrationOptions = {}));
5311/**
5312 * The WorkDoneProgressOptions namespace provides helper functions to work with
5313 * [WorkDoneProgressOptions](#WorkDoneProgressOptions) literals.
5314 */
5315var WorkDoneProgressOptions;
5316(function (WorkDoneProgressOptions) {
5317 function is(value) {
5318 const candidate = value;
5319 return Is.objectLiteral(candidate) && (candidate.workDoneProgress === undefined || Is.boolean(candidate.workDoneProgress));
5320 }
5321 WorkDoneProgressOptions.is = is;
5322 function hasWorkDoneProgress(value) {
5323 const candidate = value;
5324 return candidate && Is.boolean(candidate.workDoneProgress);
5325 }
5326 WorkDoneProgressOptions.hasWorkDoneProgress = hasWorkDoneProgress;
5327})(WorkDoneProgressOptions = exports.WorkDoneProgressOptions || (exports.WorkDoneProgressOptions = {}));
5328/**
5329 * The initialize request is sent from the client to the server.
5330 * It is sent once as the request after starting up the server.
5331 * The requests parameter is of type [InitializeParams](#InitializeParams)
5332 * the response if of type [InitializeResult](#InitializeResult) of a Thenable that
5333 * resolves to such.
5334 */
5335var InitializeRequest;
5336(function (InitializeRequest) {
5337 InitializeRequest.type = new messages_1.ProtocolRequestType('initialize');
5338})(InitializeRequest = exports.InitializeRequest || (exports.InitializeRequest = {}));
5339/**
5340 * Known error codes for an `InitializeError`;
5341 */
5342var InitializeError;
5343(function (InitializeError) {
5344 /**
5345 * If the protocol version provided by the client can't be handled by the server.
5346 * @deprecated This initialize error got replaced by client capabilities. There is
5347 * no version handshake in version 3.0x
5348 */
5349 InitializeError.unknownProtocolVersion = 1;
5350})(InitializeError = exports.InitializeError || (exports.InitializeError = {}));
5351/**
5352 * The intialized notification is sent from the client to the
5353 * server after the client is fully initialized and the server
5354 * is allowed to send requests from the server to the client.
5355 */
5356var InitializedNotification;
5357(function (InitializedNotification) {
5358 InitializedNotification.type = new messages_1.ProtocolNotificationType('initialized');
5359})(InitializedNotification = exports.InitializedNotification || (exports.InitializedNotification = {}));
5360//---- Shutdown Method ----
5361/**
5362 * A shutdown request is sent from the client to the server.
5363 * It is sent once when the client decides to shutdown the
5364 * server. The only notification that is sent after a shutdown request
5365 * is the exit event.
5366 */
5367var ShutdownRequest;
5368(function (ShutdownRequest) {
5369 ShutdownRequest.type = new messages_1.ProtocolRequestType0('shutdown');
5370})(ShutdownRequest = exports.ShutdownRequest || (exports.ShutdownRequest = {}));
5371//---- Exit Notification ----
5372/**
5373 * The exit event is sent from the client to the server to
5374 * ask the server to exit its process.
5375 */
5376var ExitNotification;
5377(function (ExitNotification) {
5378 ExitNotification.type = new messages_1.ProtocolNotificationType0('exit');
5379})(ExitNotification = exports.ExitNotification || (exports.ExitNotification = {}));
5380/**
5381 * The configuration change notification is sent from the client to the server
5382 * when the client's configuration has changed. The notification contains
5383 * the changed configuration as defined by the language client.
5384 */
5385var DidChangeConfigurationNotification;
5386(function (DidChangeConfigurationNotification) {
5387 DidChangeConfigurationNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeConfiguration');
5388})(DidChangeConfigurationNotification = exports.DidChangeConfigurationNotification || (exports.DidChangeConfigurationNotification = {}));
5389//---- Message show and log notifications ----
5390/**
5391 * The message type
5392 */
5393var MessageType;
5394(function (MessageType) {
5395 /**
5396 * An error message.
5397 */
5398 MessageType.Error = 1;
5399 /**
5400 * A warning message.
5401 */
5402 MessageType.Warning = 2;
5403 /**
5404 * An information message.
5405 */
5406 MessageType.Info = 3;
5407 /**
5408 * A log message.
5409 */
5410 MessageType.Log = 4;
5411})(MessageType = exports.MessageType || (exports.MessageType = {}));
5412/**
5413 * The show message notification is sent from a server to a client to ask
5414 * the client to display a particular message in the user interface.
5415 */
5416var ShowMessageNotification;
5417(function (ShowMessageNotification) {
5418 ShowMessageNotification.type = new messages_1.ProtocolNotificationType('window/showMessage');
5419})(ShowMessageNotification = exports.ShowMessageNotification || (exports.ShowMessageNotification = {}));
5420/**
5421 * The show message request is sent from the server to the client to show a message
5422 * and a set of options actions to the user.
5423 */
5424var ShowMessageRequest;
5425(function (ShowMessageRequest) {
5426 ShowMessageRequest.type = new messages_1.ProtocolRequestType('window/showMessageRequest');
5427})(ShowMessageRequest = exports.ShowMessageRequest || (exports.ShowMessageRequest = {}));
5428/**
5429 * The log message notification is sent from the server to the client to ask
5430 * the client to log a particular message.
5431 */
5432var LogMessageNotification;
5433(function (LogMessageNotification) {
5434 LogMessageNotification.type = new messages_1.ProtocolNotificationType('window/logMessage');
5435})(LogMessageNotification = exports.LogMessageNotification || (exports.LogMessageNotification = {}));
5436//---- Telemetry notification
5437/**
5438 * The telemetry event notification is sent from the server to the client to ask
5439 * the client to log telemetry data.
5440 */
5441var TelemetryEventNotification;
5442(function (TelemetryEventNotification) {
5443 TelemetryEventNotification.type = new messages_1.ProtocolNotificationType('telemetry/event');
5444})(TelemetryEventNotification = exports.TelemetryEventNotification || (exports.TelemetryEventNotification = {}));
5445/**
5446 * Defines how the host (editor) should sync
5447 * document changes to the language server.
5448 */
5449var TextDocumentSyncKind;
5450(function (TextDocumentSyncKind) {
5451 /**
5452 * Documents should not be synced at all.
5453 */
5454 TextDocumentSyncKind.None = 0;
5455 /**
5456 * Documents are synced by always sending the full content
5457 * of the document.
5458 */
5459 TextDocumentSyncKind.Full = 1;
5460 /**
5461 * Documents are synced by sending the full content on open.
5462 * After that only incremental updates to the document are
5463 * send.
5464 */
5465 TextDocumentSyncKind.Incremental = 2;
5466})(TextDocumentSyncKind = exports.TextDocumentSyncKind || (exports.TextDocumentSyncKind = {}));
5467/**
5468 * The document open notification is sent from the client to the server to signal
5469 * newly opened text documents. The document's truth is now managed by the client
5470 * and the server must not try to read the document's truth using the document's
5471 * uri. Open in this sense means it is managed by the client. It doesn't necessarily
5472 * mean that its content is presented in an editor. An open notification must not
5473 * be sent more than once without a corresponding close notification send before.
5474 * This means open and close notification must be balanced and the max open count
5475 * is one.
5476 */
5477var DidOpenTextDocumentNotification;
5478(function (DidOpenTextDocumentNotification) {
5479 DidOpenTextDocumentNotification.method = 'textDocument/didOpen';
5480 DidOpenTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification.method);
5481})(DidOpenTextDocumentNotification = exports.DidOpenTextDocumentNotification || (exports.DidOpenTextDocumentNotification = {}));
5482/**
5483 * The document change notification is sent from the client to the server to signal
5484 * changes to a text document.
5485 */
5486var DidChangeTextDocumentNotification;
5487(function (DidChangeTextDocumentNotification) {
5488 DidChangeTextDocumentNotification.method = 'textDocument/didChange';
5489 DidChangeTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification.method);
5490})(DidChangeTextDocumentNotification = exports.DidChangeTextDocumentNotification || (exports.DidChangeTextDocumentNotification = {}));
5491/**
5492 * The document close notification is sent from the client to the server when
5493 * the document got closed in the client. The document's truth now exists where
5494 * the document's uri points to (e.g. if the document's uri is a file uri the
5495 * truth now exists on disk). As with the open notification the close notification
5496 * is about managing the document's content. Receiving a close notification
5497 * doesn't mean that the document was open in an editor before. A close
5498 * notification requires a previous open notification to be sent.
5499 */
5500var DidCloseTextDocumentNotification;
5501(function (DidCloseTextDocumentNotification) {
5502 DidCloseTextDocumentNotification.method = 'textDocument/didClose';
5503 DidCloseTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification.method);
5504})(DidCloseTextDocumentNotification = exports.DidCloseTextDocumentNotification || (exports.DidCloseTextDocumentNotification = {}));
5505/**
5506 * The document save notification is sent from the client to the server when
5507 * the document got saved in the client.
5508 */
5509var DidSaveTextDocumentNotification;
5510(function (DidSaveTextDocumentNotification) {
5511 DidSaveTextDocumentNotification.method = 'textDocument/didSave';
5512 DidSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification.method);
5513})(DidSaveTextDocumentNotification = exports.DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = {}));
5514/**
5515 * Represents reasons why a text document is saved.
5516 */
5517var TextDocumentSaveReason;
5518(function (TextDocumentSaveReason) {
5519 /**
5520 * Manually triggered, e.g. by the user pressing save, by starting debugging,
5521 * or by an API call.
5522 */
5523 TextDocumentSaveReason.Manual = 1;
5524 /**
5525 * Automatic after a delay.
5526 */
5527 TextDocumentSaveReason.AfterDelay = 2;
5528 /**
5529 * When the editor lost focus.
5530 */
5531 TextDocumentSaveReason.FocusOut = 3;
5532})(TextDocumentSaveReason = exports.TextDocumentSaveReason || (exports.TextDocumentSaveReason = {}));
5533/**
5534 * A document will save notification is sent from the client to the server before
5535 * the document is actually saved.
5536 */
5537var WillSaveTextDocumentNotification;
5538(function (WillSaveTextDocumentNotification) {
5539 WillSaveTextDocumentNotification.method = 'textDocument/willSave';
5540 WillSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification.method);
5541})(WillSaveTextDocumentNotification = exports.WillSaveTextDocumentNotification || (exports.WillSaveTextDocumentNotification = {}));
5542/**
5543 * A document will save request is sent from the client to the server before
5544 * the document is actually saved. The request can return an array of TextEdits
5545 * which will be applied to the text document before it is saved. Please note that
5546 * clients might drop results if computing the text edits took too long or if a
5547 * server constantly fails on this request. This is done to keep the save fast and
5548 * reliable.
5549 */
5550var WillSaveTextDocumentWaitUntilRequest;
5551(function (WillSaveTextDocumentWaitUntilRequest) {
5552 WillSaveTextDocumentWaitUntilRequest.method = 'textDocument/willSaveWaitUntil';
5553 WillSaveTextDocumentWaitUntilRequest.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest.method);
5554})(WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = {}));
5555/**
5556 * The watched files notification is sent from the client to the server when
5557 * the client detects changes to file watched by the language client.
5558 */
5559var DidChangeWatchedFilesNotification;
5560(function (DidChangeWatchedFilesNotification) {
5561 DidChangeWatchedFilesNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWatchedFiles');
5562})(DidChangeWatchedFilesNotification = exports.DidChangeWatchedFilesNotification || (exports.DidChangeWatchedFilesNotification = {}));
5563/**
5564 * The file event type
5565 */
5566var FileChangeType;
5567(function (FileChangeType) {
5568 /**
5569 * The file got created.
5570 */
5571 FileChangeType.Created = 1;
5572 /**
5573 * The file got changed.
5574 */
5575 FileChangeType.Changed = 2;
5576 /**
5577 * The file got deleted.
5578 */
5579 FileChangeType.Deleted = 3;
5580})(FileChangeType = exports.FileChangeType || (exports.FileChangeType = {}));
5581var WatchKind;
5582(function (WatchKind) {
5583 /**
5584 * Interested in create events.
5585 */
5586 WatchKind.Create = 1;
5587 /**
5588 * Interested in change events
5589 */
5590 WatchKind.Change = 2;
5591 /**
5592 * Interested in delete events
5593 */
5594 WatchKind.Delete = 4;
5595})(WatchKind = exports.WatchKind || (exports.WatchKind = {}));
5596/**
5597 * Diagnostics notification are sent from the server to the client to signal
5598 * results of validation runs.
5599 */
5600var PublishDiagnosticsNotification;
5601(function (PublishDiagnosticsNotification) {
5602 PublishDiagnosticsNotification.type = new messages_1.ProtocolNotificationType('textDocument/publishDiagnostics');
5603})(PublishDiagnosticsNotification = exports.PublishDiagnosticsNotification || (exports.PublishDiagnosticsNotification = {}));
5604/**
5605 * How a completion was triggered
5606 */
5607var CompletionTriggerKind;
5608(function (CompletionTriggerKind) {
5609 /**
5610 * Completion was triggered by typing an identifier (24x7 code
5611 * complete), manual invocation (e.g Ctrl+Space) or via API.
5612 */
5613 CompletionTriggerKind.Invoked = 1;
5614 /**
5615 * Completion was triggered by a trigger character specified by
5616 * the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
5617 */
5618 CompletionTriggerKind.TriggerCharacter = 2;
5619 /**
5620 * Completion was re-triggered as current completion list is incomplete
5621 */
5622 CompletionTriggerKind.TriggerForIncompleteCompletions = 3;
5623})(CompletionTriggerKind = exports.CompletionTriggerKind || (exports.CompletionTriggerKind = {}));
5624/**
5625 * Request to request completion at a given text document position. The request's
5626 * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response
5627 * is of type [CompletionItem[]](#CompletionItem) or [CompletionList](#CompletionList)
5628 * or a Thenable that resolves to such.
5629 *
5630 * The request can delay the computation of the [`detail`](#CompletionItem.detail)
5631 * and [`documentation`](#CompletionItem.documentation) properties to the `completionItem/resolve`
5632 * request. However, properties that are needed for the initial sorting and filtering, like `sortText`,
5633 * `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.
5634 */
5635var CompletionRequest;
5636(function (CompletionRequest) {
5637 CompletionRequest.method = 'textDocument/completion';
5638 CompletionRequest.type = new messages_1.ProtocolRequestType(CompletionRequest.method);
5639 /** @deprecated Use CompletionRequest.type */
5640 CompletionRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5641})(CompletionRequest = exports.CompletionRequest || (exports.CompletionRequest = {}));
5642/**
5643 * Request to resolve additional information for a given completion item.The request's
5644 * parameter is of type [CompletionItem](#CompletionItem) the response
5645 * is of type [CompletionItem](#CompletionItem) or a Thenable that resolves to such.
5646 */
5647var CompletionResolveRequest;
5648(function (CompletionResolveRequest) {
5649 CompletionResolveRequest.method = 'completionItem/resolve';
5650 CompletionResolveRequest.type = new messages_1.ProtocolRequestType(CompletionResolveRequest.method);
5651})(CompletionResolveRequest = exports.CompletionResolveRequest || (exports.CompletionResolveRequest = {}));
5652/**
5653 * Request to request hover information at a given text document position. The request's
5654 * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response is of
5655 * type [Hover](#Hover) or a Thenable that resolves to such.
5656 */
5657var HoverRequest;
5658(function (HoverRequest) {
5659 HoverRequest.method = 'textDocument/hover';
5660 HoverRequest.type = new messages_1.ProtocolRequestType(HoverRequest.method);
5661})(HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}));
5662/**
5663 * How a signature help was triggered.
5664 *
5665 * @since 3.15.0
5666 */
5667var SignatureHelpTriggerKind;
5668(function (SignatureHelpTriggerKind) {
5669 /**
5670 * Signature help was invoked manually by the user or by a command.
5671 */
5672 SignatureHelpTriggerKind.Invoked = 1;
5673 /**
5674 * Signature help was triggered by a trigger character.
5675 */
5676 SignatureHelpTriggerKind.TriggerCharacter = 2;
5677 /**
5678 * Signature help was triggered by the cursor moving or by the document content changing.
5679 */
5680 SignatureHelpTriggerKind.ContentChange = 3;
5681})(SignatureHelpTriggerKind = exports.SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = {}));
5682var SignatureHelpRequest;
5683(function (SignatureHelpRequest) {
5684 SignatureHelpRequest.method = 'textDocument/signatureHelp';
5685 SignatureHelpRequest.type = new messages_1.ProtocolRequestType(SignatureHelpRequest.method);
5686})(SignatureHelpRequest = exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {}));
5687/**
5688 * A request to resolve the definition location of a symbol at a given text
5689 * document position. The request's parameter is of type [TextDocumentPosition]
5690 * (#TextDocumentPosition) the response is of either type [Definition](#Definition)
5691 * or a typed array of [DefinitionLink](#DefinitionLink) or a Thenable that resolves
5692 * to such.
5693 */
5694var DefinitionRequest;
5695(function (DefinitionRequest) {
5696 DefinitionRequest.method = 'textDocument/definition';
5697 DefinitionRequest.type = new messages_1.ProtocolRequestType(DefinitionRequest.method);
5698 /** @deprecated Use DefinitionRequest.type */
5699 DefinitionRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5700})(DefinitionRequest = exports.DefinitionRequest || (exports.DefinitionRequest = {}));
5701/**
5702 * A request to resolve project-wide references for the symbol denoted
5703 * by the given text document position. The request's parameter is of
5704 * type [ReferenceParams](#ReferenceParams) the response is of type
5705 * [Location[]](#Location) or a Thenable that resolves to such.
5706 */
5707var ReferencesRequest;
5708(function (ReferencesRequest) {
5709 ReferencesRequest.method = 'textDocument/references';
5710 ReferencesRequest.type = new messages_1.ProtocolRequestType(ReferencesRequest.method);
5711 /** @deprecated Use ReferencesRequest.type */
5712 ReferencesRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5713})(ReferencesRequest = exports.ReferencesRequest || (exports.ReferencesRequest = {}));
5714/**
5715 * Request to resolve a [DocumentHighlight](#DocumentHighlight) for a given
5716 * text document position. The request's parameter is of type [TextDocumentPosition]
5717 * (#TextDocumentPosition) the request response is of type [DocumentHighlight[]]
5718 * (#DocumentHighlight) or a Thenable that resolves to such.
5719 */
5720var DocumentHighlightRequest;
5721(function (DocumentHighlightRequest) {
5722 DocumentHighlightRequest.method = 'textDocument/documentHighlight';
5723 DocumentHighlightRequest.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest.method);
5724 /** @deprecated Use DocumentHighlightRequest.type */
5725 DocumentHighlightRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5726})(DocumentHighlightRequest = exports.DocumentHighlightRequest || (exports.DocumentHighlightRequest = {}));
5727/**
5728 * A request to list all symbols found in a given text document. The request's
5729 * parameter is of type [TextDocumentIdentifier](#TextDocumentIdentifier) the
5730 * response is of type [SymbolInformation[]](#SymbolInformation) or a Thenable
5731 * that resolves to such.
5732 */
5733var DocumentSymbolRequest;
5734(function (DocumentSymbolRequest) {
5735 DocumentSymbolRequest.method = 'textDocument/documentSymbol';
5736 DocumentSymbolRequest.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest.method);
5737 /** @deprecated Use DocumentSymbolRequest.type */
5738 DocumentSymbolRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5739})(DocumentSymbolRequest = exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {}));
5740/**
5741 * A request to provide commands for the given text document and range.
5742 */
5743var CodeActionRequest;
5744(function (CodeActionRequest) {
5745 CodeActionRequest.method = 'textDocument/codeAction';
5746 CodeActionRequest.type = new messages_1.ProtocolRequestType(CodeActionRequest.method);
5747 /** @deprecated Use CodeActionRequest.type */
5748 CodeActionRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5749})(CodeActionRequest = exports.CodeActionRequest || (exports.CodeActionRequest = {}));
5750/**
5751 * A request to list project-wide symbols matching the query string given
5752 * by the [WorkspaceSymbolParams](#WorkspaceSymbolParams). The response is
5753 * of type [SymbolInformation[]](#SymbolInformation) or a Thenable that
5754 * resolves to such.
5755 */
5756var WorkspaceSymbolRequest;
5757(function (WorkspaceSymbolRequest) {
5758 WorkspaceSymbolRequest.method = 'workspace/symbol';
5759 WorkspaceSymbolRequest.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest.method);
5760 /** @deprecated Use WorkspaceSymbolRequest.type */
5761 WorkspaceSymbolRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5762})(WorkspaceSymbolRequest = exports.WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = {}));
5763/**
5764 * A request to provide code lens for the given text document.
5765 */
5766var CodeLensRequest;
5767(function (CodeLensRequest) {
5768 CodeLensRequest.type = new messages_1.ProtocolRequestType('textDocument/codeLens');
5769 /** @deprecated Use CodeLensRequest.type */
5770 CodeLensRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5771})(CodeLensRequest = exports.CodeLensRequest || (exports.CodeLensRequest = {}));
5772/**
5773 * A request to resolve a command for a given code lens.
5774 */
5775var CodeLensResolveRequest;
5776(function (CodeLensResolveRequest) {
5777 CodeLensResolveRequest.type = new messages_1.ProtocolRequestType('codeLens/resolve');
5778})(CodeLensResolveRequest = exports.CodeLensResolveRequest || (exports.CodeLensResolveRequest = {}));
5779/**
5780 * A request to provide document links
5781 */
5782var DocumentLinkRequest;
5783(function (DocumentLinkRequest) {
5784 DocumentLinkRequest.method = 'textDocument/documentLink';
5785 DocumentLinkRequest.type = new messages_1.ProtocolRequestType(DocumentLinkRequest.method);
5786 /** @deprecated Use DocumentLinkRequest.type */
5787 DocumentLinkRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5788})(DocumentLinkRequest = exports.DocumentLinkRequest || (exports.DocumentLinkRequest = {}));
5789/**
5790 * Request to resolve additional information for a given document link. The request's
5791 * parameter is of type [DocumentLink](#DocumentLink) the response
5792 * is of type [DocumentLink](#DocumentLink) or a Thenable that resolves to such.
5793 */
5794var DocumentLinkResolveRequest;
5795(function (DocumentLinkResolveRequest) {
5796 DocumentLinkResolveRequest.type = new messages_1.ProtocolRequestType('documentLink/resolve');
5797})(DocumentLinkResolveRequest = exports.DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = {}));
5798/**
5799 * A request to to format a whole document.
5800 */
5801var DocumentFormattingRequest;
5802(function (DocumentFormattingRequest) {
5803 DocumentFormattingRequest.method = 'textDocument/formatting';
5804 DocumentFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest.method);
5805})(DocumentFormattingRequest = exports.DocumentFormattingRequest || (exports.DocumentFormattingRequest = {}));
5806/**
5807 * A request to to format a range in a document.
5808 */
5809var DocumentRangeFormattingRequest;
5810(function (DocumentRangeFormattingRequest) {
5811 DocumentRangeFormattingRequest.method = 'textDocument/rangeFormatting';
5812 DocumentRangeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest.method);
5813})(DocumentRangeFormattingRequest = exports.DocumentRangeFormattingRequest || (exports.DocumentRangeFormattingRequest = {}));
5814/**
5815 * A request to format a document on type.
5816 */
5817var DocumentOnTypeFormattingRequest;
5818(function (DocumentOnTypeFormattingRequest) {
5819 DocumentOnTypeFormattingRequest.method = 'textDocument/onTypeFormatting';
5820 DocumentOnTypeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest.method);
5821})(DocumentOnTypeFormattingRequest = exports.DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = {}));
5822/**
5823 * A request to rename a symbol.
5824 */
5825var RenameRequest;
5826(function (RenameRequest) {
5827 RenameRequest.method = 'textDocument/rename';
5828 RenameRequest.type = new messages_1.ProtocolRequestType(RenameRequest.method);
5829})(RenameRequest = exports.RenameRequest || (exports.RenameRequest = {}));
5830/**
5831 * A request to test and perform the setup necessary for a rename.
5832 */
5833var PrepareRenameRequest;
5834(function (PrepareRenameRequest) {
5835 PrepareRenameRequest.method = 'textDocument/prepareRename';
5836 PrepareRenameRequest.type = new messages_1.ProtocolRequestType(PrepareRenameRequest.method);
5837})(PrepareRenameRequest = exports.PrepareRenameRequest || (exports.PrepareRenameRequest = {}));
5838/**
5839 * A request send from the client to the server to execute a command. The request might return
5840 * a workspace edit which the client will apply to the workspace.
5841 */
5842var ExecuteCommandRequest;
5843(function (ExecuteCommandRequest) {
5844 ExecuteCommandRequest.type = new messages_1.ProtocolRequestType('workspace/executeCommand');
5845})(ExecuteCommandRequest = exports.ExecuteCommandRequest || (exports.ExecuteCommandRequest = {}));
5846/**
5847 * A request sent from the server to the client to modified certain resources.
5848 */
5849var ApplyWorkspaceEditRequest;
5850(function (ApplyWorkspaceEditRequest) {
5851 ApplyWorkspaceEditRequest.type = new messages_1.ProtocolRequestType('workspace/applyEdit');
5852})(ApplyWorkspaceEditRequest = exports.ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = {}));
5853
5854
5855/***/ }),
5856/* 20 */
5857/***/ ((__unused_webpack_module, exports) => {
5858
5859"use strict";
5860/* --------------------------------------------------------------------------------------------
5861 * Copyright (c) Microsoft Corporation. All rights reserved.
5862 * Licensed under the MIT License. See License.txt in the project root for license information.
5863 * ------------------------------------------------------------------------------------------ */
5864
5865Object.defineProperty(exports, "__esModule", ({ value: true }));
5866function boolean(value) {
5867 return value === true || value === false;
5868}
5869exports.boolean = boolean;
5870function string(value) {
5871 return typeof value === 'string' || value instanceof String;
5872}
5873exports.string = string;
5874function number(value) {
5875 return typeof value === 'number' || value instanceof Number;
5876}
5877exports.number = number;
5878function error(value) {
5879 return value instanceof Error;
5880}
5881exports.error = error;
5882function func(value) {
5883 return typeof value === 'function';
5884}
5885exports.func = func;
5886function array(value) {
5887 return Array.isArray(value);
5888}
5889exports.array = array;
5890function stringArray(value) {
5891 return array(value) && value.every(elem => string(elem));
5892}
5893exports.stringArray = stringArray;
5894function typedArray(value, check) {
5895 return Array.isArray(value) && value.every(check);
5896}
5897exports.typedArray = typedArray;
5898function objectLiteral(value) {
5899 // Strictly speaking class instances pass this check as well. Since the LSP
5900 // doesn't use classes we ignore this for now. If we do we need to add something
5901 // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
5902 return value !== null && typeof value === 'object';
5903}
5904exports.objectLiteral = objectLiteral;
5905
5906
5907/***/ }),
5908/* 21 */
5909/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
5910
5911"use strict";
5912/* --------------------------------------------------------------------------------------------
5913 * Copyright (c) Microsoft Corporation. All rights reserved.
5914 * Licensed under the MIT License. See License.txt in the project root for license information.
5915 * ------------------------------------------------------------------------------------------ */
5916
5917Object.defineProperty(exports, "__esModule", ({ value: true }));
5918const vscode_jsonrpc_1 = __webpack_require__(4);
5919class ProtocolRequestType0 extends vscode_jsonrpc_1.RequestType0 {
5920 constructor(method) {
5921 super(method);
5922 }
5923}
5924exports.ProtocolRequestType0 = ProtocolRequestType0;
5925class ProtocolRequestType extends vscode_jsonrpc_1.RequestType {
5926 constructor(method) {
5927 super(method);
5928 }
5929}
5930exports.ProtocolRequestType = ProtocolRequestType;
5931class ProtocolNotificationType extends vscode_jsonrpc_1.NotificationType {
5932 constructor(method) {
5933 super(method);
5934 }
5935}
5936exports.ProtocolNotificationType = ProtocolNotificationType;
5937class ProtocolNotificationType0 extends vscode_jsonrpc_1.NotificationType0 {
5938 constructor(method) {
5939 super(method);
5940 }
5941}
5942exports.ProtocolNotificationType0 = ProtocolNotificationType0;
5943
5944
5945/***/ }),
5946/* 22 */
5947/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
5948
5949"use strict";
5950/* --------------------------------------------------------------------------------------------
5951 * Copyright (c) Microsoft Corporation. All rights reserved.
5952 * Licensed under the MIT License. See License.txt in the project root for license information.
5953 * ------------------------------------------------------------------------------------------ */
5954
5955Object.defineProperty(exports, "__esModule", ({ value: true }));
5956const vscode_jsonrpc_1 = __webpack_require__(4);
5957const messages_1 = __webpack_require__(21);
5958// @ts-ignore: to avoid inlining LocatioLink as dynamic import
5959let __noDynamicImport;
5960/**
5961 * A request to resolve the implementation locations of a symbol at a given text
5962 * document position. The request's parameter is of type [TextDocumentPositioParams]
5963 * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a
5964 * Thenable that resolves to such.
5965 */
5966var ImplementationRequest;
5967(function (ImplementationRequest) {
5968 ImplementationRequest.method = 'textDocument/implementation';
5969 ImplementationRequest.type = new messages_1.ProtocolRequestType(ImplementationRequest.method);
5970 /** @deprecated Use ImplementationRequest.type */
5971 ImplementationRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5972})(ImplementationRequest = exports.ImplementationRequest || (exports.ImplementationRequest = {}));
5973
5974
5975/***/ }),
5976/* 23 */
5977/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
5978
5979"use strict";
5980/* --------------------------------------------------------------------------------------------
5981 * Copyright (c) Microsoft Corporation. All rights reserved.
5982 * Licensed under the MIT License. See License.txt in the project root for license information.
5983 * ------------------------------------------------------------------------------------------ */
5984
5985Object.defineProperty(exports, "__esModule", ({ value: true }));
5986const vscode_jsonrpc_1 = __webpack_require__(4);
5987const messages_1 = __webpack_require__(21);
5988// @ts-ignore: to avoid inlining LocatioLink as dynamic import
5989let __noDynamicImport;
5990/**
5991 * A request to resolve the type definition locations of a symbol at a given text
5992 * document position. The request's parameter is of type [TextDocumentPositioParams]
5993 * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a
5994 * Thenable that resolves to such.
5995 */
5996var TypeDefinitionRequest;
5997(function (TypeDefinitionRequest) {
5998 TypeDefinitionRequest.method = 'textDocument/typeDefinition';
5999 TypeDefinitionRequest.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest.method);
6000 /** @deprecated Use TypeDefinitionRequest.type */
6001 TypeDefinitionRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6002})(TypeDefinitionRequest = exports.TypeDefinitionRequest || (exports.TypeDefinitionRequest = {}));
6003
6004
6005/***/ }),
6006/* 24 */
6007/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6008
6009"use strict";
6010/* --------------------------------------------------------------------------------------------
6011 * Copyright (c) Microsoft Corporation. All rights reserved.
6012 * Licensed under the MIT License. See License.txt in the project root for license information.
6013 * ------------------------------------------------------------------------------------------ */
6014
6015Object.defineProperty(exports, "__esModule", ({ value: true }));
6016const messages_1 = __webpack_require__(21);
6017/**
6018 * The `workspace/workspaceFolders` is sent from the server to the client to fetch the open workspace folders.
6019 */
6020var WorkspaceFoldersRequest;
6021(function (WorkspaceFoldersRequest) {
6022 WorkspaceFoldersRequest.type = new messages_1.ProtocolRequestType0('workspace/workspaceFolders');
6023})(WorkspaceFoldersRequest = exports.WorkspaceFoldersRequest || (exports.WorkspaceFoldersRequest = {}));
6024/**
6025 * The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace
6026 * folder configuration changes.
6027 */
6028var DidChangeWorkspaceFoldersNotification;
6029(function (DidChangeWorkspaceFoldersNotification) {
6030 DidChangeWorkspaceFoldersNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWorkspaceFolders');
6031})(DidChangeWorkspaceFoldersNotification = exports.DidChangeWorkspaceFoldersNotification || (exports.DidChangeWorkspaceFoldersNotification = {}));
6032
6033
6034/***/ }),
6035/* 25 */
6036/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6037
6038"use strict";
6039/* --------------------------------------------------------------------------------------------
6040 * Copyright (c) Microsoft Corporation. All rights reserved.
6041 * Licensed under the MIT License. See License.txt in the project root for license information.
6042 * ------------------------------------------------------------------------------------------ */
6043
6044Object.defineProperty(exports, "__esModule", ({ value: true }));
6045const messages_1 = __webpack_require__(21);
6046/**
6047 * The 'workspace/configuration' request is sent from the server to the client to fetch a certain
6048 * configuration setting.
6049 *
6050 * This pull model replaces the old push model were the client signaled configuration change via an
6051 * event. If the server still needs to react to configuration changes (since the server caches the
6052 * result of `workspace/configuration` requests) the server should register for an empty configuration
6053 * change event and empty the cache if such an event is received.
6054 */
6055var ConfigurationRequest;
6056(function (ConfigurationRequest) {
6057 ConfigurationRequest.type = new messages_1.ProtocolRequestType('workspace/configuration');
6058})(ConfigurationRequest = exports.ConfigurationRequest || (exports.ConfigurationRequest = {}));
6059
6060
6061/***/ }),
6062/* 26 */
6063/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6064
6065"use strict";
6066/* --------------------------------------------------------------------------------------------
6067 * Copyright (c) Microsoft Corporation. All rights reserved.
6068 * Licensed under the MIT License. See License.txt in the project root for license information.
6069 * ------------------------------------------------------------------------------------------ */
6070
6071Object.defineProperty(exports, "__esModule", ({ value: true }));
6072const vscode_jsonrpc_1 = __webpack_require__(4);
6073const messages_1 = __webpack_require__(21);
6074/**
6075 * A request to list all color symbols found in a given text document. The request's
6076 * parameter is of type [DocumentColorParams](#DocumentColorParams) the
6077 * response is of type [ColorInformation[]](#ColorInformation) or a Thenable
6078 * that resolves to such.
6079 */
6080var DocumentColorRequest;
6081(function (DocumentColorRequest) {
6082 DocumentColorRequest.method = 'textDocument/documentColor';
6083 DocumentColorRequest.type = new messages_1.ProtocolRequestType(DocumentColorRequest.method);
6084 /** @deprecated Use DocumentColorRequest.type */
6085 DocumentColorRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6086})(DocumentColorRequest = exports.DocumentColorRequest || (exports.DocumentColorRequest = {}));
6087/**
6088 * A request to list all presentation for a color. The request's
6089 * parameter is of type [ColorPresentationParams](#ColorPresentationParams) the
6090 * response is of type [ColorInformation[]](#ColorInformation) or a Thenable
6091 * that resolves to such.
6092 */
6093var ColorPresentationRequest;
6094(function (ColorPresentationRequest) {
6095 ColorPresentationRequest.type = new messages_1.ProtocolRequestType('textDocument/colorPresentation');
6096})(ColorPresentationRequest = exports.ColorPresentationRequest || (exports.ColorPresentationRequest = {}));
6097
6098
6099/***/ }),
6100/* 27 */
6101/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6102
6103"use strict";
6104
6105/*---------------------------------------------------------------------------------------------
6106 * Copyright (c) Microsoft Corporation. All rights reserved.
6107 * Licensed under the MIT License. See License.txt in the project root for license information.
6108 *--------------------------------------------------------------------------------------------*/
6109Object.defineProperty(exports, "__esModule", ({ value: true }));
6110const vscode_jsonrpc_1 = __webpack_require__(4);
6111const messages_1 = __webpack_require__(21);
6112/**
6113 * Enum of known range kinds
6114 */
6115var FoldingRangeKind;
6116(function (FoldingRangeKind) {
6117 /**
6118 * Folding range for a comment
6119 */
6120 FoldingRangeKind["Comment"] = "comment";
6121 /**
6122 * Folding range for a imports or includes
6123 */
6124 FoldingRangeKind["Imports"] = "imports";
6125 /**
6126 * Folding range for a region (e.g. `#region`)
6127 */
6128 FoldingRangeKind["Region"] = "region";
6129})(FoldingRangeKind = exports.FoldingRangeKind || (exports.FoldingRangeKind = {}));
6130/**
6131 * A request to provide folding ranges in a document. The request's
6132 * parameter is of type [FoldingRangeParams](#FoldingRangeParams), the
6133 * response is of type [FoldingRangeList](#FoldingRangeList) or a Thenable
6134 * that resolves to such.
6135 */
6136var FoldingRangeRequest;
6137(function (FoldingRangeRequest) {
6138 FoldingRangeRequest.method = 'textDocument/foldingRange';
6139 FoldingRangeRequest.type = new messages_1.ProtocolRequestType(FoldingRangeRequest.method);
6140 /** @deprecated Use FoldingRangeRequest.type */
6141 FoldingRangeRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6142})(FoldingRangeRequest = exports.FoldingRangeRequest || (exports.FoldingRangeRequest = {}));
6143
6144
6145/***/ }),
6146/* 28 */
6147/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6148
6149"use strict";
6150/* --------------------------------------------------------------------------------------------
6151 * Copyright (c) Microsoft Corporation. All rights reserved.
6152 * Licensed under the MIT License. See License.txt in the project root for license information.
6153 * ------------------------------------------------------------------------------------------ */
6154
6155Object.defineProperty(exports, "__esModule", ({ value: true }));
6156const vscode_jsonrpc_1 = __webpack_require__(4);
6157const messages_1 = __webpack_require__(21);
6158// @ts-ignore: to avoid inlining LocatioLink as dynamic import
6159let __noDynamicImport;
6160/**
6161 * A request to resolve the type definition locations of a symbol at a given text
6162 * document position. The request's parameter is of type [TextDocumentPositioParams]
6163 * (#TextDocumentPositionParams) the response is of type [Declaration](#Declaration)
6164 * or a typed array of [DeclarationLink](#DeclarationLink) or a Thenable that resolves
6165 * to such.
6166 */
6167var DeclarationRequest;
6168(function (DeclarationRequest) {
6169 DeclarationRequest.method = 'textDocument/declaration';
6170 DeclarationRequest.type = new messages_1.ProtocolRequestType(DeclarationRequest.method);
6171 /** @deprecated Use DeclarationRequest.type */
6172 DeclarationRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6173})(DeclarationRequest = exports.DeclarationRequest || (exports.DeclarationRequest = {}));
6174
6175
6176/***/ }),
6177/* 29 */
6178/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6179
6180"use strict";
6181
6182/*---------------------------------------------------------------------------------------------
6183 * Copyright (c) Microsoft Corporation. All rights reserved.
6184 * Licensed under the MIT License. See License.txt in the project root for license information.
6185 *--------------------------------------------------------------------------------------------*/
6186Object.defineProperty(exports, "__esModule", ({ value: true }));
6187const vscode_jsonrpc_1 = __webpack_require__(4);
6188const messages_1 = __webpack_require__(21);
6189/**
6190 * A request to provide selection ranges in a document. The request's
6191 * parameter is of type [SelectionRangeParams](#SelectionRangeParams), the
6192 * response is of type [SelectionRange[]](#SelectionRange[]) or a Thenable
6193 * that resolves to such.
6194 */
6195var SelectionRangeRequest;
6196(function (SelectionRangeRequest) {
6197 SelectionRangeRequest.method = 'textDocument/selectionRange';
6198 SelectionRangeRequest.type = new messages_1.ProtocolRequestType(SelectionRangeRequest.method);
6199 /** @deprecated Use SelectionRangeRequest.type */
6200 SelectionRangeRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6201})(SelectionRangeRequest = exports.SelectionRangeRequest || (exports.SelectionRangeRequest = {}));
6202
6203
6204/***/ }),
6205/* 30 */
6206/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6207
6208"use strict";
6209/* --------------------------------------------------------------------------------------------
6210 * Copyright (c) Microsoft Corporation. All rights reserved.
6211 * Licensed under the MIT License. See License.txt in the project root for license information.
6212 * ------------------------------------------------------------------------------------------ */
6213
6214Object.defineProperty(exports, "__esModule", ({ value: true }));
6215const vscode_jsonrpc_1 = __webpack_require__(4);
6216const messages_1 = __webpack_require__(21);
6217var WorkDoneProgress;
6218(function (WorkDoneProgress) {
6219 WorkDoneProgress.type = new vscode_jsonrpc_1.ProgressType();
6220})(WorkDoneProgress = exports.WorkDoneProgress || (exports.WorkDoneProgress = {}));
6221/**
6222 * The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress
6223 * reporting from the server.
6224 */
6225var WorkDoneProgressCreateRequest;
6226(function (WorkDoneProgressCreateRequest) {
6227 WorkDoneProgressCreateRequest.type = new messages_1.ProtocolRequestType('window/workDoneProgress/create');
6228})(WorkDoneProgressCreateRequest = exports.WorkDoneProgressCreateRequest || (exports.WorkDoneProgressCreateRequest = {}));
6229/**
6230 * The `window/workDoneProgress/cancel` notification is sent from the client to the server to cancel a progress
6231 * initiated on the server side.
6232 */
6233var WorkDoneProgressCancelNotification;
6234(function (WorkDoneProgressCancelNotification) {
6235 WorkDoneProgressCancelNotification.type = new messages_1.ProtocolNotificationType('window/workDoneProgress/cancel');
6236})(WorkDoneProgressCancelNotification = exports.WorkDoneProgressCancelNotification || (exports.WorkDoneProgressCancelNotification = {}));
6237
6238
6239/***/ }),
6240/* 31 */
6241/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6242
6243"use strict";
6244/* --------------------------------------------------------------------------------------------
6245 * Copyright (c) TypeFox and others. All rights reserved.
6246 * Licensed under the MIT License. See License.txt in the project root for license information.
6247 * ------------------------------------------------------------------------------------------ */
6248
6249Object.defineProperty(exports, "__esModule", ({ value: true }));
6250const messages_1 = __webpack_require__(21);
6251/**
6252 * A request to result a `CallHierarchyItem` in a document at a given position.
6253 * Can be used as an input to a incoming or outgoing call hierarchy.
6254 *
6255 * @since 3.16.0 - Proposed state
6256 */
6257var CallHierarchyPrepareRequest;
6258(function (CallHierarchyPrepareRequest) {
6259 CallHierarchyPrepareRequest.method = 'textDocument/prepareCallHierarchy';
6260 CallHierarchyPrepareRequest.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest.method);
6261})(CallHierarchyPrepareRequest = exports.CallHierarchyPrepareRequest || (exports.CallHierarchyPrepareRequest = {}));
6262/**
6263 * A request to resolve the incoming calls for a given `CallHierarchyItem`.
6264 *
6265 * @since 3.16.0 - Proposed state
6266 */
6267var CallHierarchyIncomingCallsRequest;
6268(function (CallHierarchyIncomingCallsRequest) {
6269 CallHierarchyIncomingCallsRequest.method = 'callHierarchy/incomingCalls';
6270 CallHierarchyIncomingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest.method);
6271})(CallHierarchyIncomingCallsRequest = exports.CallHierarchyIncomingCallsRequest || (exports.CallHierarchyIncomingCallsRequest = {}));
6272/**
6273 * A request to resolve the outgoing calls for a given `CallHierarchyItem`.
6274 *
6275 * @since 3.16.0 - Proposed state
6276 */
6277var CallHierarchyOutgoingCallsRequest;
6278(function (CallHierarchyOutgoingCallsRequest) {
6279 CallHierarchyOutgoingCallsRequest.method = 'callHierarchy/outgoingCalls';
6280 CallHierarchyOutgoingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest.method);
6281})(CallHierarchyOutgoingCallsRequest = exports.CallHierarchyOutgoingCallsRequest || (exports.CallHierarchyOutgoingCallsRequest = {}));
6282
6283
6284/***/ }),
6285/* 32 */
6286/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6287
6288"use strict";
6289/* --------------------------------------------------------------------------------------------
6290 * Copyright (c) Microsoft Corporation. All rights reserved.
6291 * Licensed under the MIT License. See License.txt in the project root for license information.
6292 * ------------------------------------------------------------------------------------------ */
6293
6294Object.defineProperty(exports, "__esModule", ({ value: true }));
6295const messages_1 = __webpack_require__(21);
6296/**
6297 * A set of predefined token types. This set is not fixed
6298 * an clients can specify additional token types via the
6299 * corresponding client capabilities.
6300 *
6301 * @since 3.16.0 - Proposed state
6302 */
6303var SemanticTokenTypes;
6304(function (SemanticTokenTypes) {
6305 SemanticTokenTypes["comment"] = "comment";
6306 SemanticTokenTypes["keyword"] = "keyword";
6307 SemanticTokenTypes["string"] = "string";
6308 SemanticTokenTypes["number"] = "number";
6309 SemanticTokenTypes["regexp"] = "regexp";
6310 SemanticTokenTypes["operator"] = "operator";
6311 SemanticTokenTypes["namespace"] = "namespace";
6312 SemanticTokenTypes["type"] = "type";
6313 SemanticTokenTypes["struct"] = "struct";
6314 SemanticTokenTypes["class"] = "class";
6315 SemanticTokenTypes["interface"] = "interface";
6316 SemanticTokenTypes["enum"] = "enum";
6317 SemanticTokenTypes["typeParameter"] = "typeParameter";
6318 SemanticTokenTypes["function"] = "function";
6319 SemanticTokenTypes["member"] = "member";
6320 SemanticTokenTypes["property"] = "property";
6321 SemanticTokenTypes["macro"] = "macro";
6322 SemanticTokenTypes["variable"] = "variable";
6323 SemanticTokenTypes["parameter"] = "parameter";
6324 SemanticTokenTypes["label"] = "label";
6325})(SemanticTokenTypes = exports.SemanticTokenTypes || (exports.SemanticTokenTypes = {}));
6326/**
6327 * A set of predefined token modifiers. This set is not fixed
6328 * an clients can specify additional token types via the
6329 * corresponding client capabilities.
6330 *
6331 * @since 3.16.0 - Proposed state
6332 */
6333var SemanticTokenModifiers;
6334(function (SemanticTokenModifiers) {
6335 SemanticTokenModifiers["documentation"] = "documentation";
6336 SemanticTokenModifiers["declaration"] = "declaration";
6337 SemanticTokenModifiers["definition"] = "definition";
6338 SemanticTokenModifiers["reference"] = "reference";
6339 SemanticTokenModifiers["static"] = "static";
6340 SemanticTokenModifiers["abstract"] = "abstract";
6341 SemanticTokenModifiers["deprecated"] = "deprecated";
6342 SemanticTokenModifiers["async"] = "async";
6343 SemanticTokenModifiers["volatile"] = "volatile";
6344 SemanticTokenModifiers["readonly"] = "readonly";
6345})(SemanticTokenModifiers = exports.SemanticTokenModifiers || (exports.SemanticTokenModifiers = {}));
6346/**
6347 * @since 3.16.0 - Proposed state
6348 */
6349var SemanticTokens;
6350(function (SemanticTokens) {
6351 function is(value) {
6352 const candidate = value;
6353 return candidate !== undefined && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&
6354 Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');
6355 }
6356 SemanticTokens.is = is;
6357})(SemanticTokens = exports.SemanticTokens || (exports.SemanticTokens = {}));
6358/**
6359 * @since 3.16.0 - Proposed state
6360 */
6361var SemanticTokensRequest;
6362(function (SemanticTokensRequest) {
6363 SemanticTokensRequest.method = 'textDocument/semanticTokens';
6364 SemanticTokensRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRequest.method);
6365})(SemanticTokensRequest = exports.SemanticTokensRequest || (exports.SemanticTokensRequest = {}));
6366/**
6367 * @since 3.16.0 - Proposed state
6368 */
6369var SemanticTokensEditsRequest;
6370(function (SemanticTokensEditsRequest) {
6371 SemanticTokensEditsRequest.method = 'textDocument/semanticTokens/edits';
6372 SemanticTokensEditsRequest.type = new messages_1.ProtocolRequestType(SemanticTokensEditsRequest.method);
6373})(SemanticTokensEditsRequest = exports.SemanticTokensEditsRequest || (exports.SemanticTokensEditsRequest = {}));
6374/**
6375 * @since 3.16.0 - Proposed state
6376 */
6377var SemanticTokensRangeRequest;
6378(function (SemanticTokensRangeRequest) {
6379 SemanticTokensRangeRequest.method = 'textDocument/semanticTokens/range';
6380 SemanticTokensRangeRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest.method);
6381})(SemanticTokensRangeRequest = exports.SemanticTokensRangeRequest || (exports.SemanticTokensRangeRequest = {}));
6382
6383
6384/***/ }),
6385/* 33 */
6386/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6387
6388"use strict";
6389/* --------------------------------------------------------------------------------------------
6390 * Copyright (c) Microsoft Corporation. All rights reserved.
6391 * Licensed under the MIT License. See License.txt in the project root for license information.
6392 * ------------------------------------------------------------------------------------------ */
6393
6394Object.defineProperty(exports, "__esModule", ({ value: true }));
6395const vscode_languageserver_protocol_1 = __webpack_require__(3);
6396const Is = __webpack_require__(34);
6397exports.ConfigurationFeature = (Base) => {
6398 return class extends Base {
6399 getConfiguration(arg) {
6400 if (!arg) {
6401 return this._getConfiguration({});
6402 }
6403 else if (Is.string(arg)) {
6404 return this._getConfiguration({ section: arg });
6405 }
6406 else {
6407 return this._getConfiguration(arg);
6408 }
6409 }
6410 _getConfiguration(arg) {
6411 let params = {
6412 items: Array.isArray(arg) ? arg : [arg]
6413 };
6414 return this.connection.sendRequest(vscode_languageserver_protocol_1.ConfigurationRequest.type, params).then((result) => {
6415 return Array.isArray(arg) ? result : result[0];
6416 });
6417 }
6418 };
6419};
6420//# sourceMappingURL=configuration.js.map
6421
6422/***/ }),
6423/* 34 */
6424/***/ ((__unused_webpack_module, exports) => {
6425
6426"use strict";
6427/* --------------------------------------------------------------------------------------------
6428 * Copyright (c) Microsoft Corporation. All rights reserved.
6429 * Licensed under the MIT License. See License.txt in the project root for license information.
6430 * ------------------------------------------------------------------------------------------ */
6431
6432Object.defineProperty(exports, "__esModule", ({ value: true }));
6433function boolean(value) {
6434 return value === true || value === false;
6435}
6436exports.boolean = boolean;
6437function string(value) {
6438 return typeof value === 'string' || value instanceof String;
6439}
6440exports.string = string;
6441function number(value) {
6442 return typeof value === 'number' || value instanceof Number;
6443}
6444exports.number = number;
6445function error(value) {
6446 return value instanceof Error;
6447}
6448exports.error = error;
6449function func(value) {
6450 return typeof value === 'function';
6451}
6452exports.func = func;
6453function array(value) {
6454 return Array.isArray(value);
6455}
6456exports.array = array;
6457function stringArray(value) {
6458 return array(value) && value.every(elem => string(elem));
6459}
6460exports.stringArray = stringArray;
6461function typedArray(value, check) {
6462 return Array.isArray(value) && value.every(check);
6463}
6464exports.typedArray = typedArray;
6465function thenable(value) {
6466 return value && func(value.then);
6467}
6468exports.thenable = thenable;
6469//# sourceMappingURL=is.js.map
6470
6471/***/ }),
6472/* 35 */
6473/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6474
6475"use strict";
6476/* --------------------------------------------------------------------------------------------
6477 * Copyright (c) Microsoft Corporation. All rights reserved.
6478 * Licensed under the MIT License. See License.txt in the project root for license information.
6479 * ------------------------------------------------------------------------------------------ */
6480
6481Object.defineProperty(exports, "__esModule", ({ value: true }));
6482const vscode_languageserver_protocol_1 = __webpack_require__(3);
6483exports.WorkspaceFoldersFeature = (Base) => {
6484 return class extends Base {
6485 initialize(capabilities) {
6486 let workspaceCapabilities = capabilities.workspace;
6487 if (workspaceCapabilities && workspaceCapabilities.workspaceFolders) {
6488 this._onDidChangeWorkspaceFolders = new vscode_languageserver_protocol_1.Emitter();
6489 this.connection.onNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, (params) => {
6490 this._onDidChangeWorkspaceFolders.fire(params.event);
6491 });
6492 }
6493 }
6494 getWorkspaceFolders() {
6495 return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type);
6496 }
6497 get onDidChangeWorkspaceFolders() {
6498 if (!this._onDidChangeWorkspaceFolders) {
6499 throw new Error('Client doesn\'t support sending workspace folder change events.');
6500 }
6501 if (!this._unregistration) {
6502 this._unregistration = this.connection.client.register(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type);
6503 }
6504 return this._onDidChangeWorkspaceFolders.event;
6505 }
6506 };
6507};
6508//# sourceMappingURL=workspaceFolders.js.map
6509
6510/***/ }),
6511/* 36 */
6512/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6513
6514"use strict";
6515/* --------------------------------------------------------------------------------------------
6516 * Copyright (c) Microsoft Corporation. All rights reserved.
6517 * Licensed under the MIT License. See License.txt in the project root for license information.
6518 * ------------------------------------------------------------------------------------------ */
6519
6520Object.defineProperty(exports, "__esModule", ({ value: true }));
6521const vscode_languageserver_protocol_1 = __webpack_require__(3);
6522const uuid_1 = __webpack_require__(37);
6523class WorkDoneProgressImpl {
6524 constructor(_connection, _token) {
6525 this._connection = _connection;
6526 this._token = _token;
6527 WorkDoneProgressImpl.Instances.set(this._token, this);
6528 this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
6529 }
6530 get token() {
6531 return this._source.token;
6532 }
6533 begin(title, percentage, message, cancellable) {
6534 let param = {
6535 kind: 'begin',
6536 title,
6537 percentage,
6538 message,
6539 cancellable
6540 };
6541 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
6542 }
6543 report(arg0, arg1) {
6544 let param = {
6545 kind: 'report'
6546 };
6547 if (typeof arg0 === 'number') {
6548 param.percentage = arg0;
6549 if (arg1 !== undefined) {
6550 param.message = arg1;
6551 }
6552 }
6553 else {
6554 param.message = arg0;
6555 }
6556 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
6557 }
6558 done() {
6559 WorkDoneProgressImpl.Instances.delete(this._token);
6560 this._source.dispose();
6561 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, { kind: 'end' });
6562 }
6563 cancel() {
6564 this._source.cancel();
6565 }
6566}
6567WorkDoneProgressImpl.Instances = new Map();
6568class NullProgress {
6569 constructor() {
6570 this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
6571 }
6572 get token() {
6573 return this._source.token;
6574 }
6575 begin() {
6576 }
6577 report() {
6578 }
6579 done() {
6580 }
6581}
6582function attachWorkDone(connection, params) {
6583 if (params === undefined || params.workDoneToken === undefined) {
6584 return new NullProgress();
6585 }
6586 const token = params.workDoneToken;
6587 delete params.workDoneToken;
6588 return new WorkDoneProgressImpl(connection, token);
6589}
6590exports.attachWorkDone = attachWorkDone;
6591exports.ProgressFeature = (Base) => {
6592 return class extends Base {
6593 initialize(capabilities) {
6594 var _a;
6595 if (((_a = capabilities === null || capabilities === void 0 ? void 0 : capabilities.window) === null || _a === void 0 ? void 0 : _a.workDoneProgress) === true) {
6596 this._progressSupported = true;
6597 this.connection.onNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, (params) => {
6598 let progress = WorkDoneProgressImpl.Instances.get(params.token);
6599 if (progress !== undefined) {
6600 progress.cancel();
6601 }
6602 });
6603 }
6604 }
6605 attachWorkDoneProgress(token) {
6606 if (token === undefined) {
6607 return new NullProgress();
6608 }
6609 else {
6610 return new WorkDoneProgressImpl(this.connection, token);
6611 }
6612 }
6613 createWorkDoneProgress() {
6614 if (this._progressSupported) {
6615 const token = uuid_1.generateUuid();
6616 return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, { token }).then(() => {
6617 const result = new WorkDoneProgressImpl(this.connection, token);
6618 return result;
6619 });
6620 }
6621 else {
6622 return Promise.resolve(new NullProgress());
6623 }
6624 }
6625 };
6626};
6627var ResultProgress;
6628(function (ResultProgress) {
6629 ResultProgress.type = new vscode_languageserver_protocol_1.ProgressType();
6630})(ResultProgress || (ResultProgress = {}));
6631class ResultProgressImpl {
6632 constructor(_connection, _token) {
6633 this._connection = _connection;
6634 this._token = _token;
6635 }
6636 report(data) {
6637 this._connection.sendProgress(ResultProgress.type, this._token, data);
6638 }
6639}
6640function attachPartialResult(connection, params) {
6641 if (params === undefined || params.partialResultToken === undefined) {
6642 return undefined;
6643 }
6644 const token = params.partialResultToken;
6645 delete params.partialResultToken;
6646 return new ResultProgressImpl(connection, token);
6647}
6648exports.attachPartialResult = attachPartialResult;
6649//# sourceMappingURL=progress.js.map
6650
6651/***/ }),
6652/* 37 */
6653/***/ ((__unused_webpack_module, exports) => {
6654
6655"use strict";
6656/*---------------------------------------------------------------------------------------------
6657 * Copyright (c) Microsoft Corporation. All rights reserved.
6658 * Licensed under the MIT License. See License.txt in the project root for license information.
6659 *--------------------------------------------------------------------------------------------*/
6660
6661Object.defineProperty(exports, "__esModule", ({ value: true }));
6662class ValueUUID {
6663 constructor(_value) {
6664 this._value = _value;
6665 // empty
6666 }
6667 asHex() {
6668 return this._value;
6669 }
6670 equals(other) {
6671 return this.asHex() === other.asHex();
6672 }
6673}
6674class V4UUID extends ValueUUID {
6675 constructor() {
6676 super([
6677 V4UUID._randomHex(),
6678 V4UUID._randomHex(),
6679 V4UUID._randomHex(),
6680 V4UUID._randomHex(),
6681 V4UUID._randomHex(),
6682 V4UUID._randomHex(),
6683 V4UUID._randomHex(),
6684 V4UUID._randomHex(),
6685 '-',
6686 V4UUID._randomHex(),
6687 V4UUID._randomHex(),
6688 V4UUID._randomHex(),
6689 V4UUID._randomHex(),
6690 '-',
6691 '4',
6692 V4UUID._randomHex(),
6693 V4UUID._randomHex(),
6694 V4UUID._randomHex(),
6695 '-',
6696 V4UUID._oneOf(V4UUID._timeHighBits),
6697 V4UUID._randomHex(),
6698 V4UUID._randomHex(),
6699 V4UUID._randomHex(),
6700 '-',
6701 V4UUID._randomHex(),
6702 V4UUID._randomHex(),
6703 V4UUID._randomHex(),
6704 V4UUID._randomHex(),
6705 V4UUID._randomHex(),
6706 V4UUID._randomHex(),
6707 V4UUID._randomHex(),
6708 V4UUID._randomHex(),
6709 V4UUID._randomHex(),
6710 V4UUID._randomHex(),
6711 V4UUID._randomHex(),
6712 V4UUID._randomHex(),
6713 ].join(''));
6714 }
6715 static _oneOf(array) {
6716 return array[Math.floor(array.length * Math.random())];
6717 }
6718 static _randomHex() {
6719 return V4UUID._oneOf(V4UUID._chars);
6720 }
6721}
6722V4UUID._chars = ['0', '1', '2', '3', '4', '5', '6', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
6723V4UUID._timeHighBits = ['8', '9', 'a', 'b'];
6724/**
6725 * An empty UUID that contains only zeros.
6726 */
6727exports.empty = new ValueUUID('00000000-0000-0000-0000-000000000000');
6728function v4() {
6729 return new V4UUID();
6730}
6731exports.v4 = v4;
6732const _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
6733function isUUID(value) {
6734 return _UUIDPattern.test(value);
6735}
6736exports.isUUID = isUUID;
6737/**
6738 * Parses a UUID that is of the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
6739 * @param value A uuid string.
6740 */
6741function parse(value) {
6742 if (!isUUID(value)) {
6743 throw new Error('invalid uuid');
6744 }
6745 return new ValueUUID(value);
6746}
6747exports.parse = parse;
6748function generateUuid() {
6749 return v4().asHex();
6750}
6751exports.generateUuid = generateUuid;
6752//# sourceMappingURL=uuid.js.map
6753
6754/***/ }),
6755/* 38 */
6756/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6757
6758"use strict";
6759/* --------------------------------------------------------------------------------------------
6760 * Copyright (c) Microsoft Corporation. All rights reserved.
6761 * Licensed under the MIT License. See License.txt in the project root for license information.
6762 * ------------------------------------------------------------------------------------------ */
6763
6764Object.defineProperty(exports, "__esModule", ({ value: true }));
6765const url = __webpack_require__(39);
6766const path = __webpack_require__(13);
6767const fs = __webpack_require__(40);
6768const child_process_1 = __webpack_require__(41);
6769/**
6770 * @deprecated Use the `vscode-uri` npm module which provides a more
6771 * complete implementation of handling VS Code URIs.
6772 */
6773function uriToFilePath(uri) {
6774 let parsed = url.parse(uri);
6775 if (parsed.protocol !== 'file:' || !parsed.path) {
6776 return undefined;
6777 }
6778 let segments = parsed.path.split('/');
6779 for (var i = 0, len = segments.length; i < len; i++) {
6780 segments[i] = decodeURIComponent(segments[i]);
6781 }
6782 if (process.platform === 'win32' && segments.length > 1) {
6783 let first = segments[0];
6784 let second = segments[1];
6785 // Do we have a drive letter and we started with a / which is the
6786 // case if the first segement is empty (see split above)
6787 if (first.length === 0 && second.length > 1 && second[1] === ':') {
6788 // Remove first slash
6789 segments.shift();
6790 }
6791 }
6792 return path.normalize(segments.join('/'));
6793}
6794exports.uriToFilePath = uriToFilePath;
6795function isWindows() {
6796 return process.platform === 'win32';
6797}
6798function resolve(moduleName, nodePath, cwd, tracer) {
6799 const nodePathKey = 'NODE_PATH';
6800 const app = [
6801 'var p = process;',
6802 'p.on(\'message\',function(m){',
6803 'if(m.c===\'e\'){',
6804 'p.exit(0);',
6805 '}',
6806 'else if(m.c===\'rs\'){',
6807 'try{',
6808 'var r=require.resolve(m.a);',
6809 'p.send({c:\'r\',s:true,r:r});',
6810 '}',
6811 'catch(err){',
6812 'p.send({c:\'r\',s:false});',
6813 '}',
6814 '}',
6815 '});'
6816 ].join('');
6817 return new Promise((resolve, reject) => {
6818 let env = process.env;
6819 let newEnv = Object.create(null);
6820 Object.keys(env).forEach(key => newEnv[key] = env[key]);
6821 if (nodePath && fs.existsSync(nodePath) /* see issue 545 */) {
6822 if (newEnv[nodePathKey]) {
6823 newEnv[nodePathKey] = nodePath + path.delimiter + newEnv[nodePathKey];
6824 }
6825 else {
6826 newEnv[nodePathKey] = nodePath;
6827 }
6828 if (tracer) {
6829 tracer(`NODE_PATH value is: ${newEnv[nodePathKey]}`);
6830 }
6831 }
6832 newEnv['ELECTRON_RUN_AS_NODE'] = '1';
6833 try {
6834 let cp = child_process_1.fork('', [], {
6835 cwd: cwd,
6836 env: newEnv,
6837 execArgv: ['-e', app]
6838 });
6839 if (cp.pid === void 0) {
6840 reject(new Error(`Starting process to resolve node module ${moduleName} failed`));
6841 return;
6842 }
6843 cp.on('error', (error) => {
6844 reject(error);
6845 });
6846 cp.on('message', (message) => {
6847 if (message.c === 'r') {
6848 cp.send({ c: 'e' });
6849 if (message.s) {
6850 resolve(message.r);
6851 }
6852 else {
6853 reject(new Error(`Failed to resolve module: ${moduleName}`));
6854 }
6855 }
6856 });
6857 let message = {
6858 c: 'rs',
6859 a: moduleName
6860 };
6861 cp.send(message);
6862 }
6863 catch (error) {
6864 reject(error);
6865 }
6866 });
6867}
6868exports.resolve = resolve;
6869/**
6870 * Resolve the global npm package path.
6871 * @deprecated Since this depends on the used package manager and their version the best is that servers
6872 * implement this themselves since they know best what kind of package managers to support.
6873 * @param tracer the tracer to use
6874 */
6875function resolveGlobalNodePath(tracer) {
6876 let npmCommand = 'npm';
6877 const env = Object.create(null);
6878 Object.keys(process.env).forEach(key => env[key] = process.env[key]);
6879 env['NO_UPDATE_NOTIFIER'] = 'true';
6880 const options = {
6881 encoding: 'utf8',
6882 env
6883 };
6884 if (isWindows()) {
6885 npmCommand = 'npm.cmd';
6886 options.shell = true;
6887 }
6888 let handler = () => { };
6889 try {
6890 process.on('SIGPIPE', handler);
6891 let stdout = child_process_1.spawnSync(npmCommand, ['config', 'get', 'prefix'], options).stdout;
6892 if (!stdout) {
6893 if (tracer) {
6894 tracer(`'npm config get prefix' didn't return a value.`);
6895 }
6896 return undefined;
6897 }
6898 let prefix = stdout.trim();
6899 if (tracer) {
6900 tracer(`'npm config get prefix' value is: ${prefix}`);
6901 }
6902 if (prefix.length > 0) {
6903 if (isWindows()) {
6904 return path.join(prefix, 'node_modules');
6905 }
6906 else {
6907 return path.join(prefix, 'lib', 'node_modules');
6908 }
6909 }
6910 return undefined;
6911 }
6912 catch (err) {
6913 return undefined;
6914 }
6915 finally {
6916 process.removeListener('SIGPIPE', handler);
6917 }
6918}
6919exports.resolveGlobalNodePath = resolveGlobalNodePath;
6920/*
6921 * Resolve the global yarn pakage path.
6922 * @deprecated Since this depends on the used package manager and their version the best is that servers
6923 * implement this themselves since they know best what kind of package managers to support.
6924 * @param tracer the tracer to use
6925 */
6926function resolveGlobalYarnPath(tracer) {
6927 let yarnCommand = 'yarn';
6928 let options = {
6929 encoding: 'utf8'
6930 };
6931 if (isWindows()) {
6932 yarnCommand = 'yarn.cmd';
6933 options.shell = true;
6934 }
6935 let handler = () => { };
6936 try {
6937 process.on('SIGPIPE', handler);
6938 let results = child_process_1.spawnSync(yarnCommand, ['global', 'dir', '--json'], options);
6939 let stdout = results.stdout;
6940 if (!stdout) {
6941 if (tracer) {
6942 tracer(`'yarn global dir' didn't return a value.`);
6943 if (results.stderr) {
6944 tracer(results.stderr);
6945 }
6946 }
6947 return undefined;
6948 }
6949 let lines = stdout.trim().split(/\r?\n/);
6950 for (let line of lines) {
6951 try {
6952 let yarn = JSON.parse(line);
6953 if (yarn.type === 'log') {
6954 return path.join(yarn.data, 'node_modules');
6955 }
6956 }
6957 catch (e) {
6958 // Do nothing. Ignore the line
6959 }
6960 }
6961 return undefined;
6962 }
6963 catch (err) {
6964 return undefined;
6965 }
6966 finally {
6967 process.removeListener('SIGPIPE', handler);
6968 }
6969}
6970exports.resolveGlobalYarnPath = resolveGlobalYarnPath;
6971var FileSystem;
6972(function (FileSystem) {
6973 let _isCaseSensitive = undefined;
6974 function isCaseSensitive() {
6975 if (_isCaseSensitive !== void 0) {
6976 return _isCaseSensitive;
6977 }
6978 if (process.platform === 'win32') {
6979 _isCaseSensitive = false;
6980 }
6981 else {
6982 // convert current file name to upper case / lower case and check if file exists
6983 // (guards against cases when name is already all uppercase or lowercase)
6984 _isCaseSensitive = !fs.existsSync(__filename.toUpperCase()) || !fs.existsSync(__filename.toLowerCase());
6985 }
6986 return _isCaseSensitive;
6987 }
6988 FileSystem.isCaseSensitive = isCaseSensitive;
6989 function isParent(parent, child) {
6990 if (isCaseSensitive()) {
6991 return path.normalize(child).indexOf(path.normalize(parent)) === 0;
6992 }
6993 else {
6994 return path.normalize(child).toLowerCase().indexOf(path.normalize(parent).toLowerCase()) === 0;
6995 }
6996 }
6997 FileSystem.isParent = isParent;
6998})(FileSystem = exports.FileSystem || (exports.FileSystem = {}));
6999function resolveModulePath(workspaceRoot, moduleName, nodePath, tracer) {
7000 if (nodePath) {
7001 if (!path.isAbsolute(nodePath)) {
7002 nodePath = path.join(workspaceRoot, nodePath);
7003 }
7004 return resolve(moduleName, nodePath, nodePath, tracer).then((value) => {
7005 if (FileSystem.isParent(nodePath, value)) {
7006 return value;
7007 }
7008 else {
7009 return Promise.reject(new Error(`Failed to load ${moduleName} from node path location.`));
7010 }
7011 }).then(undefined, (_error) => {
7012 return resolve(moduleName, resolveGlobalNodePath(tracer), workspaceRoot, tracer);
7013 });
7014 }
7015 else {
7016 return resolve(moduleName, resolveGlobalNodePath(tracer), workspaceRoot, tracer);
7017 }
7018}
7019exports.resolveModulePath = resolveModulePath;
7020//# sourceMappingURL=files.js.map
7021
7022/***/ }),
7023/* 39 */
7024/***/ ((module) => {
7025
7026"use strict";
7027module.exports = require("url");;
7028
7029/***/ }),
7030/* 40 */
7031/***/ ((module) => {
7032
7033"use strict";
7034module.exports = require("fs");;
7035
7036/***/ }),
7037/* 41 */
7038/***/ ((module) => {
7039
7040"use strict";
7041module.exports = require("child_process");;
7042
7043/***/ }),
7044/* 42 */
7045/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7046
7047"use strict";
7048/* --------------------------------------------------------------------------------------------
7049 * Copyright (c) Microsoft Corporation. All rights reserved.
7050 * Licensed under the MIT License. See License.txt in the project root for license information.
7051 * ------------------------------------------------------------------------------------------ */
7052
7053Object.defineProperty(exports, "__esModule", ({ value: true }));
7054const vscode_languageserver_protocol_1 = __webpack_require__(3);
7055exports.CallHierarchyFeature = (Base) => {
7056 return class extends Base {
7057 get callHierarchy() {
7058 return {
7059 onPrepare: (handler) => {
7060 this.connection.onRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type, (params, cancel) => {
7061 return handler(params, cancel, this.attachWorkDoneProgress(params), undefined);
7062 });
7063 },
7064 onIncomingCalls: (handler) => {
7065 const type = vscode_languageserver_protocol_1.Proposed.CallHierarchyIncomingCallsRequest.type;
7066 this.connection.onRequest(type, (params, cancel) => {
7067 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7068 });
7069 },
7070 onOutgoingCalls: (handler) => {
7071 const type = vscode_languageserver_protocol_1.Proposed.CallHierarchyOutgoingCallsRequest.type;
7072 this.connection.onRequest(type, (params, cancel) => {
7073 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7074 });
7075 }
7076 };
7077 }
7078 };
7079};
7080//# sourceMappingURL=callHierarchy.proposed.js.map
7081
7082/***/ }),
7083/* 43 */
7084/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7085
7086"use strict";
7087/* --------------------------------------------------------------------------------------------
7088 * Copyright (c) Microsoft Corporation. All rights reserved.
7089 * Licensed under the MIT License. See License.txt in the project root for license information.
7090 * ------------------------------------------------------------------------------------------ */
7091
7092Object.defineProperty(exports, "__esModule", ({ value: true }));
7093const vscode_languageserver_protocol_1 = __webpack_require__(3);
7094exports.SemanticTokensFeature = (Base) => {
7095 return class extends Base {
7096 get semanticTokens() {
7097 return {
7098 on: (handler) => {
7099 const type = vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type;
7100 this.connection.onRequest(type, (params, cancel) => {
7101 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7102 });
7103 },
7104 onEdits: (handler) => {
7105 const type = vscode_languageserver_protocol_1.Proposed.SemanticTokensEditsRequest.type;
7106 this.connection.onRequest(type, (params, cancel) => {
7107 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7108 });
7109 },
7110 onRange: (handler) => {
7111 const type = vscode_languageserver_protocol_1.Proposed.SemanticTokensRangeRequest.type;
7112 this.connection.onRequest(type, (params, cancel) => {
7113 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7114 });
7115 }
7116 };
7117 }
7118 };
7119};
7120class SemanticTokensBuilder {
7121 constructor() {
7122 this._prevData = undefined;
7123 this.initialize();
7124 }
7125 initialize() {
7126 this._id = Date.now();
7127 this._prevLine = 0;
7128 this._prevChar = 0;
7129 this._data = [];
7130 this._dataLen = 0;
7131 }
7132 push(line, char, length, tokenType, tokenModifiers) {
7133 let pushLine = line;
7134 let pushChar = char;
7135 if (this._dataLen > 0) {
7136 pushLine -= this._prevLine;
7137 if (pushLine === 0) {
7138 pushChar -= this._prevChar;
7139 }
7140 }
7141 this._data[this._dataLen++] = pushLine;
7142 this._data[this._dataLen++] = pushChar;
7143 this._data[this._dataLen++] = length;
7144 this._data[this._dataLen++] = tokenType;
7145 this._data[this._dataLen++] = tokenModifiers;
7146 this._prevLine = line;
7147 this._prevChar = char;
7148 }
7149 get id() {
7150 return this._id.toString();
7151 }
7152 previousResult(id) {
7153 if (this.id === id) {
7154 this._prevData = this._data;
7155 }
7156 this.initialize();
7157 }
7158 build() {
7159 this._prevData = undefined;
7160 return {
7161 resultId: this.id,
7162 data: this._data
7163 };
7164 }
7165 canBuildEdits() {
7166 return this._prevData !== undefined;
7167 }
7168 buildEdits() {
7169 if (this._prevData !== undefined) {
7170 const prevDataLength = this._prevData.length;
7171 const dataLength = this._data.length;
7172 let startIndex = 0;
7173 while (startIndex < dataLength && startIndex < prevDataLength && this._prevData[startIndex] === this._data[startIndex]) {
7174 startIndex++;
7175 }
7176 if (startIndex < dataLength && startIndex < prevDataLength) {
7177 // Find end index
7178 let endIndex = 0;
7179 while (endIndex < dataLength && endIndex < prevDataLength && this._prevData[prevDataLength - 1 - endIndex] === this._data[dataLength - 1 - endIndex]) {
7180 endIndex++;
7181 }
7182 const newData = this._data.slice(startIndex, dataLength - endIndex);
7183 const result = {
7184 resultId: this.id,
7185 edits: [
7186 { start: startIndex, deleteCount: prevDataLength - endIndex - startIndex, data: newData }
7187 ]
7188 };
7189 return result;
7190 }
7191 else if (startIndex < dataLength) {
7192 return { resultId: this.id, edits: [
7193 { start: startIndex, deleteCount: 0, data: this._data.slice(startIndex) }
7194 ] };
7195 }
7196 else if (startIndex < prevDataLength) {
7197 return { resultId: this.id, edits: [
7198 { start: startIndex, deleteCount: prevDataLength - startIndex }
7199 ] };
7200 }
7201 else {
7202 return { resultId: this.id, edits: [] };
7203 }
7204 }
7205 else {
7206 return this.build();
7207 }
7208 }
7209}
7210exports.SemanticTokensBuilder = SemanticTokensBuilder;
7211//# sourceMappingURL=sematicTokens.proposed.js.map
7212
7213/***/ }),
7214/* 44 */
7215/***/ ((__unused_webpack_module, exports) => {
7216
7217"use strict";
7218
7219Object.defineProperty(exports, "__esModule", ({ value: true }));
7220exports.projectRootPatterns = exports.sortTexts = void 0;
7221exports.sortTexts = {
7222 one: "00001",
7223 two: "00002",
7224 three: "00003",
7225 four: "00004",
7226};
7227exports.projectRootPatterns = [".git", "autoload", "plugin"];
7228
7229
7230/***/ }),
7231/* 45 */
7232/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
7233
7234"use strict";
7235
7236var __importDefault = (this && this.__importDefault) || function (mod) {
7237 return (mod && mod.__esModule) ? mod : { "default": mod };
7238};
7239Object.defineProperty(exports, "__esModule", ({ value: true }));
7240exports.completionProvider = void 0;
7241var vscode_languageserver_1 = __webpack_require__(2);
7242var util_1 = __webpack_require__(46);
7243var config_1 = __importDefault(__webpack_require__(54));
7244var documents_1 = __webpack_require__(55);
7245__webpack_require__(57);
7246__webpack_require__(141);
7247__webpack_require__(142);
7248__webpack_require__(143);
7249__webpack_require__(145);
7250__webpack_require__(146);
7251__webpack_require__(150);
7252__webpack_require__(151);
7253__webpack_require__(152);
7254__webpack_require__(153);
7255__webpack_require__(154);
7256__webpack_require__(155);
7257var provider_1 = __webpack_require__(139);
7258var provider = provider_1.getProvider();
7259var completionProvider = function (params) {
7260 var textDocument = params.textDocument, position = params.position;
7261 var textDoc = documents_1.documents.get(textDocument.uri);
7262 if (textDoc) {
7263 var line = textDoc.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(position.line, 0), position));
7264 var words = util_1.getWordFromPosition(textDoc, { line: position.line, character: position.character - 1 });
7265 var word = words && words.word || "";
7266 if (word === "" && words && words.wordRight.trim() === ":") {
7267 word = ":";
7268 }
7269 // options items start with &
7270 var invalidLength = word.replace(/^&/, "").length;
7271 var completionItems = provider(line, textDoc.uri, position, word, invalidLength, []);
7272 if (!config_1.default.snippetSupport) {
7273 return {
7274 isIncomplete: true,
7275 items: util_1.removeSnippets(completionItems)
7276 };
7277 }
7278 return {
7279 isIncomplete: true,
7280 items: completionItems
7281 };
7282 }
7283 return [];
7284};
7285exports.completionProvider = completionProvider;
7286
7287
7288/***/ }),
7289/* 46 */
7290/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
7291
7292"use strict";
7293
7294var __assign = (this && this.__assign) || function () {
7295 __assign = Object.assign || function(t) {
7296 for (var s, i = 1, n = arguments.length; i < n; i++) {
7297 s = arguments[i];
7298 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7299 t[p] = s[p];
7300 }
7301 return t;
7302 };
7303 return __assign.apply(this, arguments);
7304};
7305var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7306 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7307 return new (P || (P = Promise))(function (resolve, reject) {
7308 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7309 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7310 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7311 step((generator = generator.apply(thisArg, _arguments || [])).next());
7312 });
7313};
7314var __generator = (this && this.__generator) || function (thisArg, body) {
7315 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
7316 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
7317 function verb(n) { return function (v) { return step([n, v]); }; }
7318 function step(op) {
7319 if (f) throw new TypeError("Generator is already executing.");
7320 while (_) try {
7321 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;
7322 if (y = 0, t) op = [op[0] & 2, t.value];
7323 switch (op[0]) {
7324 case 0: case 1: t = op; break;
7325 case 4: _.label++; return { value: op[1], done: false };
7326 case 5: _.label++; y = op[1]; op = [0]; continue;
7327 case 7: op = _.ops.pop(); _.trys.pop(); continue;
7328 default:
7329 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
7330 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
7331 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
7332 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
7333 if (t[2]) _.ops.pop();
7334 _.trys.pop(); continue;
7335 }
7336 op = body.call(thisArg, _);
7337 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
7338 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
7339 }
7340};
7341var __spreadArrays = (this && this.__spreadArrays) || function () {
7342 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
7343 for (var r = Array(s), k = 0, i = 0; i < il; i++)
7344 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
7345 r[k] = a[j];
7346 return r;
7347};
7348var __importDefault = (this && this.__importDefault) || function (mod) {
7349 return (mod && mod.__esModule) ? mod : { "default": mod };
7350};
7351Object.defineProperty(exports, "__esModule", ({ value: true }));
7352exports.getRealPath = exports.isSymbolLink = exports.removeSnippets = exports.handleParse = exports.getWordFromPosition = exports.markupSnippets = exports.findProjectRoot = exports.pcb = exports.executeFile = exports.isSomeMatchPattern = void 0;
7353var child_process_1 = __webpack_require__(41);
7354var findup_1 = __importDefault(__webpack_require__(47));
7355var fs_1 = __importDefault(__webpack_require__(40));
7356var path_1 = __importDefault(__webpack_require__(13));
7357var vscode_languageserver_1 = __webpack_require__(2);
7358var vimparser_1 = __webpack_require__(52);
7359var patterns_1 = __webpack_require__(53);
7360function isSomeMatchPattern(patterns, line) {
7361 return patterns.some(function (p) { return p.test(line); });
7362}
7363exports.isSomeMatchPattern = isSomeMatchPattern;
7364function executeFile(input, command, args, option) {
7365 return new Promise(function (resolve, reject) {
7366 var stdout = "";
7367 var stderr = "";
7368 var error;
7369 var isPassAsText = false;
7370 args = (args || []).map(function (arg) {
7371 if (/%text/.test(arg)) {
7372 isPassAsText = true;
7373 return arg.replace(/%text/g, input.toString());
7374 }
7375 return arg;
7376 });
7377 var cp = child_process_1.spawn(command, args, option);
7378 cp.stdout.on("data", function (data) {
7379 stdout += data;
7380 });
7381 cp.stderr.on("data", function (data) {
7382 stderr += data;
7383 });
7384 cp.on("error", function (err) {
7385 error = err;
7386 reject(error);
7387 });
7388 cp.on("close", function (code) {
7389 if (!error) {
7390 resolve({ code: code, stdout: stdout, stderr: stderr });
7391 }
7392 });
7393 // error will occur when cp get error
7394 if (!isPassAsText) {
7395 input.pipe(cp.stdin).on("error", function () { return; });
7396 }
7397 });
7398}
7399exports.executeFile = executeFile;
7400// cover cb type async function to promise
7401function pcb(cb) {
7402 return function () {
7403 var args = [];
7404 for (var _i = 0; _i < arguments.length; _i++) {
7405 args[_i] = arguments[_i];
7406 }
7407 return new Promise(function (resolve) {
7408 cb.apply(void 0, __spreadArrays(args, [function () {
7409 var params = [];
7410 for (var _i = 0; _i < arguments.length; _i++) {
7411 params[_i] = arguments[_i];
7412 }
7413 resolve(params);
7414 }]));
7415 });
7416 };
7417}
7418exports.pcb = pcb;
7419// find work dirname by root patterns
7420function findProjectRoot(filePath, rootPatterns) {
7421 return __awaiter(this, void 0, void 0, function () {
7422 var dirname, patterns, dirCandidate, _i, patterns_2, pattern, _a, err, dir;
7423 return __generator(this, function (_b) {
7424 switch (_b.label) {
7425 case 0:
7426 dirname = path_1.default.dirname(filePath);
7427 patterns = [].concat(rootPatterns);
7428 dirCandidate = "";
7429 _i = 0, patterns_2 = patterns;
7430 _b.label = 1;
7431 case 1:
7432 if (!(_i < patterns_2.length)) return [3 /*break*/, 4];
7433 pattern = patterns_2[_i];
7434 return [4 /*yield*/, pcb(findup_1.default)(dirname, pattern)];
7435 case 2:
7436 _a = _b.sent(), err = _a[0], dir = _a[1];
7437 if (!err && dir && dir !== "/" && dir.length > dirCandidate.length) {
7438 dirCandidate = dir;
7439 }
7440 _b.label = 3;
7441 case 3:
7442 _i++;
7443 return [3 /*break*/, 1];
7444 case 4:
7445 if (dirCandidate.length) {
7446 return [2 /*return*/, dirCandidate];
7447 }
7448 return [2 /*return*/, dirname];
7449 }
7450 });
7451 });
7452}
7453exports.findProjectRoot = findProjectRoot;
7454function markupSnippets(snippets) {
7455 return [
7456 "```vim",
7457 snippets.replace(/\$\{[0-9]+(:([^}]+))?\}/g, "$2"),
7458 "```",
7459 ].join("\n");
7460}
7461exports.markupSnippets = markupSnippets;
7462function getWordFromPosition(doc, position) {
7463 if (!doc) {
7464 return;
7465 }
7466 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)));
7467 // not keyword position
7468 if (!character || !patterns_1.keywordPattern.test(character)) {
7469 return;
7470 }
7471 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)));
7472 // comment line
7473 if (patterns_1.commentPattern.test(currentLine)) {
7474 return;
7475 }
7476 var preSegment = currentLine.slice(0, position.character);
7477 var nextSegment = currentLine.slice(position.character);
7478 var wordLeft = preSegment.match(patterns_1.wordPrePattern);
7479 var wordRight = nextSegment.match(patterns_1.wordNextPattern);
7480 var word = "" + (wordLeft && wordLeft[1] || "") + (wordRight && wordRight[1] || "");
7481 return {
7482 word: word,
7483 left: wordLeft && wordLeft[1] || "",
7484 right: wordRight && wordRight[1] || "",
7485 wordLeft: wordLeft && wordLeft[1]
7486 ? preSegment.replace(new RegExp(wordLeft[1] + "$"), word)
7487 : "" + preSegment + word,
7488 wordRight: wordRight && wordRight[1]
7489 ? nextSegment.replace(new RegExp("^" + wordRight[1]), word)
7490 : "" + word + nextSegment,
7491 };
7492}
7493exports.getWordFromPosition = getWordFromPosition;
7494// parse vim buffer
7495function handleParse(textDoc) {
7496 return __awaiter(this, void 0, void 0, function () {
7497 var text, tokens, node;
7498 return __generator(this, function (_a) {
7499 text = textDoc instanceof Object ? textDoc.getText() : textDoc;
7500 tokens = new vimparser_1.StringReader(text.split(/\r\n|\r|\n/));
7501 try {
7502 node = new vimparser_1.VimLParser(true).parse(tokens);
7503 return [2 /*return*/, [node, ""]];
7504 }
7505 catch (error) {
7506 return [2 /*return*/, [null, error]];
7507 }
7508 return [2 /*return*/];
7509 });
7510 });
7511}
7512exports.handleParse = handleParse;
7513// remove snippets of completionItem
7514function removeSnippets(completionItems) {
7515 if (completionItems === void 0) { completionItems = []; }
7516 return completionItems.map(function (item) {
7517 if (item.insertTextFormat === vscode_languageserver_1.InsertTextFormat.Snippet) {
7518 return __assign(__assign({}, item), { insertText: item.label, insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText });
7519 }
7520 return item;
7521 });
7522}
7523exports.removeSnippets = removeSnippets;
7524var isSymbolLink = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
7525 return __generator(this, function (_a) {
7526 return [2 /*return*/, new Promise(function (resolve) {
7527 fs_1.default.lstat(filePath, function (err, stats) {
7528 resolve({
7529 err: err,
7530 stats: stats && stats.isSymbolicLink(),
7531 });
7532 });
7533 })];
7534 });
7535}); };
7536exports.isSymbolLink = isSymbolLink;
7537var getRealPath = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
7538 var _a, err, stats;
7539 return __generator(this, function (_b) {
7540 switch (_b.label) {
7541 case 0: return [4 /*yield*/, exports.isSymbolLink(filePath)];
7542 case 1:
7543 _a = _b.sent(), err = _a.err, stats = _a.stats;
7544 if (!err && stats) {
7545 return [2 /*return*/, new Promise(function (resolve) {
7546 fs_1.default.realpath(filePath, function (error, realPath) {
7547 if (error) {
7548 return resolve(filePath);
7549 }
7550 resolve(realPath);
7551 });
7552 })];
7553 }
7554 return [2 /*return*/, filePath];
7555 }
7556 });
7557}); };
7558exports.getRealPath = getRealPath;
7559
7560
7561/***/ }),
7562/* 47 */
7563/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7564
7565var fs = __webpack_require__(40),
7566 Path = __webpack_require__(13),
7567 util = __webpack_require__(48),
7568 colors = __webpack_require__(49),
7569 EE = __webpack_require__(51).EventEmitter,
7570 fsExists = fs.exists ? fs.exists : Path.exists,
7571 fsExistsSync = fs.existsSync ? fs.existsSync : Path.existsSync;
7572
7573module.exports = function(dir, iterator, options, callback){
7574 return FindUp(dir, iterator, options, callback);
7575};
7576
7577function FindUp(dir, iterator, options, callback){
7578 if (!(this instanceof FindUp)) {
7579 return new FindUp(dir, iterator, options, callback);
7580 }
7581 if(typeof options === 'function'){
7582 callback = options;
7583 options = {};
7584 }
7585 options = options || {};
7586
7587 EE.call(this);
7588 this.found = false;
7589 this.stopPlease = false;
7590 var self = this;
7591
7592 if(typeof iterator === 'string'){
7593 var file = iterator;
7594 iterator = function(dir, cb){
7595 return fsExists(Path.join(dir, file), cb);
7596 };
7597 }
7598
7599 if(callback) {
7600 this.on('found', function(dir){
7601 if(options.verbose) console.log(('found '+ dir ).green);
7602 callback(null, dir);
7603 self.stop();
7604 });
7605
7606 this.on('end', function(){
7607 if(options.verbose) console.log('end'.grey);
7608 if(!self.found) callback(new Error('not found'));
7609 });
7610
7611 this.on('error', function(err){
7612 if(options.verbose) console.log('error'.red, err);
7613 callback(err);
7614 });
7615 }
7616
7617 this._find(dir, iterator, options, callback);
7618}
7619util.inherits(FindUp, EE);
7620
7621FindUp.prototype._find = function(dir, iterator, options, callback){
7622 var self = this;
7623
7624 iterator(dir, function(exists){
7625 if(options.verbose) console.log(('traverse '+ dir).grey);
7626 if(exists) {
7627 self.found = true;
7628 self.emit('found', dir);
7629 }
7630
7631 var parentDir = Path.join(dir, '..');
7632 if (self.stopPlease) return self.emit('end');
7633 if (dir === parentDir) return self.emit('end');
7634 if(dir.indexOf('../../') !== -1 ) return self.emit('error', new Error(dir + ' is not correct.'));
7635 self._find(parentDir, iterator, options, callback);
7636 });
7637};
7638
7639FindUp.prototype.stop = function(){
7640 this.stopPlease = true;
7641};
7642
7643module.exports.FindUp = FindUp;
7644
7645module.exports.sync = function(dir, iteratorSync){
7646 if(typeof iteratorSync === 'string'){
7647 var file = iteratorSync;
7648 iteratorSync = function(dir){
7649 return fsExistsSync(Path.join(dir, file));
7650 };
7651 }
7652 var initialDir = dir;
7653 while(dir !== Path.join(dir, '..')){
7654 if(dir.indexOf('../../') !== -1 ) throw new Error(initialDir + ' is not correct.');
7655 if(iteratorSync(dir)) return dir;
7656 dir = Path.join(dir, '..');
7657 }
7658 throw new Error('not found');
7659};
7660
7661
7662/***/ }),
7663/* 48 */
7664/***/ ((module) => {
7665
7666"use strict";
7667module.exports = require("util");;
7668
7669/***/ }),
7670/* 49 */
7671/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
7672
7673/*
7674colors.js
7675
7676Copyright (c) 2010
7677
7678Marak Squires
7679Alexis Sellier (cloudhead)
7680
7681Permission is hereby granted, free of charge, to any person obtaining a copy
7682of this software and associated documentation files (the "Software"), to deal
7683in the Software without restriction, including without limitation the rights
7684to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7685copies of the Software, and to permit persons to whom the Software is
7686furnished to do so, subject to the following conditions:
7687
7688The above copyright notice and this permission notice shall be included in
7689all copies or substantial portions of the Software.
7690
7691THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7692IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7693FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7694AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
7695LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
7696OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
7697THE SOFTWARE.
7698
7699*/
7700
7701var isHeadless = false;
7702
7703if (typeof module !== 'undefined') {
7704 isHeadless = true;
7705}
7706
7707if (!isHeadless) {
7708 var exports = {};
7709 var module = {};
7710 var colors = exports;
7711 exports.mode = "browser";
7712} else {
7713 exports.mode = "console";
7714}
7715
7716//
7717// Prototypes the string object to have additional method calls that add terminal colors
7718//
7719var addProperty = function (color, func) {
7720 exports[color] = function (str) {
7721 return func.apply(str);
7722 };
7723 String.prototype.__defineGetter__(color, func);
7724};
7725
7726function stylize(str, style) {
7727
7728 var styles;
7729
7730 if (exports.mode === 'console') {
7731 styles = {
7732 //styles
7733 'bold' : ['\x1B[1m', '\x1B[22m'],
7734 'italic' : ['\x1B[3m', '\x1B[23m'],
7735 'underline' : ['\x1B[4m', '\x1B[24m'],
7736 'inverse' : ['\x1B[7m', '\x1B[27m'],
7737 'strikethrough' : ['\x1B[9m', '\x1B[29m'],
7738 //text colors
7739 //grayscale
7740 'white' : ['\x1B[37m', '\x1B[39m'],
7741 'grey' : ['\x1B[90m', '\x1B[39m'],
7742 'black' : ['\x1B[30m', '\x1B[39m'],
7743 //colors
7744 'blue' : ['\x1B[34m', '\x1B[39m'],
7745 'cyan' : ['\x1B[36m', '\x1B[39m'],
7746 'green' : ['\x1B[32m', '\x1B[39m'],
7747 'magenta' : ['\x1B[35m', '\x1B[39m'],
7748 'red' : ['\x1B[31m', '\x1B[39m'],
7749 'yellow' : ['\x1B[33m', '\x1B[39m'],
7750 //background colors
7751 //grayscale
7752 'whiteBG' : ['\x1B[47m', '\x1B[49m'],
7753 'greyBG' : ['\x1B[49;5;8m', '\x1B[49m'],
7754 'blackBG' : ['\x1B[40m', '\x1B[49m'],
7755 //colors
7756 'blueBG' : ['\x1B[44m', '\x1B[49m'],
7757 'cyanBG' : ['\x1B[46m', '\x1B[49m'],
7758 'greenBG' : ['\x1B[42m', '\x1B[49m'],
7759 'magentaBG' : ['\x1B[45m', '\x1B[49m'],
7760 'redBG' : ['\x1B[41m', '\x1B[49m'],
7761 'yellowBG' : ['\x1B[43m', '\x1B[49m']
7762 };
7763 } else if (exports.mode === 'browser') {
7764 styles = {
7765 //styles
7766 'bold' : ['<b>', '</b>'],
7767 'italic' : ['<i>', '</i>'],
7768 'underline' : ['<u>', '</u>'],
7769 'inverse' : ['<span style="background-color:black;color:white;">', '</span>'],
7770 'strikethrough' : ['<del>', '</del>'],
7771 //text colors
7772 //grayscale
7773 'white' : ['<span style="color:white;">', '</span>'],
7774 'grey' : ['<span style="color:gray;">', '</span>'],
7775 'black' : ['<span style="color:black;">', '</span>'],
7776 //colors
7777 'blue' : ['<span style="color:blue;">', '</span>'],
7778 'cyan' : ['<span style="color:cyan;">', '</span>'],
7779 'green' : ['<span style="color:green;">', '</span>'],
7780 'magenta' : ['<span style="color:magenta;">', '</span>'],
7781 'red' : ['<span style="color:red;">', '</span>'],
7782 'yellow' : ['<span style="color:yellow;">', '</span>'],
7783 //background colors
7784 //grayscale
7785 'whiteBG' : ['<span style="background-color:white;">', '</span>'],
7786 'greyBG' : ['<span style="background-color:gray;">', '</span>'],
7787 'blackBG' : ['<span style="background-color:black;">', '</span>'],
7788 //colors
7789 'blueBG' : ['<span style="background-color:blue;">', '</span>'],
7790 'cyanBG' : ['<span style="background-color:cyan;">', '</span>'],
7791 'greenBG' : ['<span style="background-color:green;">', '</span>'],
7792 'magentaBG' : ['<span style="background-color:magenta;">', '</span>'],
7793 'redBG' : ['<span style="background-color:red;">', '</span>'],
7794 'yellowBG' : ['<span style="background-color:yellow;">', '</span>']
7795 };
7796 } else if (exports.mode === 'none') {
7797 return str + '';
7798 } else {
7799 console.log('unsupported mode, try "browser", "console" or "none"');
7800 }
7801 return styles[style][0] + str + styles[style][1];
7802}
7803
7804function applyTheme(theme) {
7805
7806 //
7807 // Remark: This is a list of methods that exist
7808 // on String that you should not overwrite.
7809 //
7810 var stringPrototypeBlacklist = [
7811 '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'charAt', 'constructor',
7812 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf', 'charCodeAt',
7813 'indexOf', 'lastIndexof', 'length', 'localeCompare', 'match', 'replace', 'search', 'slice', 'split', 'substring',
7814 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight'
7815 ];
7816
7817 Object.keys(theme).forEach(function (prop) {
7818 if (stringPrototypeBlacklist.indexOf(prop) !== -1) {
7819 console.log('warn: '.red + ('String.prototype' + prop).magenta + ' is probably something you don\'t want to override. Ignoring style name');
7820 }
7821 else {
7822 if (typeof(theme[prop]) === 'string') {
7823 addProperty(prop, function () {
7824 return exports[theme[prop]](this);
7825 });
7826 }
7827 else {
7828 addProperty(prop, function () {
7829 var ret = this;
7830 for (var t = 0; t < theme[prop].length; t++) {
7831 ret = exports[theme[prop][t]](ret);
7832 }
7833 return ret;
7834 });
7835 }
7836 }
7837 });
7838}
7839
7840
7841//
7842// Iterate through all default styles and colors
7843//
7844var x = ['bold', 'underline', 'strikethrough', 'italic', 'inverse', 'grey', 'black', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta', 'greyBG', 'blackBG', 'yellowBG', 'redBG', 'greenBG', 'blueBG', 'whiteBG', 'cyanBG', 'magentaBG'];
7845x.forEach(function (style) {
7846
7847 // __defineGetter__ at the least works in more browsers
7848 // http://robertnyman.com/javascript/javascript-getters-setters.html
7849 // Object.defineProperty only works in Chrome
7850 addProperty(style, function () {
7851 return stylize(this, style);
7852 });
7853});
7854
7855function sequencer(map) {
7856 return function () {
7857 if (!isHeadless) {
7858 return this.replace(/( )/, '$1');
7859 }
7860 var exploded = this.split(""), i = 0;
7861 exploded = exploded.map(map);
7862 return exploded.join("");
7863 };
7864}
7865
7866var rainbowMap = (function () {
7867 var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; //RoY G BiV
7868 return function (letter, i, exploded) {
7869 if (letter === " ") {
7870 return letter;
7871 } else {
7872 return stylize(letter, rainbowColors[i++ % rainbowColors.length]);
7873 }
7874 };
7875})();
7876
7877exports.themes = {};
7878
7879exports.addSequencer = function (name, map) {
7880 addProperty(name, sequencer(map));
7881};
7882
7883exports.addSequencer('rainbow', rainbowMap);
7884exports.addSequencer('zebra', function (letter, i, exploded) {
7885 return i % 2 === 0 ? letter : letter.inverse;
7886});
7887
7888exports.setTheme = function (theme) {
7889 if (typeof theme === 'string') {
7890 try {
7891 exports.themes[theme] = __webpack_require__(50)(theme);
7892 applyTheme(exports.themes[theme]);
7893 return exports.themes[theme];
7894 } catch (err) {
7895 console.log(err);
7896 return err;
7897 }
7898 } else {
7899 applyTheme(theme);
7900 }
7901};
7902
7903
7904addProperty('stripColors', function () {
7905 return ("" + this).replace(/\x1B\[\d+m/g, '');
7906});
7907
7908// please no
7909function zalgo(text, options) {
7910 var soul = {
7911 "up" : [
7912 '̍', '̎', '̄', '̅',
7913 '̿', '̑', '̆', '̐',
7914 '͒', '͗', '͑', '̇',
7915 '̈', '̊', '͂', '̓',
7916 '̈', '͊', '͋', '͌',
7917 '̃', '̂', '̌', '͐',
7918 '̀', '́', '̋', '̏',
7919 '̒', '̓', '̔', '̽',
7920 '̉', 'ͣ', 'ͤ', 'ͥ',
7921 'ͦ', 'ͧ', 'ͨ', 'ͩ',
7922 'ͪ', 'ͫ', 'ͬ', 'ͭ',
7923 'ͮ', 'ͯ', '̾', '͛',
7924 '͆', '̚'
7925 ],
7926 "down" : [
7927 '̖', '̗', '̘', '̙',
7928 '̜', '̝', '̞', '̟',
7929 '̠', '̤', '̥', '̦',
7930 '̩', '̪', '̫', '̬',
7931 '̭', '̮', '̯', '̰',
7932 '̱', '̲', '̳', '̹',
7933 '̺', '̻', '̼', 'ͅ',
7934 '͇', '͈', '͉', '͍',
7935 '͎', '͓', '͔', '͕',
7936 '͖', '͙', '͚', '̣'
7937 ],
7938 "mid" : [
7939 '̕', '̛', '̀', '́',
7940 '͘', '̡', '̢', '̧',
7941 '̨', '̴', '̵', '̶',
7942 '͜', '͝', '͞',
7943 '͟', '͠', '͢', '̸',
7944 '̷', '͡', ' ҉'
7945 ]
7946 },
7947 all = [].concat(soul.up, soul.down, soul.mid),
7948 zalgo = {};
7949
7950 function randomNumber(range) {
7951 var r = Math.floor(Math.random() * range);
7952 return r;
7953 }
7954
7955 function is_char(character) {
7956 var bool = false;
7957 all.filter(function (i) {
7958 bool = (i === character);
7959 });
7960 return bool;
7961 }
7962
7963 function heComes(text, options) {
7964 var result = '', counts, l;
7965 options = options || {};
7966 options["up"] = options["up"] || true;
7967 options["mid"] = options["mid"] || true;
7968 options["down"] = options["down"] || true;
7969 options["size"] = options["size"] || "maxi";
7970 text = text.split('');
7971 for (l in text) {
7972 if (is_char(l)) {
7973 continue;
7974 }
7975 result = result + text[l];
7976 counts = {"up" : 0, "down" : 0, "mid" : 0};
7977 switch (options.size) {
7978 case 'mini':
7979 counts.up = randomNumber(8);
7980 counts.min = randomNumber(2);
7981 counts.down = randomNumber(8);
7982 break;
7983 case 'maxi':
7984 counts.up = randomNumber(16) + 3;
7985 counts.min = randomNumber(4) + 1;
7986 counts.down = randomNumber(64) + 3;
7987 break;
7988 default:
7989 counts.up = randomNumber(8) + 1;
7990 counts.mid = randomNumber(6) / 2;
7991 counts.down = randomNumber(8) + 1;
7992 break;
7993 }
7994
7995 var arr = ["up", "mid", "down"];
7996 for (var d in arr) {
7997 var index = arr[d];
7998 for (var i = 0 ; i <= counts[index]; i++) {
7999 if (options[index]) {
8000 result = result + soul[index][randomNumber(soul[index].length)];
8001 }
8002 }
8003 }
8004 }
8005 return result;
8006 }
8007 return heComes(text);
8008}
8009
8010
8011// don't summon zalgo
8012addProperty('zalgo', function () {
8013 return zalgo(this);
8014});
8015
8016
8017/***/ }),
8018/* 50 */
8019/***/ ((module) => {
8020
8021function webpackEmptyContext(req) {
8022 var e = new Error("Cannot find module '" + req + "'");
8023 e.code = 'MODULE_NOT_FOUND';
8024 throw e;
8025}
8026webpackEmptyContext.keys = () => [];
8027webpackEmptyContext.resolve = webpackEmptyContext;
8028webpackEmptyContext.id = 50;
8029module.exports = webpackEmptyContext;
8030
8031/***/ }),
8032/* 51 */
8033/***/ ((module) => {
8034
8035"use strict";
8036module.exports = require("events");;
8037
8038/***/ }),
8039/* 52 */
8040/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8041
8042/* module decorator */ module = __webpack_require__.nmd(module);
8043//!/usr/bin/env nodejs
8044// usage: nodejs vimlparser.js [--neovim] foo.vim
8045
8046var fs = __webpack_require__(40);
8047var util = __webpack_require__(48);
8048
8049function main() {
8050 var neovim = false;
8051 var fpath = ''
8052 var args = process.argv;
8053 if (args.length == 4) {
8054 if (args[2] == '--neovim') {
8055 neovim = true;
8056 }
8057 fpath = args[3];
8058 } else if (args.length == 3) {
8059 neovim = false;
8060 fpath = args[2]
8061 }
8062 var r = new StringReader(viml_readfile(fpath));
8063 var p = new VimLParser(neovim);
8064 var c = new Compiler();
8065 try {
8066 var lines = c.compile(p.parse(r));
8067 for (var i in lines) {
8068 process.stdout.write(lines[i] + "\n");
8069 }
8070 } catch (e) {
8071 process.stdout.write(e + '\n');
8072 }
8073}
8074
8075var pat_vim2js = {
8076 "[0-9a-zA-Z]" : "[0-9a-zA-Z]",
8077 "[@*!=><&~#]" : "[@*!=><&~#]",
8078 "\\<ARGOPT\\>" : "\\bARGOPT\\b",
8079 "\\<BANG\\>" : "\\bBANG\\b",
8080 "\\<EDITCMD\\>" : "\\bEDITCMD\\b",
8081 "\\<NOTRLCOM\\>" : "\\bNOTRLCOM\\b",
8082 "\\<TRLBAR\\>" : "\\bTRLBAR\\b",
8083 "\\<USECTRLV\\>" : "\\bUSECTRLV\\b",
8084 "\\<USERCMD\\>" : "\\bUSERCMD\\b",
8085 "\\<\\(XFILE\\|FILES\\|FILE1\\)\\>" : "\\b(XFILE|FILES|FILE1)\\b",
8086 "\\S" : "\\S",
8087 "\\a" : "[A-Za-z]",
8088 "\\d" : "\\d",
8089 "\\h" : "[A-Za-z_]",
8090 "\\s" : "\\s",
8091 "\\v^d%[elete][lp]$" : "^d(elete|elet|ele|el|e)[lp]$",
8092 "\\v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])" : "^s(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])",
8093 "\\w" : "[0-9A-Za-z_]",
8094 "\\w\\|[:#]" : "[0-9A-Za-z_]|[:#]",
8095 "\\x" : "[0-9A-Fa-f]",
8096 "^++" : "^\+\+",
8097 "^++bad=\\(keep\\|drop\\|.\\)\\>" : "^\\+\\+bad=(keep|drop|.)\\b",
8098 "^++bad=drop" : "^\\+\\+bad=drop",
8099 "^++bad=keep" : "^\\+\\+bad=keep",
8100 "^++bin\\>" : "^\\+\\+bin\\b",
8101 "^++edit\\>" : "^\\+\\+edit\\b",
8102 "^++enc=\\S" : "^\\+\\+enc=\\S",
8103 "^++encoding=\\S" : "^\\+\\+encoding=\\S",
8104 "^++ff=\\(dos\\|unix\\|mac\\)\\>" : "^\\+\\+ff=(dos|unix|mac)\\b",
8105 "^++fileformat=\\(dos\\|unix\\|mac\\)\\>" : "^\\+\\+fileformat=(dos|unix|mac)\\b",
8106 "^++nobin\\>" : "^\\+\\+nobin\\b",
8107 "^[A-Z]" : "^[A-Z]",
8108 "^\\$\\w\\+" : "^\\$[0-9A-Za-z_]+",
8109 "^\\(!\\|global\\|vglobal\\)$" : "^(!|global|vglobal)$",
8110 "^\\(WHILE\\|FOR\\)$" : "^(WHILE|FOR)$",
8111 "^\\(vimgrep\\|vimgrepadd\\|lvimgrep\\|lvimgrepadd\\)$" : "^(vimgrep|vimgrepadd|lvimgrep|lvimgrepadd)$",
8112 "^\\d" : "^\\d",
8113 "^\\h" : "^[A-Za-z_]",
8114 "^\\s" : "^\\s",
8115 "^\\s*\\\\" : "^\\s*\\\\",
8116 "^[ \\t]$" : "^[ \\t]$",
8117 "^[A-Za-z]$" : "^[A-Za-z]$",
8118 "^[0-9A-Za-z]$" : "^[0-9A-Za-z]$",
8119 "^[0-9]$" : "^[0-9]$",
8120 "^[0-9A-Fa-f]$" : "^[0-9A-Fa-f]$",
8121 "^[0-9A-Za-z_]$" : "^[0-9A-Za-z_]$",
8122 "^[A-Za-z_]$" : "^[A-Za-z_]$",
8123 "^[0-9A-Za-z_:#]$" : "^[0-9A-Za-z_:#]$",
8124 "^[A-Za-z_][0-9A-Za-z_]*$" : "^[A-Za-z_][0-9A-Za-z_]*$",
8125 "^[A-Z]$" : "^[A-Z]$",
8126 "^[a-z]$" : "^[a-z]$",
8127 "^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$" : "^[vgslabwt]:$|^([vgslabwt]:)?[A-Za-z_][0-9A-Za-z_#]*$",
8128 "^[0-7]$" : "^[0-7]$",
8129 "^[0-9A-Fa-f][0-9A-Fa-f]$" : "^[0-9A-Fa-f][0-9A-Fa-f]$",
8130 "^\\.[0-9A-Fa-f]$" : "^\\.[0-9A-Fa-f]$",
8131 "^[0-9A-Fa-f][^0-9A-Fa-f]$" : "^[0-9A-Fa-f][^0-9A-Fa-f]$",
8132}
8133
8134function viml_add(lst, item) {
8135 lst.push(item);
8136}
8137
8138function viml_call(func, args) {
8139 return func.apply(null, args);
8140}
8141
8142function viml_char2nr(c) {
8143 return c.charCodeAt(0);
8144}
8145
8146function viml_empty(obj) {
8147 return obj.length == 0;
8148}
8149
8150function viml_equalci(a, b) {
8151 return a.toLowerCase() == b.toLowerCase();
8152}
8153
8154function viml_eqreg(s, reg) {
8155 var mx = new RegExp(pat_vim2js[reg]);
8156 return mx.exec(s) != null;
8157}
8158
8159function viml_eqregh(s, reg) {
8160 var mx = new RegExp(pat_vim2js[reg]);
8161 return mx.exec(s) != null;
8162}
8163
8164function viml_eqregq(s, reg) {
8165 var mx = new RegExp(pat_vim2js[reg], "i");
8166 return mx.exec(s) != null;
8167}
8168
8169function viml_escape(s, chars) {
8170 var r = '';
8171 for (var i = 0; i < s.length; ++i) {
8172 if (chars.indexOf(s.charAt(i)) != -1) {
8173 r = r + "\\" + s.charAt(i);
8174 } else {
8175 r = r + s.charAt(i);
8176 }
8177 }
8178 return r;
8179}
8180
8181function viml_extend(obj, item) {
8182 obj.push.apply(obj, item);
8183}
8184
8185function viml_insert(lst, item) {
8186 var idx = arguments.length >= 3 ? arguments[2] : 0;
8187 lst.splice(0, 0, item);
8188}
8189
8190function viml_join(lst, sep) {
8191 return lst.join(sep);
8192}
8193
8194function viml_keys(obj) {
8195 return Object.keys(obj);
8196}
8197
8198function viml_len(obj) {
8199 if (typeof obj === 'string') {
8200 var len = 0;
8201 for (var i = 0; i < obj.length; i++) {
8202 var c = obj.charCodeAt(i);
8203 len += c < 128 ? 1 : ((c > 127) && (c < 2048)) ? 2 : 3;
8204 }
8205 return len;
8206 }
8207 return obj.length;
8208}
8209
8210function viml_printf() {
8211 var a000 = Array.prototype.slice.call(arguments, 0);
8212 if (a000.length == 1) {
8213 return a000[0];
8214 } else {
8215 return util.format.apply(null, a000);
8216 }
8217}
8218
8219function viml_range(start) {
8220 var end = arguments.length >= 2 ? arguments[1] : null;
8221 if (end == null) {
8222 var x = [];
8223 for (var i = 0; i < start; ++i) {
8224 x.push(i);
8225 }
8226 return x;
8227 } else {
8228 var x = []
8229 for (var i = start; i <= end; ++i) {
8230 x.push(i);
8231 }
8232 return x;
8233 }
8234}
8235
8236function viml_readfile(path) {
8237 // FIXME: newline?
8238 return fs.readFileSync(path, 'utf-8').split(/\r\n|\r|\n/);
8239}
8240
8241function viml_remove(lst, idx) {
8242 lst.splice(idx, 1);
8243}
8244
8245function viml_split(s, sep) {
8246 if (sep == "\\zs") {
8247 return s.split("");
8248 }
8249 throw "NotImplemented";
8250}
8251
8252function viml_str2nr(s) {
8253 var base = arguments.length >= 2 ? arguments[1] : 10;
8254 return parseInt(s, base);
8255}
8256
8257function viml_string(obj) {
8258 return obj.toString();
8259}
8260
8261function viml_has_key(obj, key) {
8262 return obj[key] !== undefined;
8263}
8264
8265function viml_stridx(a, b) {
8266 return a.indexOf(b);
8267}
8268
8269var NIL = [];
8270var TRUE = 1;
8271var FALSE = 0;
8272var NODE_TOPLEVEL = 1;
8273var NODE_COMMENT = 2;
8274var NODE_EXCMD = 3;
8275var NODE_FUNCTION = 4;
8276var NODE_ENDFUNCTION = 5;
8277var NODE_DELFUNCTION = 6;
8278var NODE_RETURN = 7;
8279var NODE_EXCALL = 8;
8280var NODE_LET = 9;
8281var NODE_UNLET = 10;
8282var NODE_LOCKVAR = 11;
8283var NODE_UNLOCKVAR = 12;
8284var NODE_IF = 13;
8285var NODE_ELSEIF = 14;
8286var NODE_ELSE = 15;
8287var NODE_ENDIF = 16;
8288var NODE_WHILE = 17;
8289var NODE_ENDWHILE = 18;
8290var NODE_FOR = 19;
8291var NODE_ENDFOR = 20;
8292var NODE_CONTINUE = 21;
8293var NODE_BREAK = 22;
8294var NODE_TRY = 23;
8295var NODE_CATCH = 24;
8296var NODE_FINALLY = 25;
8297var NODE_ENDTRY = 26;
8298var NODE_THROW = 27;
8299var NODE_ECHO = 28;
8300var NODE_ECHON = 29;
8301var NODE_ECHOHL = 30;
8302var NODE_ECHOMSG = 31;
8303var NODE_ECHOERR = 32;
8304var NODE_EXECUTE = 33;
8305var NODE_TERNARY = 34;
8306var NODE_OR = 35;
8307var NODE_AND = 36;
8308var NODE_EQUAL = 37;
8309var NODE_EQUALCI = 38;
8310var NODE_EQUALCS = 39;
8311var NODE_NEQUAL = 40;
8312var NODE_NEQUALCI = 41;
8313var NODE_NEQUALCS = 42;
8314var NODE_GREATER = 43;
8315var NODE_GREATERCI = 44;
8316var NODE_GREATERCS = 45;
8317var NODE_GEQUAL = 46;
8318var NODE_GEQUALCI = 47;
8319var NODE_GEQUALCS = 48;
8320var NODE_SMALLER = 49;
8321var NODE_SMALLERCI = 50;
8322var NODE_SMALLERCS = 51;
8323var NODE_SEQUAL = 52;
8324var NODE_SEQUALCI = 53;
8325var NODE_SEQUALCS = 54;
8326var NODE_MATCH = 55;
8327var NODE_MATCHCI = 56;
8328var NODE_MATCHCS = 57;
8329var NODE_NOMATCH = 58;
8330var NODE_NOMATCHCI = 59;
8331var NODE_NOMATCHCS = 60;
8332var NODE_IS = 61;
8333var NODE_ISCI = 62;
8334var NODE_ISCS = 63;
8335var NODE_ISNOT = 64;
8336var NODE_ISNOTCI = 65;
8337var NODE_ISNOTCS = 66;
8338var NODE_ADD = 67;
8339var NODE_SUBTRACT = 68;
8340var NODE_CONCAT = 69;
8341var NODE_MULTIPLY = 70;
8342var NODE_DIVIDE = 71;
8343var NODE_REMAINDER = 72;
8344var NODE_NOT = 73;
8345var NODE_MINUS = 74;
8346var NODE_PLUS = 75;
8347var NODE_SUBSCRIPT = 76;
8348var NODE_SLICE = 77;
8349var NODE_CALL = 78;
8350var NODE_DOT = 79;
8351var NODE_NUMBER = 80;
8352var NODE_STRING = 81;
8353var NODE_LIST = 82;
8354var NODE_DICT = 83;
8355var NODE_OPTION = 85;
8356var NODE_IDENTIFIER = 86;
8357var NODE_CURLYNAME = 87;
8358var NODE_ENV = 88;
8359var NODE_REG = 89;
8360var NODE_CURLYNAMEPART = 90;
8361var NODE_CURLYNAMEEXPR = 91;
8362var NODE_LAMBDA = 92;
8363var NODE_BLOB = 93;
8364var NODE_CONST = 94;
8365var NODE_EVAL = 95;
8366var NODE_HEREDOC = 96;
8367var NODE_METHOD = 97;
8368var TOKEN_EOF = 1;
8369var TOKEN_EOL = 2;
8370var TOKEN_SPACE = 3;
8371var TOKEN_OROR = 4;
8372var TOKEN_ANDAND = 5;
8373var TOKEN_EQEQ = 6;
8374var TOKEN_EQEQCI = 7;
8375var TOKEN_EQEQCS = 8;
8376var TOKEN_NEQ = 9;
8377var TOKEN_NEQCI = 10;
8378var TOKEN_NEQCS = 11;
8379var TOKEN_GT = 12;
8380var TOKEN_GTCI = 13;
8381var TOKEN_GTCS = 14;
8382var TOKEN_GTEQ = 15;
8383var TOKEN_GTEQCI = 16;
8384var TOKEN_GTEQCS = 17;
8385var TOKEN_LT = 18;
8386var TOKEN_LTCI = 19;
8387var TOKEN_LTCS = 20;
8388var TOKEN_LTEQ = 21;
8389var TOKEN_LTEQCI = 22;
8390var TOKEN_LTEQCS = 23;
8391var TOKEN_MATCH = 24;
8392var TOKEN_MATCHCI = 25;
8393var TOKEN_MATCHCS = 26;
8394var TOKEN_NOMATCH = 27;
8395var TOKEN_NOMATCHCI = 28;
8396var TOKEN_NOMATCHCS = 29;
8397var TOKEN_IS = 30;
8398var TOKEN_ISCI = 31;
8399var TOKEN_ISCS = 32;
8400var TOKEN_ISNOT = 33;
8401var TOKEN_ISNOTCI = 34;
8402var TOKEN_ISNOTCS = 35;
8403var TOKEN_PLUS = 36;
8404var TOKEN_MINUS = 37;
8405var TOKEN_DOT = 38;
8406var TOKEN_STAR = 39;
8407var TOKEN_SLASH = 40;
8408var TOKEN_PERCENT = 41;
8409var TOKEN_NOT = 42;
8410var TOKEN_QUESTION = 43;
8411var TOKEN_COLON = 44;
8412var TOKEN_POPEN = 45;
8413var TOKEN_PCLOSE = 46;
8414var TOKEN_SQOPEN = 47;
8415var TOKEN_SQCLOSE = 48;
8416var TOKEN_COPEN = 49;
8417var TOKEN_CCLOSE = 50;
8418var TOKEN_COMMA = 51;
8419var TOKEN_NUMBER = 52;
8420var TOKEN_SQUOTE = 53;
8421var TOKEN_DQUOTE = 54;
8422var TOKEN_OPTION = 55;
8423var TOKEN_IDENTIFIER = 56;
8424var TOKEN_ENV = 57;
8425var TOKEN_REG = 58;
8426var TOKEN_EQ = 59;
8427var TOKEN_OR = 60;
8428var TOKEN_SEMICOLON = 61;
8429var TOKEN_BACKTICK = 62;
8430var TOKEN_DOTDOTDOT = 63;
8431var TOKEN_SHARP = 64;
8432var TOKEN_ARROW = 65;
8433var TOKEN_BLOB = 66;
8434var TOKEN_LITCOPEN = 67;
8435var TOKEN_DOTDOT = 68;
8436var TOKEN_HEREDOC = 69;
8437var MAX_FUNC_ARGS = 20;
8438function isalpha(c) {
8439 return viml_eqregh(c, "^[A-Za-z]$");
8440}
8441
8442function isalnum(c) {
8443 return viml_eqregh(c, "^[0-9A-Za-z]$");
8444}
8445
8446function isdigit(c) {
8447 return viml_eqregh(c, "^[0-9]$");
8448}
8449
8450function isodigit(c) {
8451 return viml_eqregh(c, "^[0-7]$");
8452}
8453
8454function isxdigit(c) {
8455 return viml_eqregh(c, "^[0-9A-Fa-f]$");
8456}
8457
8458function iswordc(c) {
8459 return viml_eqregh(c, "^[0-9A-Za-z_]$");
8460}
8461
8462function iswordc1(c) {
8463 return viml_eqregh(c, "^[A-Za-z_]$");
8464}
8465
8466function iswhite(c) {
8467 return viml_eqregh(c, "^[ \\t]$");
8468}
8469
8470function isnamec(c) {
8471 return viml_eqregh(c, "^[0-9A-Za-z_:#]$");
8472}
8473
8474function isnamec1(c) {
8475 return viml_eqregh(c, "^[A-Za-z_]$");
8476}
8477
8478function isargname(s) {
8479 return viml_eqregh(s, "^[A-Za-z_][0-9A-Za-z_]*$");
8480}
8481
8482function isvarname(s) {
8483 return viml_eqregh(s, "^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$");
8484}
8485
8486// FIXME:
8487function isidc(c) {
8488 return viml_eqregh(c, "^[0-9A-Za-z_]$");
8489}
8490
8491function isupper(c) {
8492 return viml_eqregh(c, "^[A-Z]$");
8493}
8494
8495function islower(c) {
8496 return viml_eqregh(c, "^[a-z]$");
8497}
8498
8499function ExArg() {
8500 var ea = {};
8501 ea.forceit = FALSE;
8502 ea.addr_count = 0;
8503 ea.line1 = 0;
8504 ea.line2 = 0;
8505 ea.flags = 0;
8506 ea.do_ecmd_cmd = "";
8507 ea.do_ecmd_lnum = 0;
8508 ea.append = 0;
8509 ea.usefilter = FALSE;
8510 ea.amount = 0;
8511 ea.regname = 0;
8512 ea.force_bin = 0;
8513 ea.read_edit = 0;
8514 ea.force_ff = 0;
8515 ea.force_enc = 0;
8516 ea.bad_char = 0;
8517 ea.linepos = {};
8518 ea.cmdpos = [];
8519 ea.argpos = [];
8520 ea.cmd = {};
8521 ea.modifiers = [];
8522 ea.range = [];
8523 ea.argopt = {};
8524 ea.argcmd = {};
8525 return ea;
8526}
8527
8528// struct node {
8529// int type
8530// pos pos
8531// node left
8532// node right
8533// node cond
8534// node rest
8535// node[] list
8536// node[] rlist
8537// node[] default_args
8538// node[] body
8539// string op
8540// string str
8541// int depth
8542// variant value
8543// }
8544// TOPLEVEL .body
8545// COMMENT .str
8546// EXCMD .ea .str
8547// FUNCTION .ea .body .left .rlist .default_args .attr .endfunction
8548// ENDFUNCTION .ea
8549// DELFUNCTION .ea .left
8550// RETURN .ea .left
8551// EXCALL .ea .left
8552// LET .ea .op .left .list .rest .right
8553// CONST .ea .op .left .list .rest .right
8554// UNLET .ea .list
8555// LOCKVAR .ea .depth .list
8556// UNLOCKVAR .ea .depth .list
8557// IF .ea .body .cond .elseif .else .endif
8558// ELSEIF .ea .body .cond
8559// ELSE .ea .body
8560// ENDIF .ea
8561// WHILE .ea .body .cond .endwhile
8562// ENDWHILE .ea
8563// FOR .ea .body .left .list .rest .right .endfor
8564// ENDFOR .ea
8565// CONTINUE .ea
8566// BREAK .ea
8567// TRY .ea .body .catch .finally .endtry
8568// CATCH .ea .body .pattern
8569// FINALLY .ea .body
8570// ENDTRY .ea
8571// THROW .ea .left
8572// EVAL .ea .left
8573// ECHO .ea .list
8574// ECHON .ea .list
8575// ECHOHL .ea .str
8576// ECHOMSG .ea .list
8577// ECHOERR .ea .list
8578// EXECUTE .ea .list
8579// TERNARY .cond .left .right
8580// OR .left .right
8581// AND .left .right
8582// EQUAL .left .right
8583// EQUALCI .left .right
8584// EQUALCS .left .right
8585// NEQUAL .left .right
8586// NEQUALCI .left .right
8587// NEQUALCS .left .right
8588// GREATER .left .right
8589// GREATERCI .left .right
8590// GREATERCS .left .right
8591// GEQUAL .left .right
8592// GEQUALCI .left .right
8593// GEQUALCS .left .right
8594// SMALLER .left .right
8595// SMALLERCI .left .right
8596// SMALLERCS .left .right
8597// SEQUAL .left .right
8598// SEQUALCI .left .right
8599// SEQUALCS .left .right
8600// MATCH .left .right
8601// MATCHCI .left .right
8602// MATCHCS .left .right
8603// NOMATCH .left .right
8604// NOMATCHCI .left .right
8605// NOMATCHCS .left .right
8606// IS .left .right
8607// ISCI .left .right
8608// ISCS .left .right
8609// ISNOT .left .right
8610// ISNOTCI .left .right
8611// ISNOTCS .left .right
8612// ADD .left .right
8613// SUBTRACT .left .right
8614// CONCAT .left .right
8615// MULTIPLY .left .right
8616// DIVIDE .left .right
8617// REMAINDER .left .right
8618// NOT .left
8619// MINUS .left
8620// PLUS .left
8621// SUBSCRIPT .left .right
8622// SLICE .left .rlist
8623// METHOD .left .right
8624// CALL .left .rlist
8625// DOT .left .right
8626// NUMBER .value
8627// STRING .value
8628// LIST .value
8629// DICT .value
8630// BLOB .value
8631// NESTING .left
8632// OPTION .value
8633// IDENTIFIER .value
8634// CURLYNAME .value
8635// ENV .value
8636// REG .value
8637// CURLYNAMEPART .value
8638// CURLYNAMEEXPR .value
8639// LAMBDA .rlist .left
8640// HEREDOC .rlist .op .body
8641function Node(type) {
8642 return {"type":type};
8643}
8644
8645function Err(msg, pos) {
8646 return viml_printf("vimlparser: %s: line %d col %d", msg, pos.lnum, pos.col);
8647}
8648
8649function VimLParser() { this.__init__.apply(this, arguments); }
8650VimLParser.prototype.__init__ = function() {
8651 var a000 = Array.prototype.slice.call(arguments, 0);
8652 if (viml_len(a000) > 0) {
8653 this.neovim = a000[0];
8654 }
8655 else {
8656 this.neovim = 0;
8657 }
8658 this.find_command_cache = {};
8659}
8660
8661VimLParser.prototype.push_context = function(node) {
8662 viml_insert(this.context, node);
8663}
8664
8665VimLParser.prototype.pop_context = function() {
8666 viml_remove(this.context, 0);
8667}
8668
8669VimLParser.prototype.find_context = function(type) {
8670 var i = 0;
8671 var __c3 = this.context;
8672 for (var __i3 = 0; __i3 < __c3.length; ++__i3) {
8673 var node = __c3[__i3];
8674 if (node.type == type) {
8675 return i;
8676 }
8677 i += 1;
8678 }
8679 return -1;
8680}
8681
8682VimLParser.prototype.add_node = function(node) {
8683 viml_add(this.context[0].body, node);
8684}
8685
8686VimLParser.prototype.check_missing_endfunction = function(ends, pos) {
8687 if (this.context[0].type == NODE_FUNCTION) {
8688 throw Err(viml_printf("E126: Missing :endfunction: %s", ends), pos);
8689 }
8690}
8691
8692VimLParser.prototype.check_missing_endif = function(ends, pos) {
8693 if (this.context[0].type == NODE_IF || this.context[0].type == NODE_ELSEIF || this.context[0].type == NODE_ELSE) {
8694 throw Err(viml_printf("E171: Missing :endif: %s", ends), pos);
8695 }
8696}
8697
8698VimLParser.prototype.check_missing_endtry = function(ends, pos) {
8699 if (this.context[0].type == NODE_TRY || this.context[0].type == NODE_CATCH || this.context[0].type == NODE_FINALLY) {
8700 throw Err(viml_printf("E600: Missing :endtry: %s", ends), pos);
8701 }
8702}
8703
8704VimLParser.prototype.check_missing_endwhile = function(ends, pos) {
8705 if (this.context[0].type == NODE_WHILE) {
8706 throw Err(viml_printf("E170: Missing :endwhile: %s", ends), pos);
8707 }
8708}
8709
8710VimLParser.prototype.check_missing_endfor = function(ends, pos) {
8711 if (this.context[0].type == NODE_FOR) {
8712 throw Err(viml_printf("E170: Missing :endfor: %s", ends), pos);
8713 }
8714}
8715
8716VimLParser.prototype.parse = function(reader) {
8717 this.reader = reader;
8718 this.context = [];
8719 var toplevel = Node(NODE_TOPLEVEL);
8720 toplevel.pos = this.reader.getpos();
8721 toplevel.body = [];
8722 this.push_context(toplevel);
8723 while (this.reader.peek() != "<EOF>") {
8724 this.parse_one_cmd();
8725 }
8726 this.check_missing_endfunction("TOPLEVEL", this.reader.getpos());
8727 this.check_missing_endif("TOPLEVEL", this.reader.getpos());
8728 this.check_missing_endtry("TOPLEVEL", this.reader.getpos());
8729 this.check_missing_endwhile("TOPLEVEL", this.reader.getpos());
8730 this.check_missing_endfor("TOPLEVEL", this.reader.getpos());
8731 this.pop_context();
8732 return toplevel;
8733}
8734
8735VimLParser.prototype.parse_one_cmd = function() {
8736 this.ea = ExArg();
8737 if (this.reader.peekn(2) == "#!") {
8738 this.parse_hashbang();
8739 this.reader.get();
8740 return;
8741 }
8742 this.reader.skip_white_and_colon();
8743 if (this.reader.peekn(1) == "") {
8744 this.reader.get();
8745 return;
8746 }
8747 if (this.reader.peekn(1) == "\"") {
8748 this.parse_comment();
8749 this.reader.get();
8750 return;
8751 }
8752 this.ea.linepos = this.reader.getpos();
8753 this.parse_command_modifiers();
8754 this.parse_range();
8755 this.parse_command();
8756 this.parse_trail();
8757}
8758
8759// FIXME:
8760VimLParser.prototype.parse_command_modifiers = function() {
8761 var modifiers = [];
8762 while (TRUE) {
8763 var pos = this.reader.tell();
8764 var d = "";
8765 if (isdigit(this.reader.peekn(1))) {
8766 var d = this.reader.read_digit();
8767 this.reader.skip_white();
8768 }
8769 var k = this.reader.read_alpha();
8770 var c = this.reader.peekn(1);
8771 this.reader.skip_white();
8772 if (viml_stridx("aboveleft", k) == 0 && viml_len(k) >= 3) {
8773 // abo\%[veleft]
8774 viml_add(modifiers, {"name":"aboveleft"});
8775 }
8776 else if (viml_stridx("belowright", k) == 0 && viml_len(k) >= 3) {
8777 // bel\%[owright]
8778 viml_add(modifiers, {"name":"belowright"});
8779 }
8780 else if (viml_stridx("browse", k) == 0 && viml_len(k) >= 3) {
8781 // bro\%[wse]
8782 viml_add(modifiers, {"name":"browse"});
8783 }
8784 else if (viml_stridx("botright", k) == 0 && viml_len(k) >= 2) {
8785 // bo\%[tright]
8786 viml_add(modifiers, {"name":"botright"});
8787 }
8788 else if (viml_stridx("confirm", k) == 0 && viml_len(k) >= 4) {
8789 // conf\%[irm]
8790 viml_add(modifiers, {"name":"confirm"});
8791 }
8792 else if (viml_stridx("keepmarks", k) == 0 && viml_len(k) >= 3) {
8793 // kee\%[pmarks]
8794 viml_add(modifiers, {"name":"keepmarks"});
8795 }
8796 else if (viml_stridx("keepalt", k) == 0 && viml_len(k) >= 5) {
8797 // keepa\%[lt]
8798 viml_add(modifiers, {"name":"keepalt"});
8799 }
8800 else if (viml_stridx("keepjumps", k) == 0 && viml_len(k) >= 5) {
8801 // keepj\%[umps]
8802 viml_add(modifiers, {"name":"keepjumps"});
8803 }
8804 else if (viml_stridx("keeppatterns", k) == 0 && viml_len(k) >= 5) {
8805 // keepp\%[atterns]
8806 viml_add(modifiers, {"name":"keeppatterns"});
8807 }
8808 else if (viml_stridx("hide", k) == 0 && viml_len(k) >= 3) {
8809 // hid\%[e]
8810 if (this.ends_excmds(c)) {
8811 break;
8812 }
8813 viml_add(modifiers, {"name":"hide"});
8814 }
8815 else if (viml_stridx("lockmarks", k) == 0 && viml_len(k) >= 3) {
8816 // loc\%[kmarks]
8817 viml_add(modifiers, {"name":"lockmarks"});
8818 }
8819 else if (viml_stridx("leftabove", k) == 0 && viml_len(k) >= 5) {
8820 // lefta\%[bove]
8821 viml_add(modifiers, {"name":"leftabove"});
8822 }
8823 else if (viml_stridx("noautocmd", k) == 0 && viml_len(k) >= 3) {
8824 // noa\%[utocmd]
8825 viml_add(modifiers, {"name":"noautocmd"});
8826 }
8827 else if (viml_stridx("noswapfile", k) == 0 && viml_len(k) >= 3) {
8828 // :nos\%[wapfile]
8829 viml_add(modifiers, {"name":"noswapfile"});
8830 }
8831 else if (viml_stridx("rightbelow", k) == 0 && viml_len(k) >= 6) {
8832 // rightb\%[elow]
8833 viml_add(modifiers, {"name":"rightbelow"});
8834 }
8835 else if (viml_stridx("sandbox", k) == 0 && viml_len(k) >= 3) {
8836 // san\%[dbox]
8837 viml_add(modifiers, {"name":"sandbox"});
8838 }
8839 else if (viml_stridx("silent", k) == 0 && viml_len(k) >= 3) {
8840 // sil\%[ent]
8841 if (c == "!") {
8842 this.reader.get();
8843 viml_add(modifiers, {"name":"silent", "bang":1});
8844 }
8845 else {
8846 viml_add(modifiers, {"name":"silent", "bang":0});
8847 }
8848 }
8849 else if (k == "tab") {
8850 // tab
8851 if (d != "") {
8852 viml_add(modifiers, {"name":"tab", "count":viml_str2nr(d, 10)});
8853 }
8854 else {
8855 viml_add(modifiers, {"name":"tab"});
8856 }
8857 }
8858 else if (viml_stridx("topleft", k) == 0 && viml_len(k) >= 2) {
8859 // to\%[pleft]
8860 viml_add(modifiers, {"name":"topleft"});
8861 }
8862 else if (viml_stridx("unsilent", k) == 0 && viml_len(k) >= 3) {
8863 // uns\%[ilent]
8864 viml_add(modifiers, {"name":"unsilent"});
8865 }
8866 else if (viml_stridx("vertical", k) == 0 && viml_len(k) >= 4) {
8867 // vert\%[ical]
8868 viml_add(modifiers, {"name":"vertical"});
8869 }
8870 else if (viml_stridx("verbose", k) == 0 && viml_len(k) >= 4) {
8871 // verb\%[ose]
8872 if (d != "") {
8873 viml_add(modifiers, {"name":"verbose", "count":viml_str2nr(d, 10)});
8874 }
8875 else {
8876 viml_add(modifiers, {"name":"verbose", "count":1});
8877 }
8878 }
8879 else {
8880 this.reader.seek_set(pos);
8881 break;
8882 }
8883 }
8884 this.ea.modifiers = modifiers;
8885}
8886
8887// FIXME:
8888VimLParser.prototype.parse_range = function() {
8889 var tokens = [];
8890 while (TRUE) {
8891 while (TRUE) {
8892 this.reader.skip_white();
8893 var c = this.reader.peekn(1);
8894 if (c == "") {
8895 break;
8896 }
8897 if (c == ".") {
8898 viml_add(tokens, this.reader.getn(1));
8899 }
8900 else if (c == "$") {
8901 viml_add(tokens, this.reader.getn(1));
8902 }
8903 else if (c == "'") {
8904 this.reader.getn(1);
8905 var m = this.reader.getn(1);
8906 if (m == "") {
8907 break;
8908 }
8909 viml_add(tokens, "'" + m);
8910 }
8911 else if (c == "/") {
8912 this.reader.getn(1);
8913 var __tmp = this.parse_pattern(c);
8914 var pattern = __tmp[0];
8915 var _ = __tmp[1];
8916 viml_add(tokens, pattern);
8917 }
8918 else if (c == "?") {
8919 this.reader.getn(1);
8920 var __tmp = this.parse_pattern(c);
8921 var pattern = __tmp[0];
8922 var _ = __tmp[1];
8923 viml_add(tokens, pattern);
8924 }
8925 else if (c == "\\") {
8926 var m = this.reader.p(1);
8927 if (m == "&" || m == "?" || m == "/") {
8928 this.reader.seek_cur(2);
8929 viml_add(tokens, "\\" + m);
8930 }
8931 else {
8932 throw Err("E10: \\\\ should be followed by /, ? or &", this.reader.getpos());
8933 }
8934 }
8935 else if (isdigit(c)) {
8936 viml_add(tokens, this.reader.read_digit());
8937 }
8938 while (TRUE) {
8939 this.reader.skip_white();
8940 if (this.reader.peekn(1) == "") {
8941 break;
8942 }
8943 var n = this.reader.read_integer();
8944 if (n == "") {
8945 break;
8946 }
8947 viml_add(tokens, n);
8948 }
8949 if (this.reader.p(0) != "/" && this.reader.p(0) != "?") {
8950 break;
8951 }
8952 }
8953 if (this.reader.peekn(1) == "%") {
8954 viml_add(tokens, this.reader.getn(1));
8955 }
8956 else if (this.reader.peekn(1) == "*") {
8957 // && &cpoptions !~ '\*'
8958 viml_add(tokens, this.reader.getn(1));
8959 }
8960 if (this.reader.peekn(1) == ";") {
8961 viml_add(tokens, this.reader.getn(1));
8962 continue;
8963 }
8964 else if (this.reader.peekn(1) == ",") {
8965 viml_add(tokens, this.reader.getn(1));
8966 continue;
8967 }
8968 break;
8969 }
8970 this.ea.range = tokens;
8971}
8972
8973// FIXME:
8974VimLParser.prototype.parse_pattern = function(delimiter) {
8975 var pattern = "";
8976 var endc = "";
8977 var inbracket = 0;
8978 while (TRUE) {
8979 var c = this.reader.getn(1);
8980 if (c == "") {
8981 break;
8982 }
8983 if (c == delimiter && inbracket == 0) {
8984 var endc = c;
8985 break;
8986 }
8987 pattern += c;
8988 if (c == "\\") {
8989 var c = this.reader.peekn(1);
8990 if (c == "") {
8991 throw Err("E682: Invalid search pattern or delimiter", this.reader.getpos());
8992 }
8993 this.reader.getn(1);
8994 pattern += c;
8995 }
8996 else if (c == "[") {
8997 inbracket += 1;
8998 }
8999 else if (c == "]") {
9000 inbracket -= 1;
9001 }
9002 }
9003 return [pattern, endc];
9004}
9005
9006VimLParser.prototype.parse_command = function() {
9007 this.reader.skip_white_and_colon();
9008 this.ea.cmdpos = this.reader.getpos();
9009 if (this.reader.peekn(1) == "" || this.reader.peekn(1) == "\"") {
9010 if (!viml_empty(this.ea.modifiers) || !viml_empty(this.ea.range)) {
9011 this.parse_cmd_modifier_range();
9012 }
9013 return;
9014 }
9015 this.ea.cmd = this.find_command();
9016 if (this.ea.cmd === NIL) {
9017 this.reader.setpos(this.ea.cmdpos);
9018 throw Err(viml_printf("E492: Not an editor command: %s", this.reader.peekline()), this.ea.cmdpos);
9019 }
9020 if (this.reader.peekn(1) == "!" && this.ea.cmd.name != "substitute" && this.ea.cmd.name != "smagic" && this.ea.cmd.name != "snomagic") {
9021 this.reader.getn(1);
9022 this.ea.forceit = TRUE;
9023 }
9024 else {
9025 this.ea.forceit = FALSE;
9026 }
9027 if (!viml_eqregh(this.ea.cmd.flags, "\\<BANG\\>") && this.ea.forceit && !viml_eqregh(this.ea.cmd.flags, "\\<USERCMD\\>")) {
9028 throw Err("E477: No ! allowed", this.ea.cmdpos);
9029 }
9030 if (this.ea.cmd.name != "!") {
9031 this.reader.skip_white();
9032 }
9033 this.ea.argpos = this.reader.getpos();
9034 if (viml_eqregh(this.ea.cmd.flags, "\\<ARGOPT\\>")) {
9035 this.parse_argopt();
9036 }
9037 if (this.ea.cmd.name == "write" || this.ea.cmd.name == "update") {
9038 if (this.reader.p(0) == ">") {
9039 if (this.reader.p(1) != ">") {
9040 throw Err("E494: Use w or w>>", this.ea.cmdpos);
9041 }
9042 this.reader.seek_cur(2);
9043 this.reader.skip_white();
9044 this.ea.append = 1;
9045 }
9046 else if (this.reader.peekn(1) == "!" && this.ea.cmd.name == "write") {
9047 this.reader.getn(1);
9048 this.ea.usefilter = TRUE;
9049 }
9050 }
9051 if (this.ea.cmd.name == "read") {
9052 if (this.ea.forceit) {
9053 this.ea.usefilter = TRUE;
9054 this.ea.forceit = FALSE;
9055 }
9056 else if (this.reader.peekn(1) == "!") {
9057 this.reader.getn(1);
9058 this.ea.usefilter = TRUE;
9059 }
9060 }
9061 if (this.ea.cmd.name == "<" || this.ea.cmd.name == ">") {
9062 this.ea.amount = 1;
9063 while (this.reader.peekn(1) == this.ea.cmd.name) {
9064 this.reader.getn(1);
9065 this.ea.amount += 1;
9066 }
9067 this.reader.skip_white();
9068 }
9069 if (viml_eqregh(this.ea.cmd.flags, "\\<EDITCMD\\>") && !this.ea.usefilter) {
9070 this.parse_argcmd();
9071 }
9072 this._parse_command(this.ea.cmd.parser);
9073}
9074
9075// TODO: self[a:parser]
9076VimLParser.prototype._parse_command = function(parser) {
9077 if (parser == "parse_cmd_append") {
9078 this.parse_cmd_append();
9079 }
9080 else if (parser == "parse_cmd_break") {
9081 this.parse_cmd_break();
9082 }
9083 else if (parser == "parse_cmd_call") {
9084 this.parse_cmd_call();
9085 }
9086 else if (parser == "parse_cmd_catch") {
9087 this.parse_cmd_catch();
9088 }
9089 else if (parser == "parse_cmd_common") {
9090 this.parse_cmd_common();
9091 }
9092 else if (parser == "parse_cmd_continue") {
9093 this.parse_cmd_continue();
9094 }
9095 else if (parser == "parse_cmd_delfunction") {
9096 this.parse_cmd_delfunction();
9097 }
9098 else if (parser == "parse_cmd_echo") {
9099 this.parse_cmd_echo();
9100 }
9101 else if (parser == "parse_cmd_echoerr") {
9102 this.parse_cmd_echoerr();
9103 }
9104 else if (parser == "parse_cmd_echohl") {
9105 this.parse_cmd_echohl();
9106 }
9107 else if (parser == "parse_cmd_echomsg") {
9108 this.parse_cmd_echomsg();
9109 }
9110 else if (parser == "parse_cmd_echon") {
9111 this.parse_cmd_echon();
9112 }
9113 else if (parser == "parse_cmd_else") {
9114 this.parse_cmd_else();
9115 }
9116 else if (parser == "parse_cmd_elseif") {
9117 this.parse_cmd_elseif();
9118 }
9119 else if (parser == "parse_cmd_endfor") {
9120 this.parse_cmd_endfor();
9121 }
9122 else if (parser == "parse_cmd_endfunction") {
9123 this.parse_cmd_endfunction();
9124 }
9125 else if (parser == "parse_cmd_endif") {
9126 this.parse_cmd_endif();
9127 }
9128 else if (parser == "parse_cmd_endtry") {
9129 this.parse_cmd_endtry();
9130 }
9131 else if (parser == "parse_cmd_endwhile") {
9132 this.parse_cmd_endwhile();
9133 }
9134 else if (parser == "parse_cmd_execute") {
9135 this.parse_cmd_execute();
9136 }
9137 else if (parser == "parse_cmd_finally") {
9138 this.parse_cmd_finally();
9139 }
9140 else if (parser == "parse_cmd_finish") {
9141 this.parse_cmd_finish();
9142 }
9143 else if (parser == "parse_cmd_for") {
9144 this.parse_cmd_for();
9145 }
9146 else if (parser == "parse_cmd_function") {
9147 this.parse_cmd_function();
9148 }
9149 else if (parser == "parse_cmd_if") {
9150 this.parse_cmd_if();
9151 }
9152 else if (parser == "parse_cmd_insert") {
9153 this.parse_cmd_insert();
9154 }
9155 else if (parser == "parse_cmd_let") {
9156 this.parse_cmd_let();
9157 }
9158 else if (parser == "parse_cmd_const") {
9159 this.parse_cmd_const();
9160 }
9161 else if (parser == "parse_cmd_loadkeymap") {
9162 this.parse_cmd_loadkeymap();
9163 }
9164 else if (parser == "parse_cmd_lockvar") {
9165 this.parse_cmd_lockvar();
9166 }
9167 else if (parser == "parse_cmd_lua") {
9168 this.parse_cmd_lua();
9169 }
9170 else if (parser == "parse_cmd_modifier_range") {
9171 this.parse_cmd_modifier_range();
9172 }
9173 else if (parser == "parse_cmd_mzscheme") {
9174 this.parse_cmd_mzscheme();
9175 }
9176 else if (parser == "parse_cmd_perl") {
9177 this.parse_cmd_perl();
9178 }
9179 else if (parser == "parse_cmd_python") {
9180 this.parse_cmd_python();
9181 }
9182 else if (parser == "parse_cmd_python3") {
9183 this.parse_cmd_python3();
9184 }
9185 else if (parser == "parse_cmd_return") {
9186 this.parse_cmd_return();
9187 }
9188 else if (parser == "parse_cmd_ruby") {
9189 this.parse_cmd_ruby();
9190 }
9191 else if (parser == "parse_cmd_tcl") {
9192 this.parse_cmd_tcl();
9193 }
9194 else if (parser == "parse_cmd_throw") {
9195 this.parse_cmd_throw();
9196 }
9197 else if (parser == "parse_cmd_eval") {
9198 this.parse_cmd_eval();
9199 }
9200 else if (parser == "parse_cmd_try") {
9201 this.parse_cmd_try();
9202 }
9203 else if (parser == "parse_cmd_unlet") {
9204 this.parse_cmd_unlet();
9205 }
9206 else if (parser == "parse_cmd_unlockvar") {
9207 this.parse_cmd_unlockvar();
9208 }
9209 else if (parser == "parse_cmd_usercmd") {
9210 this.parse_cmd_usercmd();
9211 }
9212 else if (parser == "parse_cmd_while") {
9213 this.parse_cmd_while();
9214 }
9215 else if (parser == "parse_wincmd") {
9216 this.parse_wincmd();
9217 }
9218 else if (parser == "parse_cmd_syntax") {
9219 this.parse_cmd_syntax();
9220 }
9221 else {
9222 throw viml_printf("unknown parser: %s", viml_string(parser));
9223 }
9224}
9225
9226VimLParser.prototype.find_command = function() {
9227 var c = this.reader.peekn(1);
9228 var name = "";
9229 if (c == "k") {
9230 this.reader.getn(1);
9231 var name = "k";
9232 }
9233 else if (c == "s" && viml_eqregh(this.reader.peekn(5), "\\v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])")) {
9234 this.reader.getn(1);
9235 var name = "substitute";
9236 }
9237 else if (viml_eqregh(c, "[@*!=><&~#]")) {
9238 this.reader.getn(1);
9239 var name = c;
9240 }
9241 else if (this.reader.peekn(2) == "py") {
9242 var name = this.reader.read_alnum();
9243 }
9244 else {
9245 var pos = this.reader.tell();
9246 var name = this.reader.read_alpha();
9247 if (name != "del" && viml_eqregh(name, "\\v^d%[elete][lp]$")) {
9248 this.reader.seek_set(pos);
9249 var name = this.reader.getn(viml_len(name) - 1);
9250 }
9251 }
9252 if (name == "") {
9253 return NIL;
9254 }
9255 if (viml_has_key(this.find_command_cache, name)) {
9256 return this.find_command_cache[name];
9257 }
9258 var cmd = NIL;
9259 var __c4 = this.builtin_commands;
9260 for (var __i4 = 0; __i4 < __c4.length; ++__i4) {
9261 var x = __c4[__i4];
9262 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
9263 delete cmd;
9264 var cmd = x;
9265 break;
9266 }
9267 }
9268 if (this.neovim) {
9269 var __c5 = this.neovim_additional_commands;
9270 for (var __i5 = 0; __i5 < __c5.length; ++__i5) {
9271 var x = __c5[__i5];
9272 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
9273 delete cmd;
9274 var cmd = x;
9275 break;
9276 }
9277 }
9278 var __c6 = this.neovim_removed_commands;
9279 for (var __i6 = 0; __i6 < __c6.length; ++__i6) {
9280 var x = __c6[__i6];
9281 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
9282 delete cmd;
9283 var cmd = NIL;
9284 break;
9285 }
9286 }
9287 }
9288 // FIXME: user defined command
9289 if ((cmd === NIL || cmd.name == "Print") && viml_eqregh(name, "^[A-Z]")) {
9290 name += this.reader.read_alnum();
9291 delete cmd;
9292 var cmd = {"name":name, "flags":"USERCMD", "parser":"parse_cmd_usercmd"};
9293 }
9294 this.find_command_cache[name] = cmd;
9295 return cmd;
9296}
9297
9298// TODO:
9299VimLParser.prototype.parse_hashbang = function() {
9300 this.reader.getn(-1);
9301}
9302
9303// TODO:
9304// ++opt=val
9305VimLParser.prototype.parse_argopt = function() {
9306 while (this.reader.p(0) == "+" && this.reader.p(1) == "+") {
9307 var s = this.reader.peekn(20);
9308 if (viml_eqregh(s, "^++bin\\>")) {
9309 this.reader.getn(5);
9310 this.ea.force_bin = 1;
9311 }
9312 else if (viml_eqregh(s, "^++nobin\\>")) {
9313 this.reader.getn(7);
9314 this.ea.force_bin = 2;
9315 }
9316 else if (viml_eqregh(s, "^++edit\\>")) {
9317 this.reader.getn(6);
9318 this.ea.read_edit = 1;
9319 }
9320 else if (viml_eqregh(s, "^++ff=\\(dos\\|unix\\|mac\\)\\>")) {
9321 this.reader.getn(5);
9322 this.ea.force_ff = this.reader.read_alpha();
9323 }
9324 else if (viml_eqregh(s, "^++fileformat=\\(dos\\|unix\\|mac\\)\\>")) {
9325 this.reader.getn(13);
9326 this.ea.force_ff = this.reader.read_alpha();
9327 }
9328 else if (viml_eqregh(s, "^++enc=\\S")) {
9329 this.reader.getn(6);
9330 this.ea.force_enc = this.reader.read_nonwhite();
9331 }
9332 else if (viml_eqregh(s, "^++encoding=\\S")) {
9333 this.reader.getn(11);
9334 this.ea.force_enc = this.reader.read_nonwhite();
9335 }
9336 else if (viml_eqregh(s, "^++bad=\\(keep\\|drop\\|.\\)\\>")) {
9337 this.reader.getn(6);
9338 if (viml_eqregh(s, "^++bad=keep")) {
9339 this.ea.bad_char = this.reader.getn(4);
9340 }
9341 else if (viml_eqregh(s, "^++bad=drop")) {
9342 this.ea.bad_char = this.reader.getn(4);
9343 }
9344 else {
9345 this.ea.bad_char = this.reader.getn(1);
9346 }
9347 }
9348 else if (viml_eqregh(s, "^++")) {
9349 throw Err("E474: Invalid Argument", this.reader.getpos());
9350 }
9351 else {
9352 break;
9353 }
9354 this.reader.skip_white();
9355 }
9356}
9357
9358// TODO:
9359// +command
9360VimLParser.prototype.parse_argcmd = function() {
9361 if (this.reader.peekn(1) == "+") {
9362 this.reader.getn(1);
9363 if (this.reader.peekn(1) == " ") {
9364 this.ea.do_ecmd_cmd = "$";
9365 }
9366 else {
9367 this.ea.do_ecmd_cmd = this.read_cmdarg();
9368 }
9369 }
9370}
9371
9372VimLParser.prototype.read_cmdarg = function() {
9373 var r = "";
9374 while (TRUE) {
9375 var c = this.reader.peekn(1);
9376 if (c == "" || iswhite(c)) {
9377 break;
9378 }
9379 this.reader.getn(1);
9380 if (c == "\\") {
9381 var c = this.reader.getn(1);
9382 }
9383 r += c;
9384 }
9385 return r;
9386}
9387
9388VimLParser.prototype.parse_comment = function() {
9389 var npos = this.reader.getpos();
9390 var c = this.reader.get();
9391 if (c != "\"") {
9392 throw Err(viml_printf("unexpected character: %s", c), npos);
9393 }
9394 var node = Node(NODE_COMMENT);
9395 node.pos = npos;
9396 node.str = this.reader.getn(-1);
9397 this.add_node(node);
9398}
9399
9400VimLParser.prototype.parse_trail = function() {
9401 this.reader.skip_white();
9402 var c = this.reader.peek();
9403 if (c == "<EOF>") {
9404 // pass
9405 }
9406 else if (c == "<EOL>") {
9407 this.reader.get();
9408 }
9409 else if (c == "|") {
9410 this.reader.get();
9411 }
9412 else if (c == "\"") {
9413 this.parse_comment();
9414 this.reader.get();
9415 }
9416 else {
9417 throw Err(viml_printf("E488: Trailing characters: %s", c), this.reader.getpos());
9418 }
9419}
9420
9421// modifier or range only command line
9422VimLParser.prototype.parse_cmd_modifier_range = function() {
9423 var node = Node(NODE_EXCMD);
9424 node.pos = this.ea.cmdpos;
9425 node.ea = this.ea;
9426 node.str = this.reader.getstr(this.ea.linepos, this.reader.getpos());
9427 this.add_node(node);
9428}
9429
9430// TODO:
9431VimLParser.prototype.parse_cmd_common = function() {
9432 var end = this.reader.getpos();
9433 if (viml_eqregh(this.ea.cmd.flags, "\\<TRLBAR\\>") && !this.ea.usefilter) {
9434 var end = this.separate_nextcmd();
9435 }
9436 else if (this.ea.cmd.name == "!" || this.ea.cmd.name == "global" || this.ea.cmd.name == "vglobal" || this.ea.usefilter) {
9437 while (TRUE) {
9438 var end = this.reader.getpos();
9439 if (this.reader.getn(1) == "") {
9440 break;
9441 }
9442 }
9443 }
9444 else {
9445 while (TRUE) {
9446 var end = this.reader.getpos();
9447 if (this.reader.getn(1) == "") {
9448 break;
9449 }
9450 }
9451 }
9452 var node = Node(NODE_EXCMD);
9453 node.pos = this.ea.cmdpos;
9454 node.ea = this.ea;
9455 node.str = this.reader.getstr(this.ea.linepos, end);
9456 this.add_node(node);
9457}
9458
9459VimLParser.prototype.separate_nextcmd = function() {
9460 if (this.ea.cmd.name == "vimgrep" || this.ea.cmd.name == "vimgrepadd" || this.ea.cmd.name == "lvimgrep" || this.ea.cmd.name == "lvimgrepadd") {
9461 this.skip_vimgrep_pat();
9462 }
9463 var pc = "";
9464 var end = this.reader.getpos();
9465 var nospend = end;
9466 while (TRUE) {
9467 var end = this.reader.getpos();
9468 if (!iswhite(pc)) {
9469 var nospend = end;
9470 }
9471 var c = this.reader.peek();
9472 if (c == "<EOF>" || c == "<EOL>") {
9473 break;
9474 }
9475 else if (c == "\x16") {
9476 // <C-V>
9477 this.reader.get();
9478 var end = this.reader.getpos();
9479 var nospend = this.reader.getpos();
9480 var c = this.reader.peek();
9481 if (c == "<EOF>" || c == "<EOL>") {
9482 break;
9483 }
9484 this.reader.get();
9485 }
9486 else if (this.reader.peekn(2) == "`=" && viml_eqregh(this.ea.cmd.flags, "\\<\\(XFILE\\|FILES\\|FILE1\\)\\>")) {
9487 this.reader.getn(2);
9488 this.parse_expr();
9489 var c = this.reader.peekn(1);
9490 if (c != "`") {
9491 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
9492 }
9493 this.reader.getn(1);
9494 }
9495 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 != "@")) {
9496 var has_cpo_bar = FALSE;
9497 // &cpoptions =~ 'b'
9498 if ((!has_cpo_bar || !viml_eqregh(this.ea.cmd.flags, "\\<USECTRLV\\>")) && pc == "\\") {
9499 this.reader.get();
9500 }
9501 else {
9502 break;
9503 }
9504 }
9505 else {
9506 this.reader.get();
9507 }
9508 var pc = c;
9509 }
9510 if (!viml_eqregh(this.ea.cmd.flags, "\\<NOTRLCOM\\>")) {
9511 var end = nospend;
9512 }
9513 return end;
9514}
9515
9516// FIXME
9517VimLParser.prototype.skip_vimgrep_pat = function() {
9518 if (this.reader.peekn(1) == "") {
9519 // pass
9520 }
9521 else if (isidc(this.reader.peekn(1))) {
9522 // :vimgrep pattern fname
9523 this.reader.read_nonwhite();
9524 }
9525 else {
9526 // :vimgrep /pattern/[g][j] fname
9527 var c = this.reader.getn(1);
9528 var __tmp = this.parse_pattern(c);
9529 var _ = __tmp[0];
9530 var endc = __tmp[1];
9531 if (c != endc) {
9532 return;
9533 }
9534 while (this.reader.p(0) == "g" || this.reader.p(0) == "j") {
9535 this.reader.getn(1);
9536 }
9537 }
9538}
9539
9540VimLParser.prototype.parse_cmd_append = function() {
9541 this.reader.setpos(this.ea.linepos);
9542 var cmdline = this.reader.readline();
9543 var lines = [cmdline];
9544 var m = ".";
9545 while (TRUE) {
9546 if (this.reader.peek() == "<EOF>") {
9547 break;
9548 }
9549 var line = this.reader.getn(-1);
9550 viml_add(lines, line);
9551 if (line == m) {
9552 break;
9553 }
9554 this.reader.get();
9555 }
9556 var node = Node(NODE_EXCMD);
9557 node.pos = this.ea.cmdpos;
9558 node.ea = this.ea;
9559 node.str = viml_join(lines, "\n");
9560 this.add_node(node);
9561}
9562
9563VimLParser.prototype.parse_cmd_insert = function() {
9564 this.parse_cmd_append();
9565}
9566
9567VimLParser.prototype.parse_cmd_loadkeymap = function() {
9568 this.reader.setpos(this.ea.linepos);
9569 var cmdline = this.reader.readline();
9570 var lines = [cmdline];
9571 while (TRUE) {
9572 if (this.reader.peek() == "<EOF>") {
9573 break;
9574 }
9575 var line = this.reader.readline();
9576 viml_add(lines, line);
9577 }
9578 var node = Node(NODE_EXCMD);
9579 node.pos = this.ea.cmdpos;
9580 node.ea = this.ea;
9581 node.str = viml_join(lines, "\n");
9582 this.add_node(node);
9583}
9584
9585VimLParser.prototype.parse_cmd_lua = function() {
9586 var lines = [];
9587 this.reader.skip_white();
9588 if (this.reader.peekn(2) == "<<") {
9589 this.reader.getn(2);
9590 this.reader.skip_white();
9591 var m = this.reader.readline();
9592 if (m == "") {
9593 var m = ".";
9594 }
9595 this.reader.setpos(this.ea.linepos);
9596 var cmdline = this.reader.getn(-1);
9597 var lines = [cmdline];
9598 this.reader.get();
9599 while (TRUE) {
9600 if (this.reader.peek() == "<EOF>") {
9601 break;
9602 }
9603 var line = this.reader.getn(-1);
9604 viml_add(lines, line);
9605 if (line == m) {
9606 break;
9607 }
9608 this.reader.get();
9609 }
9610 }
9611 else {
9612 this.reader.setpos(this.ea.linepos);
9613 var cmdline = this.reader.getn(-1);
9614 var lines = [cmdline];
9615 }
9616 var node = Node(NODE_EXCMD);
9617 node.pos = this.ea.cmdpos;
9618 node.ea = this.ea;
9619 node.str = viml_join(lines, "\n");
9620 this.add_node(node);
9621}
9622
9623VimLParser.prototype.parse_cmd_mzscheme = function() {
9624 this.parse_cmd_lua();
9625}
9626
9627VimLParser.prototype.parse_cmd_perl = function() {
9628 this.parse_cmd_lua();
9629}
9630
9631VimLParser.prototype.parse_cmd_python = function() {
9632 this.parse_cmd_lua();
9633}
9634
9635VimLParser.prototype.parse_cmd_python3 = function() {
9636 this.parse_cmd_lua();
9637}
9638
9639VimLParser.prototype.parse_cmd_ruby = function() {
9640 this.parse_cmd_lua();
9641}
9642
9643VimLParser.prototype.parse_cmd_tcl = function() {
9644 this.parse_cmd_lua();
9645}
9646
9647VimLParser.prototype.parse_cmd_finish = function() {
9648 this.parse_cmd_common();
9649 if (this.context[0].type == NODE_TOPLEVEL) {
9650 this.reader.seek_end(0);
9651 }
9652}
9653
9654// FIXME
9655VimLParser.prototype.parse_cmd_usercmd = function() {
9656 this.parse_cmd_common();
9657}
9658
9659VimLParser.prototype.parse_cmd_function = function() {
9660 var pos = this.reader.tell();
9661 this.reader.skip_white();
9662 // :function
9663 if (this.ends_excmds(this.reader.peek())) {
9664 this.reader.seek_set(pos);
9665 this.parse_cmd_common();
9666 return;
9667 }
9668 // :function /pattern
9669 if (this.reader.peekn(1) == "/") {
9670 this.reader.seek_set(pos);
9671 this.parse_cmd_common();
9672 return;
9673 }
9674 var left = this.parse_lvalue_func();
9675 this.reader.skip_white();
9676 if (left.type == NODE_IDENTIFIER) {
9677 var s = left.value;
9678 var ss = viml_split(s, "\\zs");
9679 if (ss[0] != "<" && ss[0] != "_" && !isupper(ss[0]) && viml_stridx(s, ":") == -1 && viml_stridx(s, "#") == -1) {
9680 throw Err(viml_printf("E128: Function name must start with a capital or contain a colon: %s", s), left.pos);
9681 }
9682 }
9683 // :function {name}
9684 if (this.reader.peekn(1) != "(") {
9685 this.reader.seek_set(pos);
9686 this.parse_cmd_common();
9687 return;
9688 }
9689 // :function[!] {name}([arguments]) [range] [abort] [dict] [closure]
9690 var node = Node(NODE_FUNCTION);
9691 node.pos = this.ea.cmdpos;
9692 node.body = [];
9693 node.ea = this.ea;
9694 node.left = left;
9695 node.rlist = [];
9696 node.default_args = [];
9697 node.attr = {"range":0, "abort":0, "dict":0, "closure":0};
9698 node.endfunction = NIL;
9699 this.reader.getn(1);
9700 var tokenizer = new ExprTokenizer(this.reader);
9701 if (tokenizer.peek().type == TOKEN_PCLOSE) {
9702 tokenizer.get();
9703 }
9704 else {
9705 var named = {};
9706 while (TRUE) {
9707 var varnode = Node(NODE_IDENTIFIER);
9708 var token = tokenizer.get();
9709 if (token.type == TOKEN_IDENTIFIER) {
9710 if (!isargname(token.value) || token.value == "firstline" || token.value == "lastline") {
9711 throw Err(viml_printf("E125: Illegal argument: %s", token.value), token.pos);
9712 }
9713 else if (viml_has_key(named, token.value)) {
9714 throw Err(viml_printf("E853: Duplicate argument name: %s", token.value), token.pos);
9715 }
9716 named[token.value] = 1;
9717 varnode.pos = token.pos;
9718 varnode.value = token.value;
9719 viml_add(node.rlist, varnode);
9720 if (tokenizer.peek().type == TOKEN_EQ) {
9721 tokenizer.get();
9722 viml_add(node.default_args, this.parse_expr());
9723 }
9724 else if (viml_len(node.default_args) > 0) {
9725 throw Err("E989: Non-default argument follows default argument", varnode.pos);
9726 }
9727 // XXX: Vim doesn't skip white space before comma. F(a ,b) => E475
9728 if (iswhite(this.reader.p(0)) && tokenizer.peek().type == TOKEN_COMMA) {
9729 throw Err("E475: Invalid argument: White space is not allowed before comma", this.reader.getpos());
9730 }
9731 var token = tokenizer.get();
9732 if (token.type == TOKEN_COMMA) {
9733 // XXX: Vim allows last comma. F(a, b, ) => OK
9734 if (tokenizer.peek().type == TOKEN_PCLOSE) {
9735 tokenizer.get();
9736 break;
9737 }
9738 }
9739 else if (token.type == TOKEN_PCLOSE) {
9740 break;
9741 }
9742 else {
9743 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
9744 }
9745 }
9746 else if (token.type == TOKEN_DOTDOTDOT) {
9747 varnode.pos = token.pos;
9748 varnode.value = token.value;
9749 viml_add(node.rlist, varnode);
9750 var token = tokenizer.get();
9751 if (token.type == TOKEN_PCLOSE) {
9752 break;
9753 }
9754 else {
9755 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
9756 }
9757 }
9758 else {
9759 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
9760 }
9761 }
9762 }
9763 while (TRUE) {
9764 this.reader.skip_white();
9765 var epos = this.reader.getpos();
9766 var key = this.reader.read_alpha();
9767 if (key == "") {
9768 break;
9769 }
9770 else if (key == "range") {
9771 node.attr.range = TRUE;
9772 }
9773 else if (key == "abort") {
9774 node.attr.abort = TRUE;
9775 }
9776 else if (key == "dict") {
9777 node.attr.dict = TRUE;
9778 }
9779 else if (key == "closure") {
9780 node.attr.closure = TRUE;
9781 }
9782 else {
9783 throw Err(viml_printf("unexpected token: %s", key), epos);
9784 }
9785 }
9786 this.add_node(node);
9787 this.push_context(node);
9788}
9789
9790VimLParser.prototype.parse_cmd_endfunction = function() {
9791 this.check_missing_endif("ENDFUNCTION", this.ea.cmdpos);
9792 this.check_missing_endtry("ENDFUNCTION", this.ea.cmdpos);
9793 this.check_missing_endwhile("ENDFUNCTION", this.ea.cmdpos);
9794 this.check_missing_endfor("ENDFUNCTION", this.ea.cmdpos);
9795 if (this.context[0].type != NODE_FUNCTION) {
9796 throw Err("E193: :endfunction not inside a function", this.ea.cmdpos);
9797 }
9798 this.reader.getn(-1);
9799 var node = Node(NODE_ENDFUNCTION);
9800 node.pos = this.ea.cmdpos;
9801 node.ea = this.ea;
9802 this.context[0].endfunction = node;
9803 this.pop_context();
9804}
9805
9806VimLParser.prototype.parse_cmd_delfunction = function() {
9807 var node = Node(NODE_DELFUNCTION);
9808 node.pos = this.ea.cmdpos;
9809 node.ea = this.ea;
9810 node.left = this.parse_lvalue_func();
9811 this.add_node(node);
9812}
9813
9814VimLParser.prototype.parse_cmd_return = function() {
9815 if (this.find_context(NODE_FUNCTION) == -1) {
9816 throw Err("E133: :return not inside a function", this.ea.cmdpos);
9817 }
9818 var node = Node(NODE_RETURN);
9819 node.pos = this.ea.cmdpos;
9820 node.ea = this.ea;
9821 node.left = NIL;
9822 this.reader.skip_white();
9823 var c = this.reader.peek();
9824 if (c == "\"" || !this.ends_excmds(c)) {
9825 node.left = this.parse_expr();
9826 }
9827 this.add_node(node);
9828}
9829
9830VimLParser.prototype.parse_cmd_call = function() {
9831 var node = Node(NODE_EXCALL);
9832 node.pos = this.ea.cmdpos;
9833 node.ea = this.ea;
9834 this.reader.skip_white();
9835 var c = this.reader.peek();
9836 if (this.ends_excmds(c)) {
9837 throw Err("E471: Argument required", this.reader.getpos());
9838 }
9839 node.left = this.parse_expr();
9840 if (node.left.type != NODE_CALL) {
9841 throw Err("Not a function call", node.left.pos);
9842 }
9843 this.add_node(node);
9844}
9845
9846VimLParser.prototype.parse_heredoc = function() {
9847 var node = Node(NODE_HEREDOC);
9848 node.pos = this.ea.cmdpos;
9849 node.op = "";
9850 node.rlist = [];
9851 node.body = [];
9852 while (TRUE) {
9853 this.reader.skip_white();
9854 var key = this.reader.read_word();
9855 if (key == "") {
9856 break;
9857 }
9858 if (!islower(key[0])) {
9859 node.op = key;
9860 break;
9861 }
9862 else {
9863 viml_add(node.rlist, key);
9864 }
9865 }
9866 if (node.op == "") {
9867 throw Err("E172: Missing marker", this.reader.getpos());
9868 }
9869 this.parse_trail();
9870 while (TRUE) {
9871 if (this.reader.peek() == "<EOF>") {
9872 break;
9873 }
9874 var line = this.reader.getn(-1);
9875 if (line == node.op) {
9876 return node;
9877 }
9878 viml_add(node.body, line);
9879 this.reader.get();
9880 }
9881 throw Err(viml_printf("E990: Missing end marker '%s'", node.op), this.reader.getpos());
9882}
9883
9884VimLParser.prototype.parse_cmd_let = function() {
9885 var pos = this.reader.tell();
9886 this.reader.skip_white();
9887 // :let
9888 if (this.ends_excmds(this.reader.peek())) {
9889 this.reader.seek_set(pos);
9890 this.parse_cmd_common();
9891 return;
9892 }
9893 var lhs = this.parse_letlhs();
9894 this.reader.skip_white();
9895 var s1 = this.reader.peekn(1);
9896 var s2 = this.reader.peekn(2);
9897 // TODO check scriptversion?
9898 if (s2 == "..") {
9899 var s2 = this.reader.peekn(3);
9900 }
9901 else if (s2 == "=<") {
9902 var s2 = this.reader.peekn(3);
9903 }
9904 // :let {var-name} ..
9905 if (this.ends_excmds(s1) || s2 != "+=" && s2 != "-=" && s2 != ".=" && s2 != "..=" && s2 != "*=" && s2 != "/=" && s2 != "%=" && s2 != "=<<" && s1 != "=") {
9906 this.reader.seek_set(pos);
9907 this.parse_cmd_common();
9908 return;
9909 }
9910 // :let left op right
9911 var node = Node(NODE_LET);
9912 node.pos = this.ea.cmdpos;
9913 node.ea = this.ea;
9914 node.op = "";
9915 node.left = lhs.left;
9916 node.list = lhs.list;
9917 node.rest = lhs.rest;
9918 node.right = NIL;
9919 if (s2 == "+=" || s2 == "-=" || s2 == ".=" || s2 == "..=" || s2 == "*=" || s2 == "/=" || s2 == "%=") {
9920 this.reader.getn(viml_len(s2));
9921 node.op = s2;
9922 }
9923 else if (s2 == "=<<") {
9924 this.reader.getn(viml_len(s2));
9925 this.reader.skip_white();
9926 node.op = s2;
9927 node.right = this.parse_heredoc();
9928 this.add_node(node);
9929 return;
9930 }
9931 else if (s1 == "=") {
9932 this.reader.getn(1);
9933 node.op = s1;
9934 }
9935 else {
9936 throw "NOT REACHED";
9937 }
9938 node.right = this.parse_expr();
9939 this.add_node(node);
9940}
9941
9942VimLParser.prototype.parse_cmd_const = function() {
9943 var pos = this.reader.tell();
9944 this.reader.skip_white();
9945 // :const
9946 if (this.ends_excmds(this.reader.peek())) {
9947 this.reader.seek_set(pos);
9948 this.parse_cmd_common();
9949 return;
9950 }
9951 var lhs = this.parse_constlhs();
9952 this.reader.skip_white();
9953 var s1 = this.reader.peekn(1);
9954 // :const {var-name}
9955 if (this.ends_excmds(s1) || s1 != "=") {
9956 this.reader.seek_set(pos);
9957 this.parse_cmd_common();
9958 return;
9959 }
9960 // :const left op right
9961 var node = Node(NODE_CONST);
9962 node.pos = this.ea.cmdpos;
9963 node.ea = this.ea;
9964 this.reader.getn(1);
9965 node.op = s1;
9966 node.left = lhs.left;
9967 node.list = lhs.list;
9968 node.rest = lhs.rest;
9969 node.right = this.parse_expr();
9970 this.add_node(node);
9971}
9972
9973VimLParser.prototype.parse_cmd_unlet = function() {
9974 var node = Node(NODE_UNLET);
9975 node.pos = this.ea.cmdpos;
9976 node.ea = this.ea;
9977 node.list = this.parse_lvaluelist();
9978 this.add_node(node);
9979}
9980
9981VimLParser.prototype.parse_cmd_lockvar = function() {
9982 var node = Node(NODE_LOCKVAR);
9983 node.pos = this.ea.cmdpos;
9984 node.ea = this.ea;
9985 node.depth = NIL;
9986 node.list = [];
9987 this.reader.skip_white();
9988 if (isdigit(this.reader.peekn(1))) {
9989 node.depth = viml_str2nr(this.reader.read_digit(), 10);
9990 }
9991 node.list = this.parse_lvaluelist();
9992 this.add_node(node);
9993}
9994
9995VimLParser.prototype.parse_cmd_unlockvar = function() {
9996 var node = Node(NODE_UNLOCKVAR);
9997 node.pos = this.ea.cmdpos;
9998 node.ea = this.ea;
9999 node.depth = NIL;
10000 node.list = [];
10001 this.reader.skip_white();
10002 if (isdigit(this.reader.peekn(1))) {
10003 node.depth = viml_str2nr(this.reader.read_digit(), 10);
10004 }
10005 node.list = this.parse_lvaluelist();
10006 this.add_node(node);
10007}
10008
10009VimLParser.prototype.parse_cmd_if = function() {
10010 var node = Node(NODE_IF);
10011 node.pos = this.ea.cmdpos;
10012 node.body = [];
10013 node.ea = this.ea;
10014 node.cond = this.parse_expr();
10015 node.elseif = [];
10016 node._else = NIL;
10017 node.endif = NIL;
10018 this.add_node(node);
10019 this.push_context(node);
10020}
10021
10022VimLParser.prototype.parse_cmd_elseif = function() {
10023 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF) {
10024 throw Err("E582: :elseif without :if", this.ea.cmdpos);
10025 }
10026 if (this.context[0].type != NODE_IF) {
10027 this.pop_context();
10028 }
10029 var node = Node(NODE_ELSEIF);
10030 node.pos = this.ea.cmdpos;
10031 node.body = [];
10032 node.ea = this.ea;
10033 node.cond = this.parse_expr();
10034 viml_add(this.context[0].elseif, node);
10035 this.push_context(node);
10036}
10037
10038VimLParser.prototype.parse_cmd_else = function() {
10039 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF) {
10040 throw Err("E581: :else without :if", this.ea.cmdpos);
10041 }
10042 if (this.context[0].type != NODE_IF) {
10043 this.pop_context();
10044 }
10045 var node = Node(NODE_ELSE);
10046 node.pos = this.ea.cmdpos;
10047 node.body = [];
10048 node.ea = this.ea;
10049 this.context[0]._else = node;
10050 this.push_context(node);
10051}
10052
10053VimLParser.prototype.parse_cmd_endif = function() {
10054 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF && this.context[0].type != NODE_ELSE) {
10055 throw Err("E580: :endif without :if", this.ea.cmdpos);
10056 }
10057 if (this.context[0].type != NODE_IF) {
10058 this.pop_context();
10059 }
10060 var node = Node(NODE_ENDIF);
10061 node.pos = this.ea.cmdpos;
10062 node.ea = this.ea;
10063 this.context[0].endif = node;
10064 this.pop_context();
10065}
10066
10067VimLParser.prototype.parse_cmd_while = function() {
10068 var node = Node(NODE_WHILE);
10069 node.pos = this.ea.cmdpos;
10070 node.body = [];
10071 node.ea = this.ea;
10072 node.cond = this.parse_expr();
10073 node.endwhile = NIL;
10074 this.add_node(node);
10075 this.push_context(node);
10076}
10077
10078VimLParser.prototype.parse_cmd_endwhile = function() {
10079 if (this.context[0].type != NODE_WHILE) {
10080 throw Err("E588: :endwhile without :while", this.ea.cmdpos);
10081 }
10082 var node = Node(NODE_ENDWHILE);
10083 node.pos = this.ea.cmdpos;
10084 node.ea = this.ea;
10085 this.context[0].endwhile = node;
10086 this.pop_context();
10087}
10088
10089VimLParser.prototype.parse_cmd_for = function() {
10090 var node = Node(NODE_FOR);
10091 node.pos = this.ea.cmdpos;
10092 node.body = [];
10093 node.ea = this.ea;
10094 node.left = NIL;
10095 node.right = NIL;
10096 node.endfor = NIL;
10097 var lhs = this.parse_letlhs();
10098 node.left = lhs.left;
10099 node.list = lhs.list;
10100 node.rest = lhs.rest;
10101 this.reader.skip_white();
10102 var epos = this.reader.getpos();
10103 if (this.reader.read_alpha() != "in") {
10104 throw Err("Missing \"in\" after :for", epos);
10105 }
10106 node.right = this.parse_expr();
10107 this.add_node(node);
10108 this.push_context(node);
10109}
10110
10111VimLParser.prototype.parse_cmd_endfor = function() {
10112 if (this.context[0].type != NODE_FOR) {
10113 throw Err("E588: :endfor without :for", this.ea.cmdpos);
10114 }
10115 var node = Node(NODE_ENDFOR);
10116 node.pos = this.ea.cmdpos;
10117 node.ea = this.ea;
10118 this.context[0].endfor = node;
10119 this.pop_context();
10120}
10121
10122VimLParser.prototype.parse_cmd_continue = function() {
10123 if (this.find_context(NODE_WHILE) == -1 && this.find_context(NODE_FOR) == -1) {
10124 throw Err("E586: :continue without :while or :for", this.ea.cmdpos);
10125 }
10126 var node = Node(NODE_CONTINUE);
10127 node.pos = this.ea.cmdpos;
10128 node.ea = this.ea;
10129 this.add_node(node);
10130}
10131
10132VimLParser.prototype.parse_cmd_break = function() {
10133 if (this.find_context(NODE_WHILE) == -1 && this.find_context(NODE_FOR) == -1) {
10134 throw Err("E587: :break without :while or :for", this.ea.cmdpos);
10135 }
10136 var node = Node(NODE_BREAK);
10137 node.pos = this.ea.cmdpos;
10138 node.ea = this.ea;
10139 this.add_node(node);
10140}
10141
10142VimLParser.prototype.parse_cmd_try = function() {
10143 var node = Node(NODE_TRY);
10144 node.pos = this.ea.cmdpos;
10145 node.body = [];
10146 node.ea = this.ea;
10147 node.catch = [];
10148 node._finally = NIL;
10149 node.endtry = NIL;
10150 this.add_node(node);
10151 this.push_context(node);
10152}
10153
10154VimLParser.prototype.parse_cmd_catch = function() {
10155 if (this.context[0].type == NODE_FINALLY) {
10156 throw Err("E604: :catch after :finally", this.ea.cmdpos);
10157 }
10158 else if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH) {
10159 throw Err("E603: :catch without :try", this.ea.cmdpos);
10160 }
10161 if (this.context[0].type != NODE_TRY) {
10162 this.pop_context();
10163 }
10164 var node = Node(NODE_CATCH);
10165 node.pos = this.ea.cmdpos;
10166 node.body = [];
10167 node.ea = this.ea;
10168 node.pattern = NIL;
10169 this.reader.skip_white();
10170 if (!this.ends_excmds(this.reader.peek())) {
10171 var __tmp = this.parse_pattern(this.reader.get());
10172 node.pattern = __tmp[0];
10173 var _ = __tmp[1];
10174 }
10175 viml_add(this.context[0].catch, node);
10176 this.push_context(node);
10177}
10178
10179VimLParser.prototype.parse_cmd_finally = function() {
10180 if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH) {
10181 throw Err("E606: :finally without :try", this.ea.cmdpos);
10182 }
10183 if (this.context[0].type != NODE_TRY) {
10184 this.pop_context();
10185 }
10186 var node = Node(NODE_FINALLY);
10187 node.pos = this.ea.cmdpos;
10188 node.body = [];
10189 node.ea = this.ea;
10190 this.context[0]._finally = node;
10191 this.push_context(node);
10192}
10193
10194VimLParser.prototype.parse_cmd_endtry = function() {
10195 if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH && this.context[0].type != NODE_FINALLY) {
10196 throw Err("E602: :endtry without :try", this.ea.cmdpos);
10197 }
10198 if (this.context[0].type != NODE_TRY) {
10199 this.pop_context();
10200 }
10201 var node = Node(NODE_ENDTRY);
10202 node.pos = this.ea.cmdpos;
10203 node.ea = this.ea;
10204 this.context[0].endtry = node;
10205 this.pop_context();
10206}
10207
10208VimLParser.prototype.parse_cmd_throw = function() {
10209 var node = Node(NODE_THROW);
10210 node.pos = this.ea.cmdpos;
10211 node.ea = this.ea;
10212 node.left = this.parse_expr();
10213 this.add_node(node);
10214}
10215
10216VimLParser.prototype.parse_cmd_eval = function() {
10217 var node = Node(NODE_EVAL);
10218 node.pos = this.ea.cmdpos;
10219 node.ea = this.ea;
10220 node.left = this.parse_expr();
10221 this.add_node(node);
10222}
10223
10224VimLParser.prototype.parse_cmd_echo = function() {
10225 var node = Node(NODE_ECHO);
10226 node.pos = this.ea.cmdpos;
10227 node.ea = this.ea;
10228 node.list = this.parse_exprlist();
10229 this.add_node(node);
10230}
10231
10232VimLParser.prototype.parse_cmd_echon = function() {
10233 var node = Node(NODE_ECHON);
10234 node.pos = this.ea.cmdpos;
10235 node.ea = this.ea;
10236 node.list = this.parse_exprlist();
10237 this.add_node(node);
10238}
10239
10240VimLParser.prototype.parse_cmd_echohl = function() {
10241 var node = Node(NODE_ECHOHL);
10242 node.pos = this.ea.cmdpos;
10243 node.ea = this.ea;
10244 node.str = "";
10245 while (!this.ends_excmds(this.reader.peek())) {
10246 node.str += this.reader.get();
10247 }
10248 this.add_node(node);
10249}
10250
10251VimLParser.prototype.parse_cmd_echomsg = function() {
10252 var node = Node(NODE_ECHOMSG);
10253 node.pos = this.ea.cmdpos;
10254 node.ea = this.ea;
10255 node.list = this.parse_exprlist();
10256 this.add_node(node);
10257}
10258
10259VimLParser.prototype.parse_cmd_echoerr = function() {
10260 var node = Node(NODE_ECHOERR);
10261 node.pos = this.ea.cmdpos;
10262 node.ea = this.ea;
10263 node.list = this.parse_exprlist();
10264 this.add_node(node);
10265}
10266
10267VimLParser.prototype.parse_cmd_execute = function() {
10268 var node = Node(NODE_EXECUTE);
10269 node.pos = this.ea.cmdpos;
10270 node.ea = this.ea;
10271 node.list = this.parse_exprlist();
10272 this.add_node(node);
10273}
10274
10275VimLParser.prototype.parse_expr = function() {
10276 return new ExprParser(this.reader).parse();
10277}
10278
10279VimLParser.prototype.parse_exprlist = function() {
10280 var list = [];
10281 while (TRUE) {
10282 this.reader.skip_white();
10283 var c = this.reader.peek();
10284 if (c != "\"" && this.ends_excmds(c)) {
10285 break;
10286 }
10287 var node = this.parse_expr();
10288 viml_add(list, node);
10289 }
10290 return list;
10291}
10292
10293VimLParser.prototype.parse_lvalue_func = function() {
10294 var p = new LvalueParser(this.reader);
10295 var node = p.parse();
10296 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) {
10297 return node;
10298 }
10299 throw Err("Invalid Expression", node.pos);
10300}
10301
10302// FIXME:
10303VimLParser.prototype.parse_lvalue = function() {
10304 var p = new LvalueParser(this.reader);
10305 var node = p.parse();
10306 if (node.type == NODE_IDENTIFIER) {
10307 if (!isvarname(node.value)) {
10308 throw Err(viml_printf("E461: Illegal variable name: %s", node.value), node.pos);
10309 }
10310 }
10311 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) {
10312 return node;
10313 }
10314 throw Err("Invalid Expression", node.pos);
10315}
10316
10317// TODO: merge with s:VimLParser.parse_lvalue()
10318VimLParser.prototype.parse_constlvalue = function() {
10319 var p = new LvalueParser(this.reader);
10320 var node = p.parse();
10321 if (node.type == NODE_IDENTIFIER) {
10322 if (!isvarname(node.value)) {
10323 throw Err(viml_printf("E461: Illegal variable name: %s", node.value), node.pos);
10324 }
10325 }
10326 if (node.type == NODE_IDENTIFIER || node.type == NODE_CURLYNAME) {
10327 return node;
10328 }
10329 else if (node.type == NODE_SUBSCRIPT || node.type == NODE_SLICE || node.type == NODE_DOT) {
10330 throw Err("E996: Cannot lock a list or dict", node.pos);
10331 }
10332 else if (node.type == NODE_OPTION) {
10333 throw Err("E996: Cannot lock an option", node.pos);
10334 }
10335 else if (node.type == NODE_ENV) {
10336 throw Err("E996: Cannot lock an environment variable", node.pos);
10337 }
10338 else if (node.type == NODE_REG) {
10339 throw Err("E996: Cannot lock a register", node.pos);
10340 }
10341 throw Err("Invalid Expression", node.pos);
10342}
10343
10344VimLParser.prototype.parse_lvaluelist = function() {
10345 var list = [];
10346 var node = this.parse_expr();
10347 viml_add(list, node);
10348 while (TRUE) {
10349 this.reader.skip_white();
10350 if (this.ends_excmds(this.reader.peek())) {
10351 break;
10352 }
10353 var node = this.parse_lvalue();
10354 viml_add(list, node);
10355 }
10356 return list;
10357}
10358
10359// FIXME:
10360VimLParser.prototype.parse_letlhs = function() {
10361 var lhs = {"left":NIL, "list":NIL, "rest":NIL};
10362 var tokenizer = new ExprTokenizer(this.reader);
10363 if (tokenizer.peek().type == TOKEN_SQOPEN) {
10364 tokenizer.get();
10365 lhs.list = [];
10366 while (TRUE) {
10367 var node = this.parse_lvalue();
10368 viml_add(lhs.list, node);
10369 var token = tokenizer.get();
10370 if (token.type == TOKEN_SQCLOSE) {
10371 break;
10372 }
10373 else if (token.type == TOKEN_COMMA) {
10374 continue;
10375 }
10376 else if (token.type == TOKEN_SEMICOLON) {
10377 var node = this.parse_lvalue();
10378 lhs.rest = node;
10379 var token = tokenizer.get();
10380 if (token.type == TOKEN_SQCLOSE) {
10381 break;
10382 }
10383 else {
10384 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
10385 }
10386 }
10387 else {
10388 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
10389 }
10390 }
10391 }
10392 else {
10393 lhs.left = this.parse_lvalue();
10394 }
10395 return lhs;
10396}
10397
10398// TODO: merge with s:VimLParser.parse_letlhs() ?
10399VimLParser.prototype.parse_constlhs = function() {
10400 var lhs = {"left":NIL, "list":NIL, "rest":NIL};
10401 var tokenizer = new ExprTokenizer(this.reader);
10402 if (tokenizer.peek().type == TOKEN_SQOPEN) {
10403 tokenizer.get();
10404 lhs.list = [];
10405 while (TRUE) {
10406 var node = this.parse_lvalue();
10407 viml_add(lhs.list, node);
10408 var token = tokenizer.get();
10409 if (token.type == TOKEN_SQCLOSE) {
10410 break;
10411 }
10412 else if (token.type == TOKEN_COMMA) {
10413 continue;
10414 }
10415 else if (token.type == TOKEN_SEMICOLON) {
10416 var node = this.parse_lvalue();
10417 lhs.rest = node;
10418 var token = tokenizer.get();
10419 if (token.type == TOKEN_SQCLOSE) {
10420 break;
10421 }
10422 else {
10423 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
10424 }
10425 }
10426 else {
10427 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
10428 }
10429 }
10430 }
10431 else {
10432 lhs.left = this.parse_constlvalue();
10433 }
10434 return lhs;
10435}
10436
10437VimLParser.prototype.ends_excmds = function(c) {
10438 return c == "" || c == "|" || c == "\"" || c == "<EOF>" || c == "<EOL>";
10439}
10440
10441// FIXME: validate argument
10442VimLParser.prototype.parse_wincmd = function() {
10443 var c = this.reader.getn(1);
10444 if (c == "") {
10445 throw Err("E471: Argument required", this.reader.getpos());
10446 }
10447 else if (c == "g" || c == "\x07") {
10448 // <C-G>
10449 var c2 = this.reader.getn(1);
10450 if (c2 == "" || iswhite(c2)) {
10451 throw Err("E474: Invalid Argument", this.reader.getpos());
10452 }
10453 }
10454 var end = this.reader.getpos();
10455 this.reader.skip_white();
10456 if (!this.ends_excmds(this.reader.peek())) {
10457 throw Err("E474: Invalid Argument", this.reader.getpos());
10458 }
10459 var node = Node(NODE_EXCMD);
10460 node.pos = this.ea.cmdpos;
10461 node.ea = this.ea;
10462 node.str = this.reader.getstr(this.ea.linepos, end);
10463 this.add_node(node);
10464}
10465
10466// FIXME: validate argument
10467VimLParser.prototype.parse_cmd_syntax = function() {
10468 var end = this.reader.getpos();
10469 while (TRUE) {
10470 var end = this.reader.getpos();
10471 var c = this.reader.peek();
10472 if (c == "/" || c == "'" || c == "\"") {
10473 this.reader.getn(1);
10474 this.parse_pattern(c);
10475 }
10476 else if (c == "=") {
10477 this.reader.getn(1);
10478 this.parse_pattern(" ");
10479 }
10480 else if (this.ends_excmds(c)) {
10481 break;
10482 }
10483 this.reader.getn(1);
10484 }
10485 var node = Node(NODE_EXCMD);
10486 node.pos = this.ea.cmdpos;
10487 node.ea = this.ea;
10488 node.str = this.reader.getstr(this.ea.linepos, end);
10489 this.add_node(node);
10490}
10491
10492VimLParser.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"}];
10493VimLParser.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"}];
10494// To find new builtin_commands, run the below script.
10495// $ scripts/update_builtin_commands.sh /path/to/vim/src/ex_cmds.h
10496VimLParser.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"}];
10497// To find new builtin_functions, run the below script.
10498// $ scripts/update_builtin_functions.sh /path/to/vim/src/evalfunc.c
10499VimLParser.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"}];
10500function ExprTokenizer() { this.__init__.apply(this, arguments); }
10501ExprTokenizer.prototype.__init__ = function(reader) {
10502 this.reader = reader;
10503 this.cache = {};
10504}
10505
10506ExprTokenizer.prototype.token = function(type, value, pos) {
10507 return {"type":type, "value":value, "pos":pos};
10508}
10509
10510ExprTokenizer.prototype.peek = function() {
10511 var pos = this.reader.tell();
10512 var r = this.get();
10513 this.reader.seek_set(pos);
10514 return r;
10515}
10516
10517ExprTokenizer.prototype.get = function() {
10518 // FIXME: remove dirty hack
10519 if (viml_has_key(this.cache, this.reader.tell())) {
10520 var x = this.cache[this.reader.tell()];
10521 this.reader.seek_set(x[0]);
10522 return x[1];
10523 }
10524 var pos = this.reader.tell();
10525 this.reader.skip_white();
10526 var r = this.get2();
10527 this.cache[pos] = [this.reader.tell(), r];
10528 return r;
10529}
10530
10531ExprTokenizer.prototype.get2 = function() {
10532 var r = this.reader;
10533 var pos = r.getpos();
10534 var c = r.peek();
10535 if (c == "<EOF>") {
10536 return this.token(TOKEN_EOF, c, pos);
10537 }
10538 else if (c == "<EOL>") {
10539 r.seek_cur(1);
10540 return this.token(TOKEN_EOL, c, pos);
10541 }
10542 else if (iswhite(c)) {
10543 var s = r.read_white();
10544 return this.token(TOKEN_SPACE, s, pos);
10545 }
10546 else if (c == "0" && (r.p(1) == "X" || r.p(1) == "x") && isxdigit(r.p(2))) {
10547 var s = r.getn(3);
10548 s += r.read_xdigit();
10549 return this.token(TOKEN_NUMBER, s, pos);
10550 }
10551 else if (c == "0" && (r.p(1) == "B" || r.p(1) == "b") && (r.p(2) == "0" || r.p(2) == "1")) {
10552 var s = r.getn(3);
10553 s += r.read_bdigit();
10554 return this.token(TOKEN_NUMBER, s, pos);
10555 }
10556 else if (c == "0" && (r.p(1) == "Z" || r.p(1) == "z") && r.p(2) != ".") {
10557 var s = r.getn(2);
10558 s += r.read_blob();
10559 return this.token(TOKEN_BLOB, s, pos);
10560 }
10561 else if (isdigit(c)) {
10562 var s = r.read_digit();
10563 if (r.p(0) == "." && isdigit(r.p(1))) {
10564 s += r.getn(1);
10565 s += r.read_digit();
10566 if ((r.p(0) == "E" || r.p(0) == "e") && (isdigit(r.p(1)) || (r.p(1) == "-" || r.p(1) == "+") && isdigit(r.p(2)))) {
10567 s += r.getn(2);
10568 s += r.read_digit();
10569 }
10570 }
10571 return this.token(TOKEN_NUMBER, s, pos);
10572 }
10573 else if (c == "i" && r.p(1) == "s" && !isidc(r.p(2))) {
10574 if (r.p(2) == "?") {
10575 r.seek_cur(3);
10576 return this.token(TOKEN_ISCI, "is?", pos);
10577 }
10578 else if (r.p(2) == "#") {
10579 r.seek_cur(3);
10580 return this.token(TOKEN_ISCS, "is#", pos);
10581 }
10582 else {
10583 r.seek_cur(2);
10584 return this.token(TOKEN_IS, "is", pos);
10585 }
10586 }
10587 else if (c == "i" && r.p(1) == "s" && r.p(2) == "n" && r.p(3) == "o" && r.p(4) == "t" && !isidc(r.p(5))) {
10588 if (r.p(5) == "?") {
10589 r.seek_cur(6);
10590 return this.token(TOKEN_ISNOTCI, "isnot?", pos);
10591 }
10592 else if (r.p(5) == "#") {
10593 r.seek_cur(6);
10594 return this.token(TOKEN_ISNOTCS, "isnot#", pos);
10595 }
10596 else {
10597 r.seek_cur(5);
10598 return this.token(TOKEN_ISNOT, "isnot", pos);
10599 }
10600 }
10601 else if (isnamec1(c)) {
10602 var s = r.read_name();
10603 return this.token(TOKEN_IDENTIFIER, s, pos);
10604 }
10605 else if (c == "|" && r.p(1) == "|") {
10606 r.seek_cur(2);
10607 return this.token(TOKEN_OROR, "||", pos);
10608 }
10609 else if (c == "&" && r.p(1) == "&") {
10610 r.seek_cur(2);
10611 return this.token(TOKEN_ANDAND, "&&", pos);
10612 }
10613 else if (c == "=" && r.p(1) == "=") {
10614 if (r.p(2) == "?") {
10615 r.seek_cur(3);
10616 return this.token(TOKEN_EQEQCI, "==?", pos);
10617 }
10618 else if (r.p(2) == "#") {
10619 r.seek_cur(3);
10620 return this.token(TOKEN_EQEQCS, "==#", pos);
10621 }
10622 else {
10623 r.seek_cur(2);
10624 return this.token(TOKEN_EQEQ, "==", pos);
10625 }
10626 }
10627 else if (c == "!" && r.p(1) == "=") {
10628 if (r.p(2) == "?") {
10629 r.seek_cur(3);
10630 return this.token(TOKEN_NEQCI, "!=?", pos);
10631 }
10632 else if (r.p(2) == "#") {
10633 r.seek_cur(3);
10634 return this.token(TOKEN_NEQCS, "!=#", pos);
10635 }
10636 else {
10637 r.seek_cur(2);
10638 return this.token(TOKEN_NEQ, "!=", pos);
10639 }
10640 }
10641 else if (c == ">" && r.p(1) == "=") {
10642 if (r.p(2) == "?") {
10643 r.seek_cur(3);
10644 return this.token(TOKEN_GTEQCI, ">=?", pos);
10645 }
10646 else if (r.p(2) == "#") {
10647 r.seek_cur(3);
10648 return this.token(TOKEN_GTEQCS, ">=#", pos);
10649 }
10650 else {
10651 r.seek_cur(2);
10652 return this.token(TOKEN_GTEQ, ">=", pos);
10653 }
10654 }
10655 else if (c == "<" && r.p(1) == "=") {
10656 if (r.p(2) == "?") {
10657 r.seek_cur(3);
10658 return this.token(TOKEN_LTEQCI, "<=?", pos);
10659 }
10660 else if (r.p(2) == "#") {
10661 r.seek_cur(3);
10662 return this.token(TOKEN_LTEQCS, "<=#", pos);
10663 }
10664 else {
10665 r.seek_cur(2);
10666 return this.token(TOKEN_LTEQ, "<=", pos);
10667 }
10668 }
10669 else if (c == "=" && r.p(1) == "~") {
10670 if (r.p(2) == "?") {
10671 r.seek_cur(3);
10672 return this.token(TOKEN_MATCHCI, "=~?", pos);
10673 }
10674 else if (r.p(2) == "#") {
10675 r.seek_cur(3);
10676 return this.token(TOKEN_MATCHCS, "=~#", pos);
10677 }
10678 else {
10679 r.seek_cur(2);
10680 return this.token(TOKEN_MATCH, "=~", pos);
10681 }
10682 }
10683 else if (c == "!" && r.p(1) == "~") {
10684 if (r.p(2) == "?") {
10685 r.seek_cur(3);
10686 return this.token(TOKEN_NOMATCHCI, "!~?", pos);
10687 }
10688 else if (r.p(2) == "#") {
10689 r.seek_cur(3);
10690 return this.token(TOKEN_NOMATCHCS, "!~#", pos);
10691 }
10692 else {
10693 r.seek_cur(2);
10694 return this.token(TOKEN_NOMATCH, "!~", pos);
10695 }
10696 }
10697 else if (c == ">") {
10698 if (r.p(1) == "?") {
10699 r.seek_cur(2);
10700 return this.token(TOKEN_GTCI, ">?", pos);
10701 }
10702 else if (r.p(1) == "#") {
10703 r.seek_cur(2);
10704 return this.token(TOKEN_GTCS, ">#", pos);
10705 }
10706 else {
10707 r.seek_cur(1);
10708 return this.token(TOKEN_GT, ">", pos);
10709 }
10710 }
10711 else if (c == "<") {
10712 if (r.p(1) == "?") {
10713 r.seek_cur(2);
10714 return this.token(TOKEN_LTCI, "<?", pos);
10715 }
10716 else if (r.p(1) == "#") {
10717 r.seek_cur(2);
10718 return this.token(TOKEN_LTCS, "<#", pos);
10719 }
10720 else {
10721 r.seek_cur(1);
10722 return this.token(TOKEN_LT, "<", pos);
10723 }
10724 }
10725 else if (c == "+") {
10726 r.seek_cur(1);
10727 return this.token(TOKEN_PLUS, "+", pos);
10728 }
10729 else if (c == "-") {
10730 if (r.p(1) == ">") {
10731 r.seek_cur(2);
10732 return this.token(TOKEN_ARROW, "->", pos);
10733 }
10734 else {
10735 r.seek_cur(1);
10736 return this.token(TOKEN_MINUS, "-", pos);
10737 }
10738 }
10739 else if (c == ".") {
10740 if (r.p(1) == "." && r.p(2) == ".") {
10741 r.seek_cur(3);
10742 return this.token(TOKEN_DOTDOTDOT, "...", pos);
10743 }
10744 else if (r.p(1) == ".") {
10745 r.seek_cur(2);
10746 return this.token(TOKEN_DOTDOT, "..", pos);
10747 // TODO check scriptversion?
10748 }
10749 else {
10750 r.seek_cur(1);
10751 return this.token(TOKEN_DOT, ".", pos);
10752 // TODO check scriptversion?
10753 }
10754 }
10755 else if (c == "*") {
10756 r.seek_cur(1);
10757 return this.token(TOKEN_STAR, "*", pos);
10758 }
10759 else if (c == "/") {
10760 r.seek_cur(1);
10761 return this.token(TOKEN_SLASH, "/", pos);
10762 }
10763 else if (c == "%") {
10764 r.seek_cur(1);
10765 return this.token(TOKEN_PERCENT, "%", pos);
10766 }
10767 else if (c == "!") {
10768 r.seek_cur(1);
10769 return this.token(TOKEN_NOT, "!", pos);
10770 }
10771 else if (c == "?") {
10772 r.seek_cur(1);
10773 return this.token(TOKEN_QUESTION, "?", pos);
10774 }
10775 else if (c == ":") {
10776 r.seek_cur(1);
10777 return this.token(TOKEN_COLON, ":", pos);
10778 }
10779 else if (c == "#") {
10780 if (r.p(1) == "{") {
10781 r.seek_cur(2);
10782 return this.token(TOKEN_LITCOPEN, "#{", pos);
10783 }
10784 else {
10785 r.seek_cur(1);
10786 return this.token(TOKEN_SHARP, "#", pos);
10787 }
10788 }
10789 else if (c == "(") {
10790 r.seek_cur(1);
10791 return this.token(TOKEN_POPEN, "(", pos);
10792 }
10793 else if (c == ")") {
10794 r.seek_cur(1);
10795 return this.token(TOKEN_PCLOSE, ")", pos);
10796 }
10797 else if (c == "[") {
10798 r.seek_cur(1);
10799 return this.token(TOKEN_SQOPEN, "[", pos);
10800 }
10801 else if (c == "]") {
10802 r.seek_cur(1);
10803 return this.token(TOKEN_SQCLOSE, "]", pos);
10804 }
10805 else if (c == "{") {
10806 r.seek_cur(1);
10807 return this.token(TOKEN_COPEN, "{", pos);
10808 }
10809 else if (c == "}") {
10810 r.seek_cur(1);
10811 return this.token(TOKEN_CCLOSE, "}", pos);
10812 }
10813 else if (c == ",") {
10814 r.seek_cur(1);
10815 return this.token(TOKEN_COMMA, ",", pos);
10816 }
10817 else if (c == "'") {
10818 r.seek_cur(1);
10819 return this.token(TOKEN_SQUOTE, "'", pos);
10820 }
10821 else if (c == "\"") {
10822 r.seek_cur(1);
10823 return this.token(TOKEN_DQUOTE, "\"", pos);
10824 }
10825 else if (c == "$") {
10826 var s = r.getn(1);
10827 s += r.read_word();
10828 return this.token(TOKEN_ENV, s, pos);
10829 }
10830 else if (c == "@") {
10831 // @<EOL> is treated as @"
10832 return this.token(TOKEN_REG, r.getn(2), pos);
10833 }
10834 else if (c == "&") {
10835 var s = "";
10836 if ((r.p(1) == "g" || r.p(1) == "l") && r.p(2) == ":") {
10837 var s = r.getn(3) + r.read_word();
10838 }
10839 else {
10840 var s = r.getn(1) + r.read_word();
10841 }
10842 return this.token(TOKEN_OPTION, s, pos);
10843 }
10844 else if (c == "=") {
10845 r.seek_cur(1);
10846 return this.token(TOKEN_EQ, "=", pos);
10847 }
10848 else if (c == "|") {
10849 r.seek_cur(1);
10850 return this.token(TOKEN_OR, "|", pos);
10851 }
10852 else if (c == ";") {
10853 r.seek_cur(1);
10854 return this.token(TOKEN_SEMICOLON, ";", pos);
10855 }
10856 else if (c == "`") {
10857 r.seek_cur(1);
10858 return this.token(TOKEN_BACKTICK, "`", pos);
10859 }
10860 else {
10861 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10862 }
10863}
10864
10865ExprTokenizer.prototype.get_sstring = function() {
10866 this.reader.skip_white();
10867 var c = this.reader.p(0);
10868 if (c != "'") {
10869 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10870 }
10871 this.reader.seek_cur(1);
10872 var s = "";
10873 while (TRUE) {
10874 var c = this.reader.p(0);
10875 if (c == "<EOF>" || c == "<EOL>") {
10876 throw Err("unexpected EOL", this.reader.getpos());
10877 }
10878 else if (c == "'") {
10879 this.reader.seek_cur(1);
10880 if (this.reader.p(0) == "'") {
10881 this.reader.seek_cur(1);
10882 s += "''";
10883 }
10884 else {
10885 break;
10886 }
10887 }
10888 else {
10889 this.reader.seek_cur(1);
10890 s += c;
10891 }
10892 }
10893 return s;
10894}
10895
10896ExprTokenizer.prototype.get_dstring = function() {
10897 this.reader.skip_white();
10898 var c = this.reader.p(0);
10899 if (c != "\"") {
10900 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10901 }
10902 this.reader.seek_cur(1);
10903 var s = "";
10904 while (TRUE) {
10905 var c = this.reader.p(0);
10906 if (c == "<EOF>" || c == "<EOL>") {
10907 throw Err("unexpectd EOL", this.reader.getpos());
10908 }
10909 else if (c == "\"") {
10910 this.reader.seek_cur(1);
10911 break;
10912 }
10913 else if (c == "\\") {
10914 this.reader.seek_cur(1);
10915 s += c;
10916 var c = this.reader.p(0);
10917 if (c == "<EOF>" || c == "<EOL>") {
10918 throw Err("ExprTokenizer: unexpected EOL", this.reader.getpos());
10919 }
10920 this.reader.seek_cur(1);
10921 s += c;
10922 }
10923 else {
10924 this.reader.seek_cur(1);
10925 s += c;
10926 }
10927 }
10928 return s;
10929}
10930
10931ExprTokenizer.prototype.parse_dict_literal_key = function() {
10932 this.reader.skip_white();
10933 var c = this.reader.peek();
10934 if (!isalnum(c) && c != "_" && c != "-") {
10935 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10936 }
10937 var node = Node(NODE_STRING);
10938 var s = c;
10939 this.reader.seek_cur(1);
10940 node.pos = this.reader.getpos();
10941 while (TRUE) {
10942 var c = this.reader.p(0);
10943 if (c == "<EOF>" || c == "<EOL>") {
10944 throw Err("unexpectd EOL", this.reader.getpos());
10945 }
10946 if (!isalnum(c) && c != "_" && c != "-") {
10947 break;
10948 }
10949 this.reader.seek_cur(1);
10950 s += c;
10951 }
10952 node.value = "'" + s + "'";
10953 return node;
10954}
10955
10956function ExprParser() { this.__init__.apply(this, arguments); }
10957ExprParser.prototype.__init__ = function(reader) {
10958 this.reader = reader;
10959 this.tokenizer = new ExprTokenizer(reader);
10960}
10961
10962ExprParser.prototype.parse = function() {
10963 return this.parse_expr1();
10964}
10965
10966// expr1: expr2 ? expr1 : expr1
10967ExprParser.prototype.parse_expr1 = function() {
10968 var left = this.parse_expr2();
10969 var pos = this.reader.tell();
10970 var token = this.tokenizer.get();
10971 if (token.type == TOKEN_QUESTION) {
10972 var node = Node(NODE_TERNARY);
10973 node.pos = token.pos;
10974 node.cond = left;
10975 node.left = this.parse_expr1();
10976 var token = this.tokenizer.get();
10977 if (token.type != TOKEN_COLON) {
10978 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10979 }
10980 node.right = this.parse_expr1();
10981 var left = node;
10982 }
10983 else {
10984 this.reader.seek_set(pos);
10985 }
10986 return left;
10987}
10988
10989// expr2: expr3 || expr3 ..
10990ExprParser.prototype.parse_expr2 = function() {
10991 var left = this.parse_expr3();
10992 while (TRUE) {
10993 var pos = this.reader.tell();
10994 var token = this.tokenizer.get();
10995 if (token.type == TOKEN_OROR) {
10996 var node = Node(NODE_OR);
10997 node.pos = token.pos;
10998 node.left = left;
10999 node.right = this.parse_expr3();
11000 var left = node;
11001 }
11002 else {
11003 this.reader.seek_set(pos);
11004 break;
11005 }
11006 }
11007 return left;
11008}
11009
11010// expr3: expr4 && expr4
11011ExprParser.prototype.parse_expr3 = function() {
11012 var left = this.parse_expr4();
11013 while (TRUE) {
11014 var pos = this.reader.tell();
11015 var token = this.tokenizer.get();
11016 if (token.type == TOKEN_ANDAND) {
11017 var node = Node(NODE_AND);
11018 node.pos = token.pos;
11019 node.left = left;
11020 node.right = this.parse_expr4();
11021 var left = node;
11022 }
11023 else {
11024 this.reader.seek_set(pos);
11025 break;
11026 }
11027 }
11028 return left;
11029}
11030
11031// expr4: expr5 == expr5
11032// expr5 != expr5
11033// expr5 > expr5
11034// expr5 >= expr5
11035// expr5 < expr5
11036// expr5 <= expr5
11037// expr5 =~ expr5
11038// expr5 !~ expr5
11039//
11040// expr5 ==? expr5
11041// expr5 ==# expr5
11042// etc.
11043//
11044// expr5 is expr5
11045// expr5 isnot expr5
11046ExprParser.prototype.parse_expr4 = function() {
11047 var left = this.parse_expr5();
11048 var pos = this.reader.tell();
11049 var token = this.tokenizer.get();
11050 if (token.type == TOKEN_EQEQ) {
11051 var node = Node(NODE_EQUAL);
11052 node.pos = token.pos;
11053 node.left = left;
11054 node.right = this.parse_expr5();
11055 var left = node;
11056 }
11057 else if (token.type == TOKEN_EQEQCI) {
11058 var node = Node(NODE_EQUALCI);
11059 node.pos = token.pos;
11060 node.left = left;
11061 node.right = this.parse_expr5();
11062 var left = node;
11063 }
11064 else if (token.type == TOKEN_EQEQCS) {
11065 var node = Node(NODE_EQUALCS);
11066 node.pos = token.pos;
11067 node.left = left;
11068 node.right = this.parse_expr5();
11069 var left = node;
11070 }
11071 else if (token.type == TOKEN_NEQ) {
11072 var node = Node(NODE_NEQUAL);
11073 node.pos = token.pos;
11074 node.left = left;
11075 node.right = this.parse_expr5();
11076 var left = node;
11077 }
11078 else if (token.type == TOKEN_NEQCI) {
11079 var node = Node(NODE_NEQUALCI);
11080 node.pos = token.pos;
11081 node.left = left;
11082 node.right = this.parse_expr5();
11083 var left = node;
11084 }
11085 else if (token.type == TOKEN_NEQCS) {
11086 var node = Node(NODE_NEQUALCS);
11087 node.pos = token.pos;
11088 node.left = left;
11089 node.right = this.parse_expr5();
11090 var left = node;
11091 }
11092 else if (token.type == TOKEN_GT) {
11093 var node = Node(NODE_GREATER);
11094 node.pos = token.pos;
11095 node.left = left;
11096 node.right = this.parse_expr5();
11097 var left = node;
11098 }
11099 else if (token.type == TOKEN_GTCI) {
11100 var node = Node(NODE_GREATERCI);
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_GTCS) {
11107 var node = Node(NODE_GREATERCS);
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_GTEQ) {
11114 var node = Node(NODE_GEQUAL);
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_GTEQCI) {
11121 var node = Node(NODE_GEQUALCI);
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_GTEQCS) {
11128 var node = Node(NODE_GEQUALCS);
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_LT) {
11135 var node = Node(NODE_SMALLER);
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_LTCI) {
11142 var node = Node(NODE_SMALLERCI);
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_LTCS) {
11149 var node = Node(NODE_SMALLERCS);
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_LTEQ) {
11156 var node = Node(NODE_SEQUAL);
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_LTEQCI) {
11163 var node = Node(NODE_SEQUALCI);
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_LTEQCS) {
11170 var node = Node(NODE_SEQUALCS);
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_MATCH) {
11177 var node = Node(NODE_MATCH);
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_MATCHCI) {
11184 var node = Node(NODE_MATCHCI);
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_MATCHCS) {
11191 var node = Node(NODE_MATCHCS);
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_NOMATCH) {
11198 var node = Node(NODE_NOMATCH);
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_NOMATCHCI) {
11205 var node = Node(NODE_NOMATCHCI);
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_NOMATCHCS) {
11212 var node = Node(NODE_NOMATCHCS);
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_IS) {
11219 var node = Node(NODE_IS);
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_ISCI) {
11226 var node = Node(NODE_ISCI);
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_ISCS) {
11233 var node = Node(NODE_ISCS);
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_ISNOT) {
11240 var node = Node(NODE_ISNOT);
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_ISNOTCI) {
11247 var node = Node(NODE_ISNOTCI);
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_ISNOTCS) {
11254 var node = Node(NODE_ISNOTCS);
11255 node.pos = token.pos;
11256 node.left = left;
11257 node.right = this.parse_expr5();
11258 var left = node;
11259 }
11260 else {
11261 this.reader.seek_set(pos);
11262 }
11263 return left;
11264}
11265
11266// expr5: expr6 + expr6 ..
11267// expr6 - expr6 ..
11268// expr6 . expr6 ..
11269// expr6 .. expr6 ..
11270ExprParser.prototype.parse_expr5 = function() {
11271 var left = this.parse_expr6();
11272 while (TRUE) {
11273 var pos = this.reader.tell();
11274 var token = this.tokenizer.get();
11275 if (token.type == TOKEN_PLUS) {
11276 var node = Node(NODE_ADD);
11277 node.pos = token.pos;
11278 node.left = left;
11279 node.right = this.parse_expr6();
11280 var left = node;
11281 }
11282 else if (token.type == TOKEN_MINUS) {
11283 var node = Node(NODE_SUBTRACT);
11284 node.pos = token.pos;
11285 node.left = left;
11286 node.right = this.parse_expr6();
11287 var left = node;
11288 }
11289 else if (token.type == TOKEN_DOTDOT) {
11290 // TODO check scriptversion?
11291 var node = Node(NODE_CONCAT);
11292 node.pos = token.pos;
11293 node.left = left;
11294 node.right = this.parse_expr6();
11295 var left = node;
11296 }
11297 else if (token.type == TOKEN_DOT) {
11298 // TODO check scriptversion?
11299 var node = Node(NODE_CONCAT);
11300 node.pos = token.pos;
11301 node.left = left;
11302 node.right = this.parse_expr6();
11303 var left = node;
11304 }
11305 else {
11306 this.reader.seek_set(pos);
11307 break;
11308 }
11309 }
11310 return left;
11311}
11312
11313// expr6: expr7 * expr7 ..
11314// expr7 / expr7 ..
11315// expr7 % expr7 ..
11316ExprParser.prototype.parse_expr6 = function() {
11317 var left = this.parse_expr7();
11318 while (TRUE) {
11319 var pos = this.reader.tell();
11320 var token = this.tokenizer.get();
11321 if (token.type == TOKEN_STAR) {
11322 var node = Node(NODE_MULTIPLY);
11323 node.pos = token.pos;
11324 node.left = left;
11325 node.right = this.parse_expr7();
11326 var left = node;
11327 }
11328 else if (token.type == TOKEN_SLASH) {
11329 var node = Node(NODE_DIVIDE);
11330 node.pos = token.pos;
11331 node.left = left;
11332 node.right = this.parse_expr7();
11333 var left = node;
11334 }
11335 else if (token.type == TOKEN_PERCENT) {
11336 var node = Node(NODE_REMAINDER);
11337 node.pos = token.pos;
11338 node.left = left;
11339 node.right = this.parse_expr7();
11340 var left = node;
11341 }
11342 else {
11343 this.reader.seek_set(pos);
11344 break;
11345 }
11346 }
11347 return left;
11348}
11349
11350// expr7: ! expr7
11351// - expr7
11352// + expr7
11353ExprParser.prototype.parse_expr7 = function() {
11354 var pos = this.reader.tell();
11355 var token = this.tokenizer.get();
11356 if (token.type == TOKEN_NOT) {
11357 var node = Node(NODE_NOT);
11358 node.pos = token.pos;
11359 node.left = this.parse_expr7();
11360 return node;
11361 }
11362 else if (token.type == TOKEN_MINUS) {
11363 var node = Node(NODE_MINUS);
11364 node.pos = token.pos;
11365 node.left = this.parse_expr7();
11366 return node;
11367 }
11368 else if (token.type == TOKEN_PLUS) {
11369 var node = Node(NODE_PLUS);
11370 node.pos = token.pos;
11371 node.left = this.parse_expr7();
11372 return node;
11373 }
11374 else {
11375 this.reader.seek_set(pos);
11376 var node = this.parse_expr8();
11377 return node;
11378 }
11379}
11380
11381// expr8: expr8[expr1]
11382// expr8[expr1 : expr1]
11383// expr8.name
11384// expr8->name(expr1, ...)
11385// expr8->s:user_func(expr1, ...)
11386// expr8->{lambda}(expr1, ...)
11387// expr8(expr1, ...)
11388ExprParser.prototype.parse_expr8 = function() {
11389 var left = this.parse_expr9();
11390 while (TRUE) {
11391 var pos = this.reader.tell();
11392 var c = this.reader.peek();
11393 var token = this.tokenizer.get();
11394 if (!iswhite(c) && token.type == TOKEN_SQOPEN) {
11395 var npos = token.pos;
11396 if (this.tokenizer.peek().type == TOKEN_COLON) {
11397 this.tokenizer.get();
11398 var node = Node(NODE_SLICE);
11399 node.pos = npos;
11400 node.left = left;
11401 node.rlist = [NIL, NIL];
11402 var token = this.tokenizer.peek();
11403 if (token.type != TOKEN_SQCLOSE) {
11404 node.rlist[1] = this.parse_expr1();
11405 }
11406 var token = this.tokenizer.get();
11407 if (token.type != TOKEN_SQCLOSE) {
11408 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11409 }
11410 var left = node;
11411 }
11412 else {
11413 var right = this.parse_expr1();
11414 if (this.tokenizer.peek().type == TOKEN_COLON) {
11415 this.tokenizer.get();
11416 var node = Node(NODE_SLICE);
11417 node.pos = npos;
11418 node.left = left;
11419 node.rlist = [right, NIL];
11420 var token = this.tokenizer.peek();
11421 if (token.type != TOKEN_SQCLOSE) {
11422 node.rlist[1] = this.parse_expr1();
11423 }
11424 var token = this.tokenizer.get();
11425 if (token.type != TOKEN_SQCLOSE) {
11426 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11427 }
11428 var left = node;
11429 }
11430 else {
11431 var node = Node(NODE_SUBSCRIPT);
11432 node.pos = npos;
11433 node.left = left;
11434 node.right = right;
11435 var token = this.tokenizer.get();
11436 if (token.type != TOKEN_SQCLOSE) {
11437 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11438 }
11439 var left = node;
11440 }
11441 }
11442 delete node;
11443 }
11444 else if (token.type == TOKEN_ARROW) {
11445 var funcname_or_lambda = this.parse_expr9();
11446 var token = this.tokenizer.get();
11447 if (token.type != TOKEN_POPEN) {
11448 throw Err("E107: Missing parentheses: lambda", token.pos);
11449 }
11450 var right = Node(NODE_CALL);
11451 right.pos = token.pos;
11452 right.left = funcname_or_lambda;
11453 right.rlist = this.parse_rlist();
11454 var node = Node(NODE_METHOD);
11455 node.pos = token.pos;
11456 node.left = left;
11457 node.right = right;
11458 var left = node;
11459 delete node;
11460 }
11461 else if (token.type == TOKEN_POPEN) {
11462 var node = Node(NODE_CALL);
11463 node.pos = token.pos;
11464 node.left = left;
11465 node.rlist = this.parse_rlist();
11466 var left = node;
11467 delete node;
11468 }
11469 else if (!iswhite(c) && token.type == TOKEN_DOT) {
11470 // TODO check scriptversion?
11471 var node = this.parse_dot(token, left);
11472 if (node === NIL) {
11473 this.reader.seek_set(pos);
11474 break;
11475 }
11476 var left = node;
11477 delete node;
11478 }
11479 else {
11480 this.reader.seek_set(pos);
11481 break;
11482 }
11483 }
11484 return left;
11485}
11486
11487ExprParser.prototype.parse_rlist = function() {
11488 var rlist = [];
11489 var token = this.tokenizer.peek();
11490 if (this.tokenizer.peek().type == TOKEN_PCLOSE) {
11491 this.tokenizer.get();
11492 }
11493 else {
11494 while (TRUE) {
11495 viml_add(rlist, this.parse_expr1());
11496 var token = this.tokenizer.get();
11497 if (token.type == TOKEN_COMMA) {
11498 // XXX: Vim allows foo(a, b, ). Lint should warn it.
11499 if (this.tokenizer.peek().type == TOKEN_PCLOSE) {
11500 this.tokenizer.get();
11501 break;
11502 }
11503 }
11504 else if (token.type == TOKEN_PCLOSE) {
11505 break;
11506 }
11507 else {
11508 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11509 }
11510 }
11511 }
11512 if (viml_len(rlist) > MAX_FUNC_ARGS) {
11513 // TODO: funcname E740: Too many arguments for function: %s
11514 throw Err("E740: Too many arguments for function", token.pos);
11515 }
11516 return rlist;
11517}
11518
11519// expr9: number
11520// "string"
11521// 'string'
11522// [expr1, ...]
11523// {expr1: expr1, ...}
11524// #{literal_key1: expr1, ...}
11525// {args -> expr1}
11526// &option
11527// (expr1)
11528// variable
11529// var{ria}ble
11530// $VAR
11531// @r
11532// function(expr1, ...)
11533// func{ti}on(expr1, ...)
11534ExprParser.prototype.parse_expr9 = function() {
11535 var pos = this.reader.tell();
11536 var token = this.tokenizer.get();
11537 var node = Node(-1);
11538 if (token.type == TOKEN_NUMBER) {
11539 var node = Node(NODE_NUMBER);
11540 node.pos = token.pos;
11541 node.value = token.value;
11542 }
11543 else if (token.type == TOKEN_BLOB) {
11544 var node = Node(NODE_BLOB);
11545 node.pos = token.pos;
11546 node.value = token.value;
11547 }
11548 else if (token.type == TOKEN_DQUOTE) {
11549 this.reader.seek_set(pos);
11550 var node = Node(NODE_STRING);
11551 node.pos = token.pos;
11552 node.value = "\"" + this.tokenizer.get_dstring() + "\"";
11553 }
11554 else if (token.type == TOKEN_SQUOTE) {
11555 this.reader.seek_set(pos);
11556 var node = Node(NODE_STRING);
11557 node.pos = token.pos;
11558 node.value = "'" + this.tokenizer.get_sstring() + "'";
11559 }
11560 else if (token.type == TOKEN_SQOPEN) {
11561 var node = Node(NODE_LIST);
11562 node.pos = token.pos;
11563 node.value = [];
11564 var token = this.tokenizer.peek();
11565 if (token.type == TOKEN_SQCLOSE) {
11566 this.tokenizer.get();
11567 }
11568 else {
11569 while (TRUE) {
11570 viml_add(node.value, this.parse_expr1());
11571 var token = this.tokenizer.peek();
11572 if (token.type == TOKEN_COMMA) {
11573 this.tokenizer.get();
11574 if (this.tokenizer.peek().type == TOKEN_SQCLOSE) {
11575 this.tokenizer.get();
11576 break;
11577 }
11578 }
11579 else if (token.type == TOKEN_SQCLOSE) {
11580 this.tokenizer.get();
11581 break;
11582 }
11583 else {
11584 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11585 }
11586 }
11587 }
11588 }
11589 else if (token.type == TOKEN_COPEN || token.type == TOKEN_LITCOPEN) {
11590 var is_litdict = token.type == TOKEN_LITCOPEN;
11591 var savepos = this.reader.tell();
11592 var nodepos = token.pos;
11593 var token = this.tokenizer.get();
11594 var lambda = token.type == TOKEN_ARROW;
11595 if (!lambda && !(token.type == TOKEN_SQUOTE || token.type == TOKEN_DQUOTE)) {
11596 // if the token type is stirng, we cannot peek next token and we can
11597 // assume it's not lambda.
11598 var token2 = this.tokenizer.peek();
11599 var lambda = token2.type == TOKEN_ARROW || token2.type == TOKEN_COMMA;
11600 }
11601 // fallback to dict or {expr} if true
11602 var fallback = FALSE;
11603 if (lambda) {
11604 // lambda {token,...} {->...} {token->...}
11605 var node = Node(NODE_LAMBDA);
11606 node.pos = nodepos;
11607 node.rlist = [];
11608 var named = {};
11609 while (TRUE) {
11610 if (token.type == TOKEN_ARROW) {
11611 break;
11612 }
11613 else if (token.type == TOKEN_IDENTIFIER) {
11614 if (!isargname(token.value)) {
11615 throw Err(viml_printf("E125: Illegal argument: %s", token.value), token.pos);
11616 }
11617 else if (viml_has_key(named, token.value)) {
11618 throw Err(viml_printf("E853: Duplicate argument name: %s", token.value), token.pos);
11619 }
11620 named[token.value] = 1;
11621 var varnode = Node(NODE_IDENTIFIER);
11622 varnode.pos = token.pos;
11623 varnode.value = token.value;
11624 // XXX: Vim doesn't skip white space before comma. {a ,b -> ...} => E475
11625 if (iswhite(this.reader.p(0)) && this.tokenizer.peek().type == TOKEN_COMMA) {
11626 throw Err("E475: Invalid argument: White space is not allowed before comma", this.reader.getpos());
11627 }
11628 var token = this.tokenizer.get();
11629 viml_add(node.rlist, varnode);
11630 if (token.type == TOKEN_COMMA) {
11631 // XXX: Vim allows last comma. {a, b, -> ...} => OK
11632 var token = this.tokenizer.peek();
11633 if (token.type == TOKEN_ARROW) {
11634 this.tokenizer.get();
11635 break;
11636 }
11637 }
11638 else if (token.type == TOKEN_ARROW) {
11639 break;
11640 }
11641 else {
11642 throw Err(viml_printf("unexpected token: %s, type: %d", token.value, token.type), token.pos);
11643 }
11644 }
11645 else if (token.type == TOKEN_DOTDOTDOT) {
11646 var varnode = Node(NODE_IDENTIFIER);
11647 varnode.pos = token.pos;
11648 varnode.value = token.value;
11649 viml_add(node.rlist, varnode);
11650 var token = this.tokenizer.peek();
11651 if (token.type == TOKEN_ARROW) {
11652 this.tokenizer.get();
11653 break;
11654 }
11655 else {
11656 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11657 }
11658 }
11659 else {
11660 var fallback = TRUE;
11661 break;
11662 }
11663 var token = this.tokenizer.get();
11664 }
11665 if (!fallback) {
11666 node.left = this.parse_expr1();
11667 var token = this.tokenizer.get();
11668 if (token.type != TOKEN_CCLOSE) {
11669 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11670 }
11671 return node;
11672 }
11673 }
11674 // dict
11675 var node = Node(NODE_DICT);
11676 node.pos = nodepos;
11677 node.value = [];
11678 this.reader.seek_set(savepos);
11679 var token = this.tokenizer.peek();
11680 if (token.type == TOKEN_CCLOSE) {
11681 this.tokenizer.get();
11682 return node;
11683 }
11684 while (1) {
11685 var key = is_litdict ? this.tokenizer.parse_dict_literal_key() : this.parse_expr1();
11686 var token = this.tokenizer.get();
11687 if (token.type == TOKEN_CCLOSE) {
11688 if (!viml_empty(node.value)) {
11689 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11690 }
11691 this.reader.seek_set(pos);
11692 var node = this.parse_identifier();
11693 break;
11694 }
11695 if (token.type != TOKEN_COLON) {
11696 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11697 }
11698 var val = this.parse_expr1();
11699 viml_add(node.value, [key, val]);
11700 var token = this.tokenizer.get();
11701 if (token.type == TOKEN_COMMA) {
11702 if (this.tokenizer.peek().type == TOKEN_CCLOSE) {
11703 this.tokenizer.get();
11704 break;
11705 }
11706 }
11707 else if (token.type == TOKEN_CCLOSE) {
11708 break;
11709 }
11710 else {
11711 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11712 }
11713 }
11714 return node;
11715 }
11716 else if (token.type == TOKEN_POPEN) {
11717 var node = this.parse_expr1();
11718 var token = this.tokenizer.get();
11719 if (token.type != TOKEN_PCLOSE) {
11720 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11721 }
11722 }
11723 else if (token.type == TOKEN_OPTION) {
11724 var node = Node(NODE_OPTION);
11725 node.pos = token.pos;
11726 node.value = token.value;
11727 }
11728 else if (token.type == TOKEN_IDENTIFIER) {
11729 this.reader.seek_set(pos);
11730 var node = this.parse_identifier();
11731 }
11732 else if (FALSE && (token.type == TOKEN_COLON || token.type == TOKEN_SHARP)) {
11733 // XXX: no parse error but invalid expression
11734 this.reader.seek_set(pos);
11735 var node = this.parse_identifier();
11736 }
11737 else if (token.type == TOKEN_LT && viml_equalci(this.reader.peekn(4), "SID>")) {
11738 this.reader.seek_set(pos);
11739 var node = this.parse_identifier();
11740 }
11741 else if (token.type == TOKEN_IS || token.type == TOKEN_ISCS || token.type == TOKEN_ISNOT || token.type == TOKEN_ISNOTCS) {
11742 this.reader.seek_set(pos);
11743 var node = this.parse_identifier();
11744 }
11745 else if (token.type == TOKEN_ENV) {
11746 var node = Node(NODE_ENV);
11747 node.pos = token.pos;
11748 node.value = token.value;
11749 }
11750 else if (token.type == TOKEN_REG) {
11751 var node = Node(NODE_REG);
11752 node.pos = token.pos;
11753 node.value = token.value;
11754 }
11755 else {
11756 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11757 }
11758 return node;
11759}
11760
11761// SUBSCRIPT or CONCAT
11762// dict "." [0-9A-Za-z_]+ => (subscript dict key)
11763// str "." expr6 => (concat str expr6)
11764ExprParser.prototype.parse_dot = function(token, left) {
11765 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) {
11766 return NIL;
11767 }
11768 if (!iswordc(this.reader.p(0))) {
11769 return NIL;
11770 }
11771 var pos = this.reader.getpos();
11772 var name = this.reader.read_word();
11773 if (isnamec(this.reader.p(0))) {
11774 // XXX: foo is str => ok, foo is obj => invalid expression
11775 // foo.s:bar or foo.bar#baz
11776 return NIL;
11777 }
11778 var node = Node(NODE_DOT);
11779 node.pos = token.pos;
11780 node.left = left;
11781 node.right = Node(NODE_IDENTIFIER);
11782 node.right.pos = pos;
11783 node.right.value = name;
11784 return node;
11785}
11786
11787// CONCAT
11788// str ".." expr6 => (concat str expr6)
11789ExprParser.prototype.parse_concat = function(token, left) {
11790 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) {
11791 return NIL;
11792 }
11793 if (!iswordc(this.reader.p(0))) {
11794 return NIL;
11795 }
11796 var pos = this.reader.getpos();
11797 var name = this.reader.read_word();
11798 if (isnamec(this.reader.p(0))) {
11799 // XXX: foo is str => ok, foo is obj => invalid expression
11800 // foo.s:bar or foo.bar#baz
11801 return NIL;
11802 }
11803 var node = Node(NODE_CONCAT);
11804 node.pos = token.pos;
11805 node.left = left;
11806 node.right = Node(NODE_IDENTIFIER);
11807 node.right.pos = pos;
11808 node.right.value = name;
11809 return node;
11810}
11811
11812ExprParser.prototype.parse_identifier = function() {
11813 this.reader.skip_white();
11814 var npos = this.reader.getpos();
11815 var curly_parts = this.parse_curly_parts();
11816 if (viml_len(curly_parts) == 1 && curly_parts[0].type == NODE_CURLYNAMEPART) {
11817 var node = Node(NODE_IDENTIFIER);
11818 node.pos = npos;
11819 node.value = curly_parts[0].value;
11820 return node;
11821 }
11822 else {
11823 var node = Node(NODE_CURLYNAME);
11824 node.pos = npos;
11825 node.value = curly_parts;
11826 return node;
11827 }
11828}
11829
11830ExprParser.prototype.parse_curly_parts = function() {
11831 var curly_parts = [];
11832 var c = this.reader.peek();
11833 var pos = this.reader.getpos();
11834 if (c == "<" && viml_equalci(this.reader.peekn(5), "<SID>")) {
11835 var name = this.reader.getn(5);
11836 var node = Node(NODE_CURLYNAMEPART);
11837 node.curly = FALSE;
11838 // Keep backword compatibility for the curly attribute
11839 node.pos = pos;
11840 node.value = name;
11841 viml_add(curly_parts, node);
11842 }
11843 while (TRUE) {
11844 var c = this.reader.peek();
11845 if (isnamec(c)) {
11846 var pos = this.reader.getpos();
11847 var name = this.reader.read_name();
11848 var node = Node(NODE_CURLYNAMEPART);
11849 node.curly = FALSE;
11850 // Keep backword compatibility for the curly attribute
11851 node.pos = pos;
11852 node.value = name;
11853 viml_add(curly_parts, node);
11854 }
11855 else if (c == "{") {
11856 this.reader.get();
11857 var pos = this.reader.getpos();
11858 var node = Node(NODE_CURLYNAMEEXPR);
11859 node.curly = TRUE;
11860 // Keep backword compatibility for the curly attribute
11861 node.pos = pos;
11862 node.value = this.parse_expr1();
11863 viml_add(curly_parts, node);
11864 this.reader.skip_white();
11865 var c = this.reader.p(0);
11866 if (c != "}") {
11867 throw Err(viml_printf("unexpected token: %s", c), this.reader.getpos());
11868 }
11869 this.reader.seek_cur(1);
11870 }
11871 else {
11872 break;
11873 }
11874 }
11875 return curly_parts;
11876}
11877
11878function LvalueParser() { ExprParser.apply(this, arguments); this.__init__.apply(this, arguments); }
11879LvalueParser.prototype = Object.create(ExprParser.prototype);
11880LvalueParser.prototype.parse = function() {
11881 return this.parse_lv8();
11882}
11883
11884// expr8: expr8[expr1]
11885// expr8[expr1 : expr1]
11886// expr8.name
11887LvalueParser.prototype.parse_lv8 = function() {
11888 var left = this.parse_lv9();
11889 while (TRUE) {
11890 var pos = this.reader.tell();
11891 var c = this.reader.peek();
11892 var token = this.tokenizer.get();
11893 if (!iswhite(c) && token.type == TOKEN_SQOPEN) {
11894 var npos = token.pos;
11895 var node = Node(-1);
11896 if (this.tokenizer.peek().type == TOKEN_COLON) {
11897 this.tokenizer.get();
11898 var node = Node(NODE_SLICE);
11899 node.pos = npos;
11900 node.left = left;
11901 node.rlist = [NIL, NIL];
11902 var token = this.tokenizer.peek();
11903 if (token.type != TOKEN_SQCLOSE) {
11904 node.rlist[1] = this.parse_expr1();
11905 }
11906 var token = this.tokenizer.get();
11907 if (token.type != TOKEN_SQCLOSE) {
11908 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11909 }
11910 }
11911 else {
11912 var right = this.parse_expr1();
11913 if (this.tokenizer.peek().type == TOKEN_COLON) {
11914 this.tokenizer.get();
11915 var node = Node(NODE_SLICE);
11916 node.pos = npos;
11917 node.left = left;
11918 node.rlist = [right, NIL];
11919 var token = this.tokenizer.peek();
11920 if (token.type != TOKEN_SQCLOSE) {
11921 node.rlist[1] = this.parse_expr1();
11922 }
11923 var token = this.tokenizer.get();
11924 if (token.type != TOKEN_SQCLOSE) {
11925 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11926 }
11927 }
11928 else {
11929 var node = Node(NODE_SUBSCRIPT);
11930 node.pos = npos;
11931 node.left = left;
11932 node.right = right;
11933 var token = this.tokenizer.get();
11934 if (token.type != TOKEN_SQCLOSE) {
11935 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11936 }
11937 }
11938 }
11939 var left = node;
11940 delete node;
11941 }
11942 else if (!iswhite(c) && token.type == TOKEN_DOT) {
11943 var node = this.parse_dot(token, left);
11944 if (node === NIL) {
11945 this.reader.seek_set(pos);
11946 break;
11947 }
11948 var left = node;
11949 delete node;
11950 }
11951 else {
11952 this.reader.seek_set(pos);
11953 break;
11954 }
11955 }
11956 return left;
11957}
11958
11959// expr9: &option
11960// variable
11961// var{ria}ble
11962// $VAR
11963// @r
11964LvalueParser.prototype.parse_lv9 = function() {
11965 var pos = this.reader.tell();
11966 var token = this.tokenizer.get();
11967 var node = Node(-1);
11968 if (token.type == TOKEN_COPEN) {
11969 this.reader.seek_set(pos);
11970 var node = this.parse_identifier();
11971 }
11972 else if (token.type == TOKEN_OPTION) {
11973 var node = Node(NODE_OPTION);
11974 node.pos = token.pos;
11975 node.value = token.value;
11976 }
11977 else if (token.type == TOKEN_IDENTIFIER) {
11978 this.reader.seek_set(pos);
11979 var node = this.parse_identifier();
11980 }
11981 else if (token.type == TOKEN_LT && viml_equalci(this.reader.peekn(4), "SID>")) {
11982 this.reader.seek_set(pos);
11983 var node = this.parse_identifier();
11984 }
11985 else if (token.type == TOKEN_ENV) {
11986 var node = Node(NODE_ENV);
11987 node.pos = token.pos;
11988 node.value = token.value;
11989 }
11990 else if (token.type == TOKEN_REG) {
11991 var node = Node(NODE_REG);
11992 node.pos = token.pos;
11993 node.pos = token.pos;
11994 node.value = token.value;
11995 }
11996 else {
11997 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11998 }
11999 return node;
12000}
12001
12002function StringReader() { this.__init__.apply(this, arguments); }
12003StringReader.prototype.__init__ = function(lines) {
12004 this.buf = [];
12005 this.pos = [];
12006 var lnum = 0;
12007 var offset = 0;
12008 while (lnum < viml_len(lines)) {
12009 var col = 0;
12010 var __c7 = viml_split(lines[lnum], "\\zs");
12011 for (var __i7 = 0; __i7 < __c7.length; ++__i7) {
12012 var c = __c7[__i7];
12013 viml_add(this.buf, c);
12014 viml_add(this.pos, [lnum + 1, col + 1, offset]);
12015 col += viml_len(c);
12016 offset += viml_len(c);
12017 }
12018 while (lnum + 1 < viml_len(lines) && viml_eqregh(lines[lnum + 1], "^\\s*\\\\")) {
12019 var skip = TRUE;
12020 var col = 0;
12021 var __c8 = viml_split(lines[lnum + 1], "\\zs");
12022 for (var __i8 = 0; __i8 < __c8.length; ++__i8) {
12023 var c = __c8[__i8];
12024 if (skip) {
12025 if (c == "\\") {
12026 var skip = FALSE;
12027 }
12028 }
12029 else {
12030 viml_add(this.buf, c);
12031 viml_add(this.pos, [lnum + 2, col + 1, offset]);
12032 }
12033 col += viml_len(c);
12034 offset += viml_len(c);
12035 }
12036 lnum += 1;
12037 offset += 1;
12038 }
12039 viml_add(this.buf, "<EOL>");
12040 viml_add(this.pos, [lnum + 1, col + 1, offset]);
12041 lnum += 1;
12042 offset += 1;
12043 }
12044 // for <EOF>
12045 viml_add(this.pos, [lnum + 1, 0, offset]);
12046 this.i = 0;
12047}
12048
12049StringReader.prototype.eof = function() {
12050 return this.i >= viml_len(this.buf);
12051}
12052
12053StringReader.prototype.tell = function() {
12054 return this.i;
12055}
12056
12057StringReader.prototype.seek_set = function(i) {
12058 this.i = i;
12059}
12060
12061StringReader.prototype.seek_cur = function(i) {
12062 this.i = this.i + i;
12063}
12064
12065StringReader.prototype.seek_end = function(i) {
12066 this.i = viml_len(this.buf) + i;
12067}
12068
12069StringReader.prototype.p = function(i) {
12070 if (this.i >= viml_len(this.buf)) {
12071 return "<EOF>";
12072 }
12073 return this.buf[this.i + i];
12074}
12075
12076StringReader.prototype.peek = function() {
12077 if (this.i >= viml_len(this.buf)) {
12078 return "<EOF>";
12079 }
12080 return this.buf[this.i];
12081}
12082
12083StringReader.prototype.get = function() {
12084 if (this.i >= viml_len(this.buf)) {
12085 return "<EOF>";
12086 }
12087 this.i += 1;
12088 return this.buf[this.i - 1];
12089}
12090
12091StringReader.prototype.peekn = function(n) {
12092 var pos = this.tell();
12093 var r = this.getn(n);
12094 this.seek_set(pos);
12095 return r;
12096}
12097
12098StringReader.prototype.getn = function(n) {
12099 var r = "";
12100 var j = 0;
12101 while (this.i < viml_len(this.buf) && (n < 0 || j < n)) {
12102 var c = this.buf[this.i];
12103 if (c == "<EOL>") {
12104 break;
12105 }
12106 r += c;
12107 this.i += 1;
12108 j += 1;
12109 }
12110 return r;
12111}
12112
12113StringReader.prototype.peekline = function() {
12114 return this.peekn(-1);
12115}
12116
12117StringReader.prototype.readline = function() {
12118 var r = this.getn(-1);
12119 this.get();
12120 return r;
12121}
12122
12123StringReader.prototype.getstr = function(begin, end) {
12124 var r = "";
12125 var __c9 = viml_range(begin.i, end.i - 1);
12126 for (var __i9 = 0; __i9 < __c9.length; ++__i9) {
12127 var i = __c9[__i9];
12128 if (i >= viml_len(this.buf)) {
12129 break;
12130 }
12131 var c = this.buf[i];
12132 if (c == "<EOL>") {
12133 var c = "\n";
12134 }
12135 r += c;
12136 }
12137 return r;
12138}
12139
12140StringReader.prototype.getpos = function() {
12141 var __tmp = this.pos[this.i];
12142 var lnum = __tmp[0];
12143 var col = __tmp[1];
12144 var offset = __tmp[2];
12145 return {"i":this.i, "lnum":lnum, "col":col, "offset":offset};
12146}
12147
12148StringReader.prototype.setpos = function(pos) {
12149 this.i = pos.i;
12150}
12151
12152StringReader.prototype.read_alpha = function() {
12153 var r = "";
12154 while (isalpha(this.peekn(1))) {
12155 r += this.getn(1);
12156 }
12157 return r;
12158}
12159
12160StringReader.prototype.read_alnum = function() {
12161 var r = "";
12162 while (isalnum(this.peekn(1))) {
12163 r += this.getn(1);
12164 }
12165 return r;
12166}
12167
12168StringReader.prototype.read_digit = function() {
12169 var r = "";
12170 while (isdigit(this.peekn(1))) {
12171 r += this.getn(1);
12172 }
12173 return r;
12174}
12175
12176StringReader.prototype.read_odigit = function() {
12177 var r = "";
12178 while (isodigit(this.peekn(1))) {
12179 r += this.getn(1);
12180 }
12181 return r;
12182}
12183
12184StringReader.prototype.read_blob = function() {
12185 var r = "";
12186 while (1) {
12187 var s = this.peekn(2);
12188 if (viml_eqregh(s, "^[0-9A-Fa-f][0-9A-Fa-f]$")) {
12189 r += this.getn(2);
12190 }
12191 else if (viml_eqregh(s, "^\\.[0-9A-Fa-f]$")) {
12192 r += this.getn(1);
12193 }
12194 else if (viml_eqregh(s, "^[0-9A-Fa-f][^0-9A-Fa-f]$")) {
12195 throw Err("E973: Blob literal should have an even number of hex characters:" + s, this.getpos());
12196 }
12197 else {
12198 break;
12199 }
12200 }
12201 return r;
12202}
12203
12204StringReader.prototype.read_xdigit = function() {
12205 var r = "";
12206 while (isxdigit(this.peekn(1))) {
12207 r += this.getn(1);
12208 }
12209 return r;
12210}
12211
12212StringReader.prototype.read_bdigit = function() {
12213 var r = "";
12214 while (this.peekn(1) == "0" || this.peekn(1) == "1") {
12215 r += this.getn(1);
12216 }
12217 return r;
12218}
12219
12220StringReader.prototype.read_integer = function() {
12221 var r = "";
12222 var c = this.peekn(1);
12223 if (c == "-" || c == "+") {
12224 var r = this.getn(1);
12225 }
12226 return r + this.read_digit();
12227}
12228
12229StringReader.prototype.read_word = function() {
12230 var r = "";
12231 while (iswordc(this.peekn(1))) {
12232 r += this.getn(1);
12233 }
12234 return r;
12235}
12236
12237StringReader.prototype.read_white = function() {
12238 var r = "";
12239 while (iswhite(this.peekn(1))) {
12240 r += this.getn(1);
12241 }
12242 return r;
12243}
12244
12245StringReader.prototype.read_nonwhite = function() {
12246 var r = "";
12247 var ch = this.peekn(1);
12248 while (!iswhite(ch) && ch != "") {
12249 r += this.getn(1);
12250 var ch = this.peekn(1);
12251 }
12252 return r;
12253}
12254
12255StringReader.prototype.read_name = function() {
12256 var r = "";
12257 while (isnamec(this.peekn(1))) {
12258 r += this.getn(1);
12259 }
12260 return r;
12261}
12262
12263StringReader.prototype.skip_white = function() {
12264 while (iswhite(this.peekn(1))) {
12265 this.seek_cur(1);
12266 }
12267}
12268
12269StringReader.prototype.skip_white_and_colon = function() {
12270 while (TRUE) {
12271 var c = this.peekn(1);
12272 if (!iswhite(c) && c != ":") {
12273 break;
12274 }
12275 this.seek_cur(1);
12276 }
12277}
12278
12279function Compiler() { this.__init__.apply(this, arguments); }
12280Compiler.prototype.__init__ = function() {
12281 this.indent = [""];
12282 this.lines = [];
12283}
12284
12285Compiler.prototype.out = function() {
12286 var a000 = Array.prototype.slice.call(arguments, 0);
12287 if (viml_len(a000) == 1) {
12288 if (a000[0][0] == ")") {
12289 this.lines[this.lines.length - 1] += a000[0];
12290 }
12291 else {
12292 viml_add(this.lines, this.indent[0] + a000[0]);
12293 }
12294 }
12295 else {
12296 viml_add(this.lines, this.indent[0] + viml_printf.apply(null, a000));
12297 }
12298}
12299
12300Compiler.prototype.incindent = function(s) {
12301 viml_insert(this.indent, this.indent[0] + s);
12302}
12303
12304Compiler.prototype.decindent = function() {
12305 viml_remove(this.indent, 0);
12306}
12307
12308Compiler.prototype.compile = function(node) {
12309 if (node.type == NODE_TOPLEVEL) {
12310 return this.compile_toplevel(node);
12311 }
12312 else if (node.type == NODE_COMMENT) {
12313 this.compile_comment(node);
12314 return NIL;
12315 }
12316 else if (node.type == NODE_EXCMD) {
12317 this.compile_excmd(node);
12318 return NIL;
12319 }
12320 else if (node.type == NODE_FUNCTION) {
12321 this.compile_function(node);
12322 return NIL;
12323 }
12324 else if (node.type == NODE_DELFUNCTION) {
12325 this.compile_delfunction(node);
12326 return NIL;
12327 }
12328 else if (node.type == NODE_RETURN) {
12329 this.compile_return(node);
12330 return NIL;
12331 }
12332 else if (node.type == NODE_EXCALL) {
12333 this.compile_excall(node);
12334 return NIL;
12335 }
12336 else if (node.type == NODE_EVAL) {
12337 this.compile_eval(node);
12338 return NIL;
12339 }
12340 else if (node.type == NODE_LET) {
12341 this.compile_let(node);
12342 return NIL;
12343 }
12344 else if (node.type == NODE_CONST) {
12345 this.compile_const(node);
12346 return NIL;
12347 }
12348 else if (node.type == NODE_UNLET) {
12349 this.compile_unlet(node);
12350 return NIL;
12351 }
12352 else if (node.type == NODE_LOCKVAR) {
12353 this.compile_lockvar(node);
12354 return NIL;
12355 }
12356 else if (node.type == NODE_UNLOCKVAR) {
12357 this.compile_unlockvar(node);
12358 return NIL;
12359 }
12360 else if (node.type == NODE_IF) {
12361 this.compile_if(node);
12362 return NIL;
12363 }
12364 else if (node.type == NODE_WHILE) {
12365 this.compile_while(node);
12366 return NIL;
12367 }
12368 else if (node.type == NODE_FOR) {
12369 this.compile_for(node);
12370 return NIL;
12371 }
12372 else if (node.type == NODE_CONTINUE) {
12373 this.compile_continue(node);
12374 return NIL;
12375 }
12376 else if (node.type == NODE_BREAK) {
12377 this.compile_break(node);
12378 return NIL;
12379 }
12380 else if (node.type == NODE_TRY) {
12381 this.compile_try(node);
12382 return NIL;
12383 }
12384 else if (node.type == NODE_THROW) {
12385 this.compile_throw(node);
12386 return NIL;
12387 }
12388 else if (node.type == NODE_ECHO) {
12389 this.compile_echo(node);
12390 return NIL;
12391 }
12392 else if (node.type == NODE_ECHON) {
12393 this.compile_echon(node);
12394 return NIL;
12395 }
12396 else if (node.type == NODE_ECHOHL) {
12397 this.compile_echohl(node);
12398 return NIL;
12399 }
12400 else if (node.type == NODE_ECHOMSG) {
12401 this.compile_echomsg(node);
12402 return NIL;
12403 }
12404 else if (node.type == NODE_ECHOERR) {
12405 this.compile_echoerr(node);
12406 return NIL;
12407 }
12408 else if (node.type == NODE_EXECUTE) {
12409 this.compile_execute(node);
12410 return NIL;
12411 }
12412 else if (node.type == NODE_TERNARY) {
12413 return this.compile_ternary(node);
12414 }
12415 else if (node.type == NODE_OR) {
12416 return this.compile_or(node);
12417 }
12418 else if (node.type == NODE_AND) {
12419 return this.compile_and(node);
12420 }
12421 else if (node.type == NODE_EQUAL) {
12422 return this.compile_equal(node);
12423 }
12424 else if (node.type == NODE_EQUALCI) {
12425 return this.compile_equalci(node);
12426 }
12427 else if (node.type == NODE_EQUALCS) {
12428 return this.compile_equalcs(node);
12429 }
12430 else if (node.type == NODE_NEQUAL) {
12431 return this.compile_nequal(node);
12432 }
12433 else if (node.type == NODE_NEQUALCI) {
12434 return this.compile_nequalci(node);
12435 }
12436 else if (node.type == NODE_NEQUALCS) {
12437 return this.compile_nequalcs(node);
12438 }
12439 else if (node.type == NODE_GREATER) {
12440 return this.compile_greater(node);
12441 }
12442 else if (node.type == NODE_GREATERCI) {
12443 return this.compile_greaterci(node);
12444 }
12445 else if (node.type == NODE_GREATERCS) {
12446 return this.compile_greatercs(node);
12447 }
12448 else if (node.type == NODE_GEQUAL) {
12449 return this.compile_gequal(node);
12450 }
12451 else if (node.type == NODE_GEQUALCI) {
12452 return this.compile_gequalci(node);
12453 }
12454 else if (node.type == NODE_GEQUALCS) {
12455 return this.compile_gequalcs(node);
12456 }
12457 else if (node.type == NODE_SMALLER) {
12458 return this.compile_smaller(node);
12459 }
12460 else if (node.type == NODE_SMALLERCI) {
12461 return this.compile_smallerci(node);
12462 }
12463 else if (node.type == NODE_SMALLERCS) {
12464 return this.compile_smallercs(node);
12465 }
12466 else if (node.type == NODE_SEQUAL) {
12467 return this.compile_sequal(node);
12468 }
12469 else if (node.type == NODE_SEQUALCI) {
12470 return this.compile_sequalci(node);
12471 }
12472 else if (node.type == NODE_SEQUALCS) {
12473 return this.compile_sequalcs(node);
12474 }
12475 else if (node.type == NODE_MATCH) {
12476 return this.compile_match(node);
12477 }
12478 else if (node.type == NODE_MATCHCI) {
12479 return this.compile_matchci(node);
12480 }
12481 else if (node.type == NODE_MATCHCS) {
12482 return this.compile_matchcs(node);
12483 }
12484 else if (node.type == NODE_NOMATCH) {
12485 return this.compile_nomatch(node);
12486 }
12487 else if (node.type == NODE_NOMATCHCI) {
12488 return this.compile_nomatchci(node);
12489 }
12490 else if (node.type == NODE_NOMATCHCS) {
12491 return this.compile_nomatchcs(node);
12492 }
12493 else if (node.type == NODE_IS) {
12494 return this.compile_is(node);
12495 }
12496 else if (node.type == NODE_ISCI) {
12497 return this.compile_isci(node);
12498 }
12499 else if (node.type == NODE_ISCS) {
12500 return this.compile_iscs(node);
12501 }
12502 else if (node.type == NODE_ISNOT) {
12503 return this.compile_isnot(node);
12504 }
12505 else if (node.type == NODE_ISNOTCI) {
12506 return this.compile_isnotci(node);
12507 }
12508 else if (node.type == NODE_ISNOTCS) {
12509 return this.compile_isnotcs(node);
12510 }
12511 else if (node.type == NODE_ADD) {
12512 return this.compile_add(node);
12513 }
12514 else if (node.type == NODE_SUBTRACT) {
12515 return this.compile_subtract(node);
12516 }
12517 else if (node.type == NODE_CONCAT) {
12518 return this.compile_concat(node);
12519 }
12520 else if (node.type == NODE_MULTIPLY) {
12521 return this.compile_multiply(node);
12522 }
12523 else if (node.type == NODE_DIVIDE) {
12524 return this.compile_divide(node);
12525 }
12526 else if (node.type == NODE_REMAINDER) {
12527 return this.compile_remainder(node);
12528 }
12529 else if (node.type == NODE_NOT) {
12530 return this.compile_not(node);
12531 }
12532 else if (node.type == NODE_PLUS) {
12533 return this.compile_plus(node);
12534 }
12535 else if (node.type == NODE_MINUS) {
12536 return this.compile_minus(node);
12537 }
12538 else if (node.type == NODE_SUBSCRIPT) {
12539 return this.compile_subscript(node);
12540 }
12541 else if (node.type == NODE_SLICE) {
12542 return this.compile_slice(node);
12543 }
12544 else if (node.type == NODE_DOT) {
12545 return this.compile_dot(node);
12546 }
12547 else if (node.type == NODE_METHOD) {
12548 return this.compile_method(node);
12549 }
12550 else if (node.type == NODE_CALL) {
12551 return this.compile_call(node);
12552 }
12553 else if (node.type == NODE_NUMBER) {
12554 return this.compile_number(node);
12555 }
12556 else if (node.type == NODE_BLOB) {
12557 return this.compile_blob(node);
12558 }
12559 else if (node.type == NODE_STRING) {
12560 return this.compile_string(node);
12561 }
12562 else if (node.type == NODE_LIST) {
12563 return this.compile_list(node);
12564 }
12565 else if (node.type == NODE_DICT) {
12566 return this.compile_dict(node);
12567 }
12568 else if (node.type == NODE_OPTION) {
12569 return this.compile_option(node);
12570 }
12571 else if (node.type == NODE_IDENTIFIER) {
12572 return this.compile_identifier(node);
12573 }
12574 else if (node.type == NODE_CURLYNAME) {
12575 return this.compile_curlyname(node);
12576 }
12577 else if (node.type == NODE_ENV) {
12578 return this.compile_env(node);
12579 }
12580 else if (node.type == NODE_REG) {
12581 return this.compile_reg(node);
12582 }
12583 else if (node.type == NODE_CURLYNAMEPART) {
12584 return this.compile_curlynamepart(node);
12585 }
12586 else if (node.type == NODE_CURLYNAMEEXPR) {
12587 return this.compile_curlynameexpr(node);
12588 }
12589 else if (node.type == NODE_LAMBDA) {
12590 return this.compile_lambda(node);
12591 }
12592 else if (node.type == NODE_HEREDOC) {
12593 return this.compile_heredoc(node);
12594 }
12595 else {
12596 throw viml_printf("Compiler: unknown node: %s", viml_string(node));
12597 }
12598 return NIL;
12599}
12600
12601Compiler.prototype.compile_body = function(body) {
12602 var __c10 = body;
12603 for (var __i10 = 0; __i10 < __c10.length; ++__i10) {
12604 var node = __c10[__i10];
12605 this.compile(node);
12606 }
12607}
12608
12609Compiler.prototype.compile_toplevel = function(node) {
12610 this.compile_body(node.body);
12611 return this.lines;
12612}
12613
12614Compiler.prototype.compile_comment = function(node) {
12615 this.out(";%s", node.str);
12616}
12617
12618Compiler.prototype.compile_excmd = function(node) {
12619 this.out("(excmd \"%s\")", viml_escape(node.str, "\\\""));
12620}
12621
12622Compiler.prototype.compile_function = function(node) {
12623 var left = this.compile(node.left);
12624 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
12625 var default_args = node.default_args.map((function(vval) { return this.compile(vval); }).bind(this));
12626 if (!viml_empty(rlist)) {
12627 var remaining = FALSE;
12628 if (rlist[rlist.length - 1] == "...") {
12629 viml_remove(rlist, -1);
12630 var remaining = TRUE;
12631 }
12632 var __c11 = viml_range(viml_len(rlist));
12633 for (var __i11 = 0; __i11 < __c11.length; ++__i11) {
12634 var i = __c11[__i11];
12635 if (i < viml_len(rlist) - viml_len(default_args)) {
12636 left += viml_printf(" %s", rlist[i]);
12637 }
12638 else {
12639 left += viml_printf(" (%s %s)", rlist[i], default_args[i + viml_len(default_args) - viml_len(rlist)]);
12640 }
12641 }
12642 if (remaining) {
12643 left += " . ...";
12644 }
12645 }
12646 this.out("(function (%s)", left);
12647 this.incindent(" ");
12648 this.compile_body(node.body);
12649 this.out(")");
12650 this.decindent();
12651}
12652
12653Compiler.prototype.compile_delfunction = function(node) {
12654 this.out("(delfunction %s)", this.compile(node.left));
12655}
12656
12657Compiler.prototype.compile_return = function(node) {
12658 if (node.left === NIL) {
12659 this.out("(return)");
12660 }
12661 else {
12662 this.out("(return %s)", this.compile(node.left));
12663 }
12664}
12665
12666Compiler.prototype.compile_excall = function(node) {
12667 this.out("(call %s)", this.compile(node.left));
12668}
12669
12670Compiler.prototype.compile_eval = function(node) {
12671 this.out("(eval %s)", this.compile(node.left));
12672}
12673
12674Compiler.prototype.compile_let = function(node) {
12675 var left = "";
12676 if (node.left !== NIL) {
12677 var left = this.compile(node.left);
12678 }
12679 else {
12680 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
12681 if (node.rest !== NIL) {
12682 left += " . " + this.compile(node.rest);
12683 }
12684 var left = "(" + left + ")";
12685 }
12686 var right = this.compile(node.right);
12687 this.out("(let %s %s %s)", node.op, left, right);
12688}
12689
12690// TODO: merge with s:Compiler.compile_let() ?
12691Compiler.prototype.compile_const = function(node) {
12692 var left = "";
12693 if (node.left !== NIL) {
12694 var left = this.compile(node.left);
12695 }
12696 else {
12697 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
12698 if (node.rest !== NIL) {
12699 left += " . " + this.compile(node.rest);
12700 }
12701 var left = "(" + left + ")";
12702 }
12703 var right = this.compile(node.right);
12704 this.out("(const %s %s %s)", node.op, left, right);
12705}
12706
12707Compiler.prototype.compile_unlet = function(node) {
12708 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12709 this.out("(unlet %s)", viml_join(list, " "));
12710}
12711
12712Compiler.prototype.compile_lockvar = function(node) {
12713 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12714 if (node.depth === NIL) {
12715 this.out("(lockvar %s)", viml_join(list, " "));
12716 }
12717 else {
12718 this.out("(lockvar %s %s)", node.depth, viml_join(list, " "));
12719 }
12720}
12721
12722Compiler.prototype.compile_unlockvar = function(node) {
12723 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12724 if (node.depth === NIL) {
12725 this.out("(unlockvar %s)", viml_join(list, " "));
12726 }
12727 else {
12728 this.out("(unlockvar %s %s)", node.depth, viml_join(list, " "));
12729 }
12730}
12731
12732Compiler.prototype.compile_if = function(node) {
12733 this.out("(if %s", this.compile(node.cond));
12734 this.incindent(" ");
12735 this.compile_body(node.body);
12736 this.decindent();
12737 var __c12 = node.elseif;
12738 for (var __i12 = 0; __i12 < __c12.length; ++__i12) {
12739 var enode = __c12[__i12];
12740 this.out(" elseif %s", this.compile(enode.cond));
12741 this.incindent(" ");
12742 this.compile_body(enode.body);
12743 this.decindent();
12744 }
12745 if (node._else !== NIL) {
12746 this.out(" else");
12747 this.incindent(" ");
12748 this.compile_body(node._else.body);
12749 this.decindent();
12750 }
12751 this.incindent(" ");
12752 this.out(")");
12753 this.decindent();
12754}
12755
12756Compiler.prototype.compile_while = function(node) {
12757 this.out("(while %s", this.compile(node.cond));
12758 this.incindent(" ");
12759 this.compile_body(node.body);
12760 this.out(")");
12761 this.decindent();
12762}
12763
12764Compiler.prototype.compile_for = function(node) {
12765 var left = "";
12766 if (node.left !== NIL) {
12767 var left = this.compile(node.left);
12768 }
12769 else {
12770 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
12771 if (node.rest !== NIL) {
12772 left += " . " + this.compile(node.rest);
12773 }
12774 var left = "(" + left + ")";
12775 }
12776 var right = this.compile(node.right);
12777 this.out("(for %s %s", left, right);
12778 this.incindent(" ");
12779 this.compile_body(node.body);
12780 this.out(")");
12781 this.decindent();
12782}
12783
12784Compiler.prototype.compile_continue = function(node) {
12785 this.out("(continue)");
12786}
12787
12788Compiler.prototype.compile_break = function(node) {
12789 this.out("(break)");
12790}
12791
12792Compiler.prototype.compile_try = function(node) {
12793 this.out("(try");
12794 this.incindent(" ");
12795 this.compile_body(node.body);
12796 var __c13 = node.catch;
12797 for (var __i13 = 0; __i13 < __c13.length; ++__i13) {
12798 var cnode = __c13[__i13];
12799 if (cnode.pattern !== NIL) {
12800 this.decindent();
12801 this.out(" catch /%s/", cnode.pattern);
12802 this.incindent(" ");
12803 this.compile_body(cnode.body);
12804 }
12805 else {
12806 this.decindent();
12807 this.out(" catch");
12808 this.incindent(" ");
12809 this.compile_body(cnode.body);
12810 }
12811 }
12812 if (node._finally !== NIL) {
12813 this.decindent();
12814 this.out(" finally");
12815 this.incindent(" ");
12816 this.compile_body(node._finally.body);
12817 }
12818 this.out(")");
12819 this.decindent();
12820}
12821
12822Compiler.prototype.compile_throw = function(node) {
12823 this.out("(throw %s)", this.compile(node.left));
12824}
12825
12826Compiler.prototype.compile_echo = function(node) {
12827 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12828 this.out("(echo %s)", viml_join(list, " "));
12829}
12830
12831Compiler.prototype.compile_echon = function(node) {
12832 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12833 this.out("(echon %s)", viml_join(list, " "));
12834}
12835
12836Compiler.prototype.compile_echohl = function(node) {
12837 this.out("(echohl \"%s\")", viml_escape(node.str, "\\\""));
12838}
12839
12840Compiler.prototype.compile_echomsg = function(node) {
12841 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12842 this.out("(echomsg %s)", viml_join(list, " "));
12843}
12844
12845Compiler.prototype.compile_echoerr = function(node) {
12846 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12847 this.out("(echoerr %s)", viml_join(list, " "));
12848}
12849
12850Compiler.prototype.compile_execute = function(node) {
12851 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12852 this.out("(execute %s)", viml_join(list, " "));
12853}
12854
12855Compiler.prototype.compile_ternary = function(node) {
12856 return viml_printf("(?: %s %s %s)", this.compile(node.cond), this.compile(node.left), this.compile(node.right));
12857}
12858
12859Compiler.prototype.compile_or = function(node) {
12860 return viml_printf("(|| %s %s)", this.compile(node.left), this.compile(node.right));
12861}
12862
12863Compiler.prototype.compile_and = function(node) {
12864 return viml_printf("(&& %s %s)", this.compile(node.left), this.compile(node.right));
12865}
12866
12867Compiler.prototype.compile_equal = function(node) {
12868 return viml_printf("(== %s %s)", this.compile(node.left), this.compile(node.right));
12869}
12870
12871Compiler.prototype.compile_equalci = function(node) {
12872 return viml_printf("(==? %s %s)", this.compile(node.left), this.compile(node.right));
12873}
12874
12875Compiler.prototype.compile_equalcs = function(node) {
12876 return viml_printf("(==# %s %s)", this.compile(node.left), this.compile(node.right));
12877}
12878
12879Compiler.prototype.compile_nequal = function(node) {
12880 return viml_printf("(!= %s %s)", this.compile(node.left), this.compile(node.right));
12881}
12882
12883Compiler.prototype.compile_nequalci = function(node) {
12884 return viml_printf("(!=? %s %s)", this.compile(node.left), this.compile(node.right));
12885}
12886
12887Compiler.prototype.compile_nequalcs = function(node) {
12888 return viml_printf("(!=# %s %s)", this.compile(node.left), this.compile(node.right));
12889}
12890
12891Compiler.prototype.compile_greater = function(node) {
12892 return viml_printf("(> %s %s)", this.compile(node.left), this.compile(node.right));
12893}
12894
12895Compiler.prototype.compile_greaterci = function(node) {
12896 return viml_printf("(>? %s %s)", this.compile(node.left), this.compile(node.right));
12897}
12898
12899Compiler.prototype.compile_greatercs = function(node) {
12900 return viml_printf("(># %s %s)", this.compile(node.left), this.compile(node.right));
12901}
12902
12903Compiler.prototype.compile_gequal = function(node) {
12904 return viml_printf("(>= %s %s)", this.compile(node.left), this.compile(node.right));
12905}
12906
12907Compiler.prototype.compile_gequalci = function(node) {
12908 return viml_printf("(>=? %s %s)", this.compile(node.left), this.compile(node.right));
12909}
12910
12911Compiler.prototype.compile_gequalcs = function(node) {
12912 return viml_printf("(>=# %s %s)", this.compile(node.left), this.compile(node.right));
12913}
12914
12915Compiler.prototype.compile_smaller = function(node) {
12916 return viml_printf("(< %s %s)", this.compile(node.left), this.compile(node.right));
12917}
12918
12919Compiler.prototype.compile_smallerci = function(node) {
12920 return viml_printf("(<? %s %s)", this.compile(node.left), this.compile(node.right));
12921}
12922
12923Compiler.prototype.compile_smallercs = function(node) {
12924 return viml_printf("(<# %s %s)", this.compile(node.left), this.compile(node.right));
12925}
12926
12927Compiler.prototype.compile_sequal = function(node) {
12928 return viml_printf("(<= %s %s)", this.compile(node.left), this.compile(node.right));
12929}
12930
12931Compiler.prototype.compile_sequalci = function(node) {
12932 return viml_printf("(<=? %s %s)", this.compile(node.left), this.compile(node.right));
12933}
12934
12935Compiler.prototype.compile_sequalcs = function(node) {
12936 return viml_printf("(<=# %s %s)", this.compile(node.left), this.compile(node.right));
12937}
12938
12939Compiler.prototype.compile_match = function(node) {
12940 return viml_printf("(=~ %s %s)", this.compile(node.left), this.compile(node.right));
12941}
12942
12943Compiler.prototype.compile_matchci = function(node) {
12944 return viml_printf("(=~? %s %s)", this.compile(node.left), this.compile(node.right));
12945}
12946
12947Compiler.prototype.compile_matchcs = function(node) {
12948 return viml_printf("(=~# %s %s)", this.compile(node.left), this.compile(node.right));
12949}
12950
12951Compiler.prototype.compile_nomatch = function(node) {
12952 return viml_printf("(!~ %s %s)", this.compile(node.left), this.compile(node.right));
12953}
12954
12955Compiler.prototype.compile_nomatchci = function(node) {
12956 return viml_printf("(!~? %s %s)", this.compile(node.left), this.compile(node.right));
12957}
12958
12959Compiler.prototype.compile_nomatchcs = function(node) {
12960 return viml_printf("(!~# %s %s)", this.compile(node.left), this.compile(node.right));
12961}
12962
12963Compiler.prototype.compile_is = function(node) {
12964 return viml_printf("(is %s %s)", this.compile(node.left), this.compile(node.right));
12965}
12966
12967Compiler.prototype.compile_isci = function(node) {
12968 return viml_printf("(is? %s %s)", this.compile(node.left), this.compile(node.right));
12969}
12970
12971Compiler.prototype.compile_iscs = function(node) {
12972 return viml_printf("(is# %s %s)", this.compile(node.left), this.compile(node.right));
12973}
12974
12975Compiler.prototype.compile_isnot = function(node) {
12976 return viml_printf("(isnot %s %s)", this.compile(node.left), this.compile(node.right));
12977}
12978
12979Compiler.prototype.compile_isnotci = function(node) {
12980 return viml_printf("(isnot? %s %s)", this.compile(node.left), this.compile(node.right));
12981}
12982
12983Compiler.prototype.compile_isnotcs = function(node) {
12984 return viml_printf("(isnot# %s %s)", this.compile(node.left), this.compile(node.right));
12985}
12986
12987Compiler.prototype.compile_add = function(node) {
12988 return viml_printf("(+ %s %s)", this.compile(node.left), this.compile(node.right));
12989}
12990
12991Compiler.prototype.compile_subtract = function(node) {
12992 return viml_printf("(- %s %s)", this.compile(node.left), this.compile(node.right));
12993}
12994
12995Compiler.prototype.compile_concat = function(node) {
12996 return viml_printf("(concat %s %s)", this.compile(node.left), this.compile(node.right));
12997}
12998
12999Compiler.prototype.compile_multiply = function(node) {
13000 return viml_printf("(* %s %s)", this.compile(node.left), this.compile(node.right));
13001}
13002
13003Compiler.prototype.compile_divide = function(node) {
13004 return viml_printf("(/ %s %s)", this.compile(node.left), this.compile(node.right));
13005}
13006
13007Compiler.prototype.compile_remainder = function(node) {
13008 return viml_printf("(%% %s %s)", this.compile(node.left), this.compile(node.right));
13009}
13010
13011Compiler.prototype.compile_not = function(node) {
13012 return viml_printf("(! %s)", this.compile(node.left));
13013}
13014
13015Compiler.prototype.compile_plus = function(node) {
13016 return viml_printf("(+ %s)", this.compile(node.left));
13017}
13018
13019Compiler.prototype.compile_minus = function(node) {
13020 return viml_printf("(- %s)", this.compile(node.left));
13021}
13022
13023Compiler.prototype.compile_subscript = function(node) {
13024 return viml_printf("(subscript %s %s)", this.compile(node.left), this.compile(node.right));
13025}
13026
13027Compiler.prototype.compile_slice = function(node) {
13028 var r0 = node.rlist[0] === NIL ? "nil" : this.compile(node.rlist[0]);
13029 var r1 = node.rlist[1] === NIL ? "nil" : this.compile(node.rlist[1]);
13030 return viml_printf("(slice %s %s %s)", this.compile(node.left), r0, r1);
13031}
13032
13033Compiler.prototype.compile_dot = function(node) {
13034 return viml_printf("(dot %s %s)", this.compile(node.left), this.compile(node.right));
13035}
13036
13037Compiler.prototype.compile_method = function(node) {
13038 return viml_printf("(method %s %s)", this.compile(node.left), this.compile(node.right));
13039}
13040
13041Compiler.prototype.compile_call = function(node) {
13042 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
13043 if (viml_empty(rlist)) {
13044 return viml_printf("(%s)", this.compile(node.left));
13045 }
13046 else {
13047 return viml_printf("(%s %s)", this.compile(node.left), viml_join(rlist, " "));
13048 }
13049}
13050
13051Compiler.prototype.compile_number = function(node) {
13052 return node.value;
13053}
13054
13055Compiler.prototype.compile_blob = function(node) {
13056 return node.value;
13057}
13058
13059Compiler.prototype.compile_string = function(node) {
13060 return node.value;
13061}
13062
13063Compiler.prototype.compile_list = function(node) {
13064 var value = node.value.map((function(vval) { return this.compile(vval); }).bind(this));
13065 if (viml_empty(value)) {
13066 return "(list)";
13067 }
13068 else {
13069 return viml_printf("(list %s)", viml_join(value, " "));
13070 }
13071}
13072
13073Compiler.prototype.compile_dict = function(node) {
13074 var value = node.value.map((function(vval) { return "(" + this.compile(vval[0]) + " " + this.compile(vval[1]) + ")"; }).bind(this));
13075 if (viml_empty(value)) {
13076 return "(dict)";
13077 }
13078 else {
13079 return viml_printf("(dict %s)", viml_join(value, " "));
13080 }
13081}
13082
13083Compiler.prototype.compile_option = function(node) {
13084 return node.value;
13085}
13086
13087Compiler.prototype.compile_identifier = function(node) {
13088 return node.value;
13089}
13090
13091Compiler.prototype.compile_curlyname = function(node) {
13092 return viml_join(node.value.map((function(vval) { return this.compile(vval); }).bind(this)), "");
13093}
13094
13095Compiler.prototype.compile_env = function(node) {
13096 return node.value;
13097}
13098
13099Compiler.prototype.compile_reg = function(node) {
13100 return node.value;
13101}
13102
13103Compiler.prototype.compile_curlynamepart = function(node) {
13104 return node.value;
13105}
13106
13107Compiler.prototype.compile_curlynameexpr = function(node) {
13108 return "{" + this.compile(node.value) + "}";
13109}
13110
13111Compiler.prototype.escape_string = function(str) {
13112 var m = {"\n":"\\n", "\t":"\\t", "\r":"\\r"};
13113 var out = "\"";
13114 var __c14 = viml_range(viml_len(str));
13115 for (var __i14 = 0; __i14 < __c14.length; ++__i14) {
13116 var i = __c14[__i14];
13117 var c = str[i];
13118 if (viml_has_key(m, c)) {
13119 out += m[c];
13120 }
13121 else {
13122 out += c;
13123 }
13124 }
13125 out += "\"";
13126 return out;
13127}
13128
13129Compiler.prototype.compile_lambda = function(node) {
13130 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
13131 return viml_printf("(lambda (%s) %s)", viml_join(rlist, " "), this.compile(node.left));
13132}
13133
13134Compiler.prototype.compile_heredoc = function(node) {
13135 if (viml_empty(node.rlist)) {
13136 var rlist = "(list)";
13137 }
13138 else {
13139 var rlist = "(list " + viml_join(node.rlist.map((function(vval) { return this.escape_string(vval); }).bind(this)), " ") + ")";
13140 }
13141 if (viml_empty(node.body)) {
13142 var body = "(list)";
13143 }
13144 else {
13145 var body = "(list " + viml_join(node.body.map((function(vval) { return this.escape_string(vval); }).bind(this)), " ") + ")";
13146 }
13147 var op = this.escape_string(node.op);
13148 return viml_printf("(heredoc %s %s %s)", rlist, op, body);
13149}
13150
13151// TODO: under construction
13152function RegexpParser() { this.__init__.apply(this, arguments); }
13153RegexpParser.prototype.RE_VERY_NOMAGIC = 1;
13154RegexpParser.prototype.RE_NOMAGIC = 2;
13155RegexpParser.prototype.RE_MAGIC = 3;
13156RegexpParser.prototype.RE_VERY_MAGIC = 4;
13157RegexpParser.prototype.__init__ = function(reader, cmd, delim) {
13158 this.reader = reader;
13159 this.cmd = cmd;
13160 this.delim = delim;
13161 this.reg_magic = this.RE_MAGIC;
13162}
13163
13164RegexpParser.prototype.isend = function(c) {
13165 return c == "<EOF>" || c == "<EOL>" || c == this.delim;
13166}
13167
13168RegexpParser.prototype.parse_regexp = function() {
13169 var prevtoken = "";
13170 var ntoken = "";
13171 var ret = [];
13172 if (this.reader.peekn(4) == "\\%#=") {
13173 var epos = this.reader.getpos();
13174 var token = this.reader.getn(5);
13175 if (token != "\\%#=0" && token != "\\%#=1" && token != "\\%#=2") {
13176 throw Err("E864: \\%#= can only be followed by 0, 1, or 2", epos);
13177 }
13178 viml_add(ret, token);
13179 }
13180 while (!this.isend(this.reader.peek())) {
13181 var prevtoken = ntoken;
13182 var __tmp = this.get_token();
13183 var token = __tmp[0];
13184 var ntoken = __tmp[1];
13185 if (ntoken == "\\m") {
13186 this.reg_magic = this.RE_MAGIC;
13187 }
13188 else if (ntoken == "\\M") {
13189 this.reg_magic = this.RE_NOMAGIC;
13190 }
13191 else if (ntoken == "\\v") {
13192 this.reg_magic = this.RE_VERY_MAGIC;
13193 }
13194 else if (ntoken == "\\V") {
13195 this.reg_magic = this.RE_VERY_NOMAGIC;
13196 }
13197 else if (ntoken == "\\*") {
13198 // '*' is not magic as the very first character.
13199 if (prevtoken == "" || prevtoken == "\\^" || prevtoken == "\\&" || prevtoken == "\\|" || prevtoken == "\\(") {
13200 var ntoken = "*";
13201 }
13202 }
13203 else if (ntoken == "\\^") {
13204 // '^' is only magic as the very first character.
13205 if (this.reg_magic != this.RE_VERY_MAGIC && prevtoken != "" && prevtoken != "\\&" && prevtoken != "\\|" && prevtoken != "\\n" && prevtoken != "\\(" && prevtoken != "\\%(") {
13206 var ntoken = "^";
13207 }
13208 }
13209 else if (ntoken == "\\$") {
13210 // '$' is only magic as the very last character
13211 var pos = this.reader.tell();
13212 if (this.reg_magic != this.RE_VERY_MAGIC) {
13213 while (!this.isend(this.reader.peek())) {
13214 var __tmp = this.get_token();
13215 var t = __tmp[0];
13216 var n = __tmp[1];
13217 // XXX: Vim doesn't check \v and \V?
13218 if (n == "\\c" || n == "\\C" || n == "\\m" || n == "\\M" || n == "\\Z") {
13219 continue;
13220 }
13221 if (n != "\\|" && n != "\\&" && n != "\\n" && n != "\\)") {
13222 var ntoken = "$";
13223 }
13224 break;
13225 }
13226 }
13227 this.reader.seek_set(pos);
13228 }
13229 else if (ntoken == "\\?") {
13230 // '?' is literal in '?' command.
13231 if (this.cmd == "?") {
13232 var ntoken = "?";
13233 }
13234 }
13235 viml_add(ret, ntoken);
13236 }
13237 return ret;
13238}
13239
13240// @return [actual_token, normalized_token]
13241RegexpParser.prototype.get_token = function() {
13242 if (this.reg_magic == this.RE_VERY_MAGIC) {
13243 return this.get_token_very_magic();
13244 }
13245 else if (this.reg_magic == this.RE_MAGIC) {
13246 return this.get_token_magic();
13247 }
13248 else if (this.reg_magic == this.RE_NOMAGIC) {
13249 return this.get_token_nomagic();
13250 }
13251 else if (this.reg_magic == this.RE_VERY_NOMAGIC) {
13252 return this.get_token_very_nomagic();
13253 }
13254}
13255
13256RegexpParser.prototype.get_token_very_magic = function() {
13257 if (this.isend(this.reader.peek())) {
13258 return ["<END>", "<END>"];
13259 }
13260 var c = this.reader.get();
13261 if (c == "\\") {
13262 return this.get_token_backslash_common();
13263 }
13264 else if (c == "*") {
13265 return ["*", "\\*"];
13266 }
13267 else if (c == "+") {
13268 return ["+", "\\+"];
13269 }
13270 else if (c == "=") {
13271 return ["=", "\\="];
13272 }
13273 else if (c == "?") {
13274 return ["?", "\\?"];
13275 }
13276 else if (c == "{") {
13277 return this.get_token_brace("{");
13278 }
13279 else if (c == "@") {
13280 return this.get_token_at("@");
13281 }
13282 else if (c == "^") {
13283 return ["^", "\\^"];
13284 }
13285 else if (c == "$") {
13286 return ["$", "\\$"];
13287 }
13288 else if (c == ".") {
13289 return [".", "\\."];
13290 }
13291 else if (c == "<") {
13292 return ["<", "\\<"];
13293 }
13294 else if (c == ">") {
13295 return [">", "\\>"];
13296 }
13297 else if (c == "%") {
13298 return this.get_token_percent("%");
13299 }
13300 else if (c == "[") {
13301 return this.get_token_sq("[");
13302 }
13303 else if (c == "~") {
13304 return ["~", "\\~"];
13305 }
13306 else if (c == "|") {
13307 return ["|", "\\|"];
13308 }
13309 else if (c == "&") {
13310 return ["&", "\\&"];
13311 }
13312 else if (c == "(") {
13313 return ["(", "\\("];
13314 }
13315 else if (c == ")") {
13316 return [")", "\\)"];
13317 }
13318 return [c, c];
13319}
13320
13321RegexpParser.prototype.get_token_magic = function() {
13322 if (this.isend(this.reader.peek())) {
13323 return ["<END>", "<END>"];
13324 }
13325 var c = this.reader.get();
13326 if (c == "\\") {
13327 var pos = this.reader.tell();
13328 var c = this.reader.get();
13329 if (c == "+") {
13330 return ["\\+", "\\+"];
13331 }
13332 else if (c == "=") {
13333 return ["\\=", "\\="];
13334 }
13335 else if (c == "?") {
13336 return ["\\?", "\\?"];
13337 }
13338 else if (c == "{") {
13339 return this.get_token_brace("\\{");
13340 }
13341 else if (c == "@") {
13342 return this.get_token_at("\\@");
13343 }
13344 else if (c == "<") {
13345 return ["\\<", "\\<"];
13346 }
13347 else if (c == ">") {
13348 return ["\\>", "\\>"];
13349 }
13350 else if (c == "%") {
13351 return this.get_token_percent("\\%");
13352 }
13353 else if (c == "|") {
13354 return ["\\|", "\\|"];
13355 }
13356 else if (c == "&") {
13357 return ["\\&", "\\&"];
13358 }
13359 else if (c == "(") {
13360 return ["\\(", "\\("];
13361 }
13362 else if (c == ")") {
13363 return ["\\)", "\\)"];
13364 }
13365 this.reader.seek_set(pos);
13366 return this.get_token_backslash_common();
13367 }
13368 else if (c == "*") {
13369 return ["*", "\\*"];
13370 }
13371 else if (c == "^") {
13372 return ["^", "\\^"];
13373 }
13374 else if (c == "$") {
13375 return ["$", "\\$"];
13376 }
13377 else if (c == ".") {
13378 return [".", "\\."];
13379 }
13380 else if (c == "[") {
13381 return this.get_token_sq("[");
13382 }
13383 else if (c == "~") {
13384 return ["~", "\\~"];
13385 }
13386 return [c, c];
13387}
13388
13389RegexpParser.prototype.get_token_nomagic = function() {
13390 if (this.isend(this.reader.peek())) {
13391 return ["<END>", "<END>"];
13392 }
13393 var c = this.reader.get();
13394 if (c == "\\") {
13395 var pos = this.reader.tell();
13396 var c = this.reader.get();
13397 if (c == "*") {
13398 return ["\\*", "\\*"];
13399 }
13400 else if (c == "+") {
13401 return ["\\+", "\\+"];
13402 }
13403 else if (c == "=") {
13404 return ["\\=", "\\="];
13405 }
13406 else if (c == "?") {
13407 return ["\\?", "\\?"];
13408 }
13409 else if (c == "{") {
13410 return this.get_token_brace("\\{");
13411 }
13412 else if (c == "@") {
13413 return this.get_token_at("\\@");
13414 }
13415 else if (c == ".") {
13416 return ["\\.", "\\."];
13417 }
13418 else if (c == "<") {
13419 return ["\\<", "\\<"];
13420 }
13421 else if (c == ">") {
13422 return ["\\>", "\\>"];
13423 }
13424 else if (c == "%") {
13425 return this.get_token_percent("\\%");
13426 }
13427 else if (c == "~") {
13428 return ["\\~", "\\^"];
13429 }
13430 else if (c == "[") {
13431 return this.get_token_sq("\\[");
13432 }
13433 else if (c == "|") {
13434 return ["\\|", "\\|"];
13435 }
13436 else if (c == "&") {
13437 return ["\\&", "\\&"];
13438 }
13439 else if (c == "(") {
13440 return ["\\(", "\\("];
13441 }
13442 else if (c == ")") {
13443 return ["\\)", "\\)"];
13444 }
13445 this.reader.seek_set(pos);
13446 return this.get_token_backslash_common();
13447 }
13448 else if (c == "^") {
13449 return ["^", "\\^"];
13450 }
13451 else if (c == "$") {
13452 return ["$", "\\$"];
13453 }
13454 return [c, c];
13455}
13456
13457RegexpParser.prototype.get_token_very_nomagic = function() {
13458 if (this.isend(this.reader.peek())) {
13459 return ["<END>", "<END>"];
13460 }
13461 var c = this.reader.get();
13462 if (c == "\\") {
13463 var pos = this.reader.tell();
13464 var c = this.reader.get();
13465 if (c == "*") {
13466 return ["\\*", "\\*"];
13467 }
13468 else if (c == "+") {
13469 return ["\\+", "\\+"];
13470 }
13471 else if (c == "=") {
13472 return ["\\=", "\\="];
13473 }
13474 else if (c == "?") {
13475 return ["\\?", "\\?"];
13476 }
13477 else if (c == "{") {
13478 return this.get_token_brace("\\{");
13479 }
13480 else if (c == "@") {
13481 return this.get_token_at("\\@");
13482 }
13483 else if (c == "^") {
13484 return ["\\^", "\\^"];
13485 }
13486 else if (c == "$") {
13487 return ["\\$", "\\$"];
13488 }
13489 else if (c == "<") {
13490 return ["\\<", "\\<"];
13491 }
13492 else if (c == ">") {
13493 return ["\\>", "\\>"];
13494 }
13495 else if (c == "%") {
13496 return this.get_token_percent("\\%");
13497 }
13498 else if (c == "~") {
13499 return ["\\~", "\\~"];
13500 }
13501 else if (c == "[") {
13502 return this.get_token_sq("\\[");
13503 }
13504 else if (c == "|") {
13505 return ["\\|", "\\|"];
13506 }
13507 else if (c == "&") {
13508 return ["\\&", "\\&"];
13509 }
13510 else if (c == "(") {
13511 return ["\\(", "\\("];
13512 }
13513 else if (c == ")") {
13514 return ["\\)", "\\)"];
13515 }
13516 this.reader.seek_set(pos);
13517 return this.get_token_backslash_common();
13518 }
13519 return [c, c];
13520}
13521
13522RegexpParser.prototype.get_token_backslash_common = function() {
13523 var cclass = "iIkKfFpPsSdDxXoOwWhHaAlLuU";
13524 var c = this.reader.get();
13525 if (c == "\\") {
13526 return ["\\\\", "\\\\"];
13527 }
13528 else if (viml_stridx(cclass, c) != -1) {
13529 return ["\\" + c, "\\" + c];
13530 }
13531 else if (c == "_") {
13532 var epos = this.reader.getpos();
13533 var c = this.reader.get();
13534 if (viml_stridx(cclass, c) != -1) {
13535 return ["\\_" + c, "\\_ . c"];
13536 }
13537 else if (c == "^") {
13538 return ["\\_^", "\\_^"];
13539 }
13540 else if (c == "$") {
13541 return ["\\_$", "\\_$"];
13542 }
13543 else if (c == ".") {
13544 return ["\\_.", "\\_."];
13545 }
13546 else if (c == "[") {
13547 return this.get_token_sq("\\_[");
13548 }
13549 throw Err("E63: Invalid use of \\_", epos);
13550 }
13551 else if (viml_stridx("etrb", c) != -1) {
13552 return ["\\" + c, "\\" + c];
13553 }
13554 else if (viml_stridx("123456789", c) != -1) {
13555 return ["\\" + c, "\\" + c];
13556 }
13557 else if (c == "z") {
13558 var epos = this.reader.getpos();
13559 var c = this.reader.get();
13560 if (viml_stridx("123456789", c) != -1) {
13561 return ["\\z" + c, "\\z" + c];
13562 }
13563 else if (c == "s") {
13564 return ["\\zs", "\\zs"];
13565 }
13566 else if (c == "e") {
13567 return ["\\ze", "\\ze"];
13568 }
13569 else if (c == "(") {
13570 return ["\\z(", "\\z("];
13571 }
13572 throw Err("E68: Invalid character after \\z", epos);
13573 }
13574 else if (viml_stridx("cCmMvVZ", c) != -1) {
13575 return ["\\" + c, "\\" + c];
13576 }
13577 else if (c == "%") {
13578 var epos = this.reader.getpos();
13579 var c = this.reader.get();
13580 if (c == "d") {
13581 var r = this.getdecchrs();
13582 if (r != "") {
13583 return ["\\%d" + r, "\\%d" + r];
13584 }
13585 }
13586 else if (c == "o") {
13587 var r = this.getoctchrs();
13588 if (r != "") {
13589 return ["\\%o" + r, "\\%o" + r];
13590 }
13591 }
13592 else if (c == "x") {
13593 var r = this.gethexchrs(2);
13594 if (r != "") {
13595 return ["\\%x" + r, "\\%x" + r];
13596 }
13597 }
13598 else if (c == "u") {
13599 var r = this.gethexchrs(4);
13600 if (r != "") {
13601 return ["\\%u" + r, "\\%u" + r];
13602 }
13603 }
13604 else if (c == "U") {
13605 var r = this.gethexchrs(8);
13606 if (r != "") {
13607 return ["\\%U" + r, "\\%U" + r];
13608 }
13609 }
13610 throw Err("E678: Invalid character after \\%[dxouU]", epos);
13611 }
13612 return ["\\" + c, c];
13613}
13614
13615// \{}
13616RegexpParser.prototype.get_token_brace = function(pre) {
13617 var r = "";
13618 var minus = "";
13619 var comma = "";
13620 var n = "";
13621 var m = "";
13622 if (this.reader.p(0) == "-") {
13623 var minus = this.reader.get();
13624 r += minus;
13625 }
13626 if (isdigit(this.reader.p(0))) {
13627 var n = this.reader.read_digit();
13628 r += n;
13629 }
13630 if (this.reader.p(0) == ",") {
13631 var comma = this.rader.get();
13632 r += comma;
13633 }
13634 if (isdigit(this.reader.p(0))) {
13635 var m = this.reader.read_digit();
13636 r += m;
13637 }
13638 if (this.reader.p(0) == "\\") {
13639 r += this.reader.get();
13640 }
13641 if (this.reader.p(0) != "}") {
13642 throw Err("E554: Syntax error in \\{...}", this.reader.getpos());
13643 }
13644 this.reader.get();
13645 return [pre + r, "\\{" + minus + n + comma + m + "}"];
13646}
13647
13648// \[]
13649RegexpParser.prototype.get_token_sq = function(pre) {
13650 var start = this.reader.tell();
13651 var r = "";
13652 // Complement of range
13653 if (this.reader.p(0) == "^") {
13654 r += this.reader.get();
13655 }
13656 // At the start ']' and '-' mean the literal character.
13657 if (this.reader.p(0) == "]" || this.reader.p(0) == "-") {
13658 r += this.reader.get();
13659 }
13660 while (TRUE) {
13661 var startc = 0;
13662 var c = this.reader.p(0);
13663 if (this.isend(c)) {
13664 // If there is no matching ']', we assume the '[' is a normal character.
13665 this.reader.seek_set(start);
13666 return [pre, "["];
13667 }
13668 else if (c == "]") {
13669 this.reader.seek_cur(1);
13670 return [pre + r + "]", "\\[" + r + "]"];
13671 }
13672 else if (c == "[") {
13673 var e = this.get_token_sq_char_class();
13674 if (e == "") {
13675 var e = this.get_token_sq_equi_class();
13676 if (e == "") {
13677 var e = this.get_token_sq_coll_element();
13678 if (e == "") {
13679 var __tmp = this.get_token_sq_c();
13680 var e = __tmp[0];
13681 var startc = __tmp[1];
13682 }
13683 }
13684 }
13685 r += e;
13686 }
13687 else {
13688 var __tmp = this.get_token_sq_c();
13689 var e = __tmp[0];
13690 var startc = __tmp[1];
13691 r += e;
13692 }
13693 if (startc != 0 && this.reader.p(0) == "-" && !this.isend(this.reader.p(1)) && !(this.reader.p(1) == "\\" && this.reader.p(2) == "n")) {
13694 this.reader.seek_cur(1);
13695 r += "-";
13696 var c = this.reader.p(0);
13697 if (c == "[") {
13698 var e = this.get_token_sq_coll_element();
13699 if (e != "") {
13700 var endc = viml_char2nr(e[2]);
13701 }
13702 else {
13703 var __tmp = this.get_token_sq_c();
13704 var e = __tmp[0];
13705 var endc = __tmp[1];
13706 }
13707 r += e;
13708 }
13709 else {
13710 var __tmp = this.get_token_sq_c();
13711 var e = __tmp[0];
13712 var endc = __tmp[1];
13713 r += e;
13714 }
13715 if (startc > endc || endc > startc + 256) {
13716 throw Err("E16: Invalid range", this.reader.getpos());
13717 }
13718 }
13719 }
13720}
13721
13722// [c]
13723RegexpParser.prototype.get_token_sq_c = function() {
13724 var c = this.reader.p(0);
13725 if (c == "\\") {
13726 this.reader.seek_cur(1);
13727 var c = this.reader.p(0);
13728 if (c == "n") {
13729 this.reader.seek_cur(1);
13730 return ["\\n", 0];
13731 }
13732 else if (c == "r") {
13733 this.reader.seek_cur(1);
13734 return ["\\r", 13];
13735 }
13736 else if (c == "t") {
13737 this.reader.seek_cur(1);
13738 return ["\\t", 9];
13739 }
13740 else if (c == "e") {
13741 this.reader.seek_cur(1);
13742 return ["\\e", 27];
13743 }
13744 else if (c == "b") {
13745 this.reader.seek_cur(1);
13746 return ["\\b", 8];
13747 }
13748 else if (viml_stridx("]^-\\", c) != -1) {
13749 this.reader.seek_cur(1);
13750 return ["\\" + c, viml_char2nr(c)];
13751 }
13752 else if (viml_stridx("doxuU", c) != -1) {
13753 var __tmp = this.get_token_sq_coll_char();
13754 var c = __tmp[0];
13755 var n = __tmp[1];
13756 return [c, n];
13757 }
13758 else {
13759 return ["\\", viml_char2nr("\\")];
13760 }
13761 }
13762 else if (c == "-") {
13763 this.reader.seek_cur(1);
13764 return ["-", viml_char2nr("-")];
13765 }
13766 else {
13767 this.reader.seek_cur(1);
13768 return [c, viml_char2nr(c)];
13769 }
13770}
13771
13772// [\d123]
13773RegexpParser.prototype.get_token_sq_coll_char = function() {
13774 var pos = this.reader.tell();
13775 var c = this.reader.get();
13776 if (c == "d") {
13777 var r = this.getdecchrs();
13778 var n = viml_str2nr(r, 10);
13779 }
13780 else if (c == "o") {
13781 var r = this.getoctchrs();
13782 var n = viml_str2nr(r, 8);
13783 }
13784 else if (c == "x") {
13785 var r = this.gethexchrs(2);
13786 var n = viml_str2nr(r, 16);
13787 }
13788 else if (c == "u") {
13789 var r = this.gethexchrs(4);
13790 var n = viml_str2nr(r, 16);
13791 }
13792 else if (c == "U") {
13793 var r = this.gethexchrs(8);
13794 var n = viml_str2nr(r, 16);
13795 }
13796 else {
13797 var r = "";
13798 }
13799 if (r == "") {
13800 this.reader.seek_set(pos);
13801 return "\\";
13802 }
13803 return ["\\" + c + r, n];
13804}
13805
13806// [[.a.]]
13807RegexpParser.prototype.get_token_sq_coll_element = function() {
13808 if (this.reader.p(0) == "[" && this.reader.p(1) == "." && !this.isend(this.reader.p(2)) && this.reader.p(3) == "." && this.reader.p(4) == "]") {
13809 return this.reader.getn(5);
13810 }
13811 return "";
13812}
13813
13814// [[=a=]]
13815RegexpParser.prototype.get_token_sq_equi_class = function() {
13816 if (this.reader.p(0) == "[" && this.reader.p(1) == "=" && !this.isend(this.reader.p(2)) && this.reader.p(3) == "=" && this.reader.p(4) == "]") {
13817 return this.reader.getn(5);
13818 }
13819 return "";
13820}
13821
13822// [[:alpha:]]
13823RegexpParser.prototype.get_token_sq_char_class = function() {
13824 var class_names = ["alnum", "alpha", "blank", "cntrl", "digit", "graph", "lower", "print", "punct", "space", "upper", "xdigit", "tab", "return", "backspace", "escape"];
13825 var pos = this.reader.tell();
13826 if (this.reader.p(0) == "[" && this.reader.p(1) == ":") {
13827 this.reader.seek_cur(2);
13828 var r = this.reader.read_alpha();
13829 if (this.reader.p(0) == ":" && this.reader.p(1) == "]") {
13830 this.reader.seek_cur(2);
13831 var __c15 = class_names;
13832 for (var __i15 = 0; __i15 < __c15.length; ++__i15) {
13833 var name = __c15[__i15];
13834 if (r == name) {
13835 return "[:" + name + ":]";
13836 }
13837 }
13838 }
13839 }
13840 this.reader.seek_set(pos);
13841 return "";
13842}
13843
13844// \@...
13845RegexpParser.prototype.get_token_at = function(pre) {
13846 var epos = this.reader.getpos();
13847 var c = this.reader.get();
13848 if (c == ">") {
13849 return [pre + ">", "\\@>"];
13850 }
13851 else if (c == "=") {
13852 return [pre + "=", "\\@="];
13853 }
13854 else if (c == "!") {
13855 return [pre + "!", "\\@!"];
13856 }
13857 else if (c == "<") {
13858 var c = this.reader.get();
13859 if (c == "=") {
13860 return [pre + "<=", "\\@<="];
13861 }
13862 else if (c == "!") {
13863 return [pre + "<!", "\\@<!"];
13864 }
13865 }
13866 throw Err("E64: @ follows nothing", epos);
13867}
13868
13869// \%...
13870RegexpParser.prototype.get_token_percent = function(pre) {
13871 var c = this.reader.get();
13872 if (c == "^") {
13873 return [pre + "^", "\\%^"];
13874 }
13875 else if (c == "$") {
13876 return [pre + "$", "\\%$"];
13877 }
13878 else if (c == "V") {
13879 return [pre + "V", "\\%V"];
13880 }
13881 else if (c == "#") {
13882 return [pre + "#", "\\%#"];
13883 }
13884 else if (c == "[") {
13885 return this.get_token_percent_sq(pre + "[");
13886 }
13887 else if (c == "(") {
13888 return [pre + "(", "\\%("];
13889 }
13890 else {
13891 return this.get_token_mlcv(pre);
13892 }
13893}
13894
13895// \%[]
13896RegexpParser.prototype.get_token_percent_sq = function(pre) {
13897 var r = "";
13898 while (TRUE) {
13899 var c = this.reader.peek();
13900 if (this.isend(c)) {
13901 throw Err("E69: Missing ] after \\%[", this.reader.getpos());
13902 }
13903 else if (c == "]") {
13904 if (r == "") {
13905 throw Err("E70: Empty \\%[", this.reader.getpos());
13906 }
13907 this.reader.seek_cur(1);
13908 break;
13909 }
13910 this.reader.seek_cur(1);
13911 r += c;
13912 }
13913 return [pre + r + "]", "\\%[" + r + "]"];
13914}
13915
13916// \%'m \%l \%c \%v
13917RegexpParser.prototype.get_token_mlvc = function(pre) {
13918 var r = "";
13919 var cmp = "";
13920 if (this.reader.p(0) == "<" || this.reader.p(0) == ">") {
13921 var cmp = this.reader.get();
13922 r += cmp;
13923 }
13924 if (this.reader.p(0) == "'") {
13925 r += this.reader.get();
13926 var c = this.reader.p(0);
13927 if (this.isend(c)) {
13928 // FIXME: Should be error? Vim allow this.
13929 var c = "";
13930 }
13931 else {
13932 var c = this.reader.get();
13933 }
13934 return [pre + r + c, "\\%" + cmp + "'" + c];
13935 }
13936 else if (isdigit(this.reader.p(0))) {
13937 var d = this.reader.read_digit();
13938 r += d;
13939 var c = this.reader.p(0);
13940 if (c == "l") {
13941 this.reader.get();
13942 return [pre + r + "l", "\\%" + cmp + d + "l"];
13943 }
13944 else if (c == "c") {
13945 this.reader.get();
13946 return [pre + r + "c", "\\%" + cmp + d + "c"];
13947 }
13948 else if (c == "v") {
13949 this.reader.get();
13950 return [pre + r + "v", "\\%" + cmp + d + "v"];
13951 }
13952 }
13953 throw Err("E71: Invalid character after %", this.reader.getpos());
13954}
13955
13956RegexpParser.prototype.getdecchrs = function() {
13957 return this.reader.read_digit();
13958}
13959
13960RegexpParser.prototype.getoctchrs = function() {
13961 return this.reader.read_odigit();
13962}
13963
13964RegexpParser.prototype.gethexchrs = function(n) {
13965 var r = "";
13966 var __c16 = viml_range(n);
13967 for (var __i16 = 0; __i16 < __c16.length; ++__i16) {
13968 var i = __c16[__i16];
13969 var c = this.reader.peek();
13970 if (!isxdigit(c)) {
13971 break;
13972 }
13973 r += this.reader.get();
13974 }
13975 return r;
13976}
13977
13978if (__webpack_require__.c[__webpack_require__.s] === module) {
13979 main();
13980}
13981else {
13982 module.exports = {
13983 VimLParser: VimLParser,
13984 StringReader: StringReader,
13985 Compiler: Compiler
13986 };
13987}
13988
13989
13990/***/ }),
13991/* 53 */
13992/***/ ((__unused_webpack_module, exports) => {
13993
13994"use strict";
13995
13996Object.defineProperty(exports, "__esModule", ({ value: true }));
13997exports.notIdentifierPattern = exports.expandPattern = exports.featurePattern = exports.commandPattern = exports.notFunctionPattern = exports.optionPattern = exports.builtinVariablePattern = exports.autocmdPattern = exports.highlightValuePattern = exports.highlightPattern = exports.highlightLinkPattern = exports.mapCommandPattern = exports.colorschemePattern = exports.wordNextPattern = exports.wordPrePattern = exports.builtinFunctionPattern = exports.keywordPattern = exports.commentPattern = exports.errorLinePattern = void 0;
13998exports.errorLinePattern = /[^:]+:\s*(.+?):\s*line\s*([0-9]+)\s*col\s*([0-9]+)/;
13999exports.commentPattern = /^[ \t]*("|')/;
14000exports.keywordPattern = /[\w#&$<>.:]/;
14001exports.builtinFunctionPattern = /^((<SID>|\b(v|g|b|s|l|a):)?[\w#&]+)[ \t]*\([^)]*\)/;
14002exports.wordPrePattern = /^.*?(((<SID>|\b(v|g|b|s|l|a):)?[\w#&$.]+)|(<SID>|<SID|<SI|<S|<|\b(v|g|b|s|l|a):))$/;
14003exports.wordNextPattern = /^((SID>|ID>|D>|>|<SID>|\b(v|g|b|s|l|a):)?[\w#&$.]+|(:[\w#&$.]+)).*?(\r\n|\r|\n)?$/;
14004exports.colorschemePattern = /\bcolorscheme[ \t]+\w*$/;
14005exports.mapCommandPattern = /^([ \t]*(\[ \t]*)?)\w*map[ \t]+/;
14006exports.highlightLinkPattern = /^[ \t]*(hi|highlight)[ \t]+link([ \t]+[^ \t]+)*[ \t]*$/;
14007exports.highlightPattern = /^[ \t]*(hi|highlight)([ \t]+[^ \t]+)*[ \t]*$/;
14008exports.highlightValuePattern = /^[ \t]*(hi|highlight)([ \t]+[^ \t]+)*[ \t]+([^ \t=]+)=[^ \t=]*$/;
14009exports.autocmdPattern = /^[ \t]*(au|autocmd)!?[ \t]+([^ \t,]+,)*[^ \t,]*$/;
14010exports.builtinVariablePattern = [
14011 /\bv:\w*$/,
14012];
14013exports.optionPattern = [
14014 /(^|[ \t]+)&\w*$/,
14015 /(^|[ \t]+)set(l|local|g|global)?[ \t]+\w+$/,
14016];
14017exports.notFunctionPattern = [
14018 /^[ \t]*\\$/,
14019 /^[ \t]*\w+$/,
14020 /^[ \t]*"/,
14021 /(let|set|colorscheme)[ \t][^ \t]*$/,
14022 /[^([,\\ \t\w#>]\w*$/,
14023 /^[ \t]*(hi|highlight)([ \t]+link)?([ \t]+[^ \t]+)*[ \t]*$/,
14024 exports.autocmdPattern,
14025];
14026exports.commandPattern = [
14027 /(^|[ \t]):\w+$/,
14028 /^[ \t]*\w+$/,
14029 /:?silent!?[ \t]\w+/,
14030];
14031exports.featurePattern = [
14032 /\bhas\([ \t]*["']\w*/,
14033];
14034exports.expandPattern = [
14035 /\bexpand\(['"]<\w*$/,
14036 /\bexpand\([ \t]*['"]\w*$/,
14037];
14038exports.notIdentifierPattern = [
14039 exports.commentPattern,
14040 /("|'):\w*$/,
14041 /^[ \t]*\\$/,
14042 /^[ \t]*call[ \t]+[^ \t()]*$/,
14043 /('|"|#|&|\$|<)\w*$/,
14044];
14045
14046
14047/***/ }),
14048/* 54 */
14049/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
14050
14051"use strict";
14052
14053Object.defineProperty(exports, "__esModule", ({ value: true }));
14054var constant_1 = __webpack_require__(44);
14055var conf;
14056exports.default = {
14057 init: function (config) {
14058 conf = config;
14059 },
14060 changeByKey: function (key, value) {
14061 if (conf) {
14062 conf[key] = value;
14063 }
14064 },
14065 get iskeyword() {
14066 return conf && conf.iskeyword || "";
14067 },
14068 get vimruntime() {
14069 return conf && conf.vimruntime || "";
14070 },
14071 get runtimepath() {
14072 return conf && conf.runtimepath || [];
14073 },
14074 get diagnostic() {
14075 return conf && conf.diagnostic || {
14076 enable: true,
14077 };
14078 },
14079 get snippetSupport() {
14080 return conf && conf.snippetSupport || false;
14081 },
14082 get suggest() {
14083 return conf && conf.suggest || {
14084 fromRuntimepath: false,
14085 fromVimruntime: true,
14086 };
14087 },
14088 get indexes() {
14089 var defaults = {
14090 runtimepath: true,
14091 gap: 100,
14092 count: 1,
14093 projectRootPatterns: constant_1.projectRootPatterns,
14094 };
14095 if (!conf || !conf.indexes) {
14096 return defaults;
14097 }
14098 if (conf.indexes.gap !== undefined) {
14099 defaults.gap = conf.indexes.gap;
14100 }
14101 if (conf.indexes.count !== undefined) {
14102 defaults.count = conf.indexes.count;
14103 }
14104 if (conf.indexes.projectRootPatterns !== undefined
14105 && Array.isArray(conf.indexes.projectRootPatterns)
14106 && conf.indexes.projectRootPatterns.length) {
14107 defaults.projectRootPatterns = conf.indexes.projectRootPatterns;
14108 }
14109 return defaults;
14110 },
14111};
14112
14113
14114/***/ }),
14115/* 55 */
14116/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
14117
14118"use strict";
14119
14120Object.defineProperty(exports, "__esModule", ({ value: true }));
14121exports.documents = void 0;
14122var vscode_languageserver_1 = __webpack_require__(2);
14123var vscode_languageserver_textdocument_1 = __webpack_require__(56);
14124// text document manager
14125exports.documents = new vscode_languageserver_1.TextDocuments(vscode_languageserver_textdocument_1.TextDocument);
14126
14127
14128/***/ }),
14129/* 56 */
14130/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
14131
14132"use strict";
14133__webpack_require__.r(__webpack_exports__);
14134/* harmony export */ __webpack_require__.d(__webpack_exports__, {
14135/* harmony export */ "TextDocument": () => /* binding */ TextDocument
14136/* harmony export */ });
14137/* --------------------------------------------------------------------------------------------
14138 * Copyright (c) Microsoft Corporation. All rights reserved.
14139 * Licensed under the MIT License. See License.txt in the project root for license information.
14140 * ------------------------------------------------------------------------------------------ */
14141
14142var FullTextDocument = /** @class */ (function () {
14143 function FullTextDocument(uri, languageId, version, content) {
14144 this._uri = uri;
14145 this._languageId = languageId;
14146 this._version = version;
14147 this._content = content;
14148 this._lineOffsets = undefined;
14149 }
14150 Object.defineProperty(FullTextDocument.prototype, "uri", {
14151 get: function () {
14152 return this._uri;
14153 },
14154 enumerable: true,
14155 configurable: true
14156 });
14157 Object.defineProperty(FullTextDocument.prototype, "languageId", {
14158 get: function () {
14159 return this._languageId;
14160 },
14161 enumerable: true,
14162 configurable: true
14163 });
14164 Object.defineProperty(FullTextDocument.prototype, "version", {
14165 get: function () {
14166 return this._version;
14167 },
14168 enumerable: true,
14169 configurable: true
14170 });
14171 FullTextDocument.prototype.getText = function (range) {
14172 if (range) {
14173 var start = this.offsetAt(range.start);
14174 var end = this.offsetAt(range.end);
14175 return this._content.substring(start, end);
14176 }
14177 return this._content;
14178 };
14179 FullTextDocument.prototype.update = function (changes, version) {
14180 for (var _i = 0, changes_1 = changes; _i < changes_1.length; _i++) {
14181 var change = changes_1[_i];
14182 if (FullTextDocument.isIncremental(change)) {
14183 // makes sure start is before end
14184 var range = getWellformedRange(change.range);
14185 // update content
14186 var startOffset = this.offsetAt(range.start);
14187 var endOffset = this.offsetAt(range.end);
14188 this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);
14189 // update the offsets
14190 var startLine = Math.max(range.start.line, 0);
14191 var endLine = Math.max(range.end.line, 0);
14192 var lineOffsets = this._lineOffsets;
14193 var addedLineOffsets = computeLineOffsets(change.text, false, startOffset);
14194 if (endLine - startLine === addedLineOffsets.length) {
14195 for (var i = 0, len = addedLineOffsets.length; i < len; i++) {
14196 lineOffsets[i + startLine + 1] = addedLineOffsets[i];
14197 }
14198 }
14199 else {
14200 if (addedLineOffsets.length < 10000) {
14201 lineOffsets.splice.apply(lineOffsets, [startLine + 1, endLine - startLine].concat(addedLineOffsets));
14202 }
14203 else { // avoid too many arguments for splice
14204 this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));
14205 }
14206 }
14207 var diff = change.text.length - (endOffset - startOffset);
14208 if (diff !== 0) {
14209 for (var i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {
14210 lineOffsets[i] = lineOffsets[i] + diff;
14211 }
14212 }
14213 }
14214 else if (FullTextDocument.isFull(change)) {
14215 this._content = change.text;
14216 this._lineOffsets = undefined;
14217 }
14218 else {
14219 throw new Error('Unknown change event received');
14220 }
14221 }
14222 this._version = version;
14223 };
14224 FullTextDocument.prototype.getLineOffsets = function () {
14225 if (this._lineOffsets === undefined) {
14226 this._lineOffsets = computeLineOffsets(this._content, true);
14227 }
14228 return this._lineOffsets;
14229 };
14230 FullTextDocument.prototype.positionAt = function (offset) {
14231 offset = Math.max(Math.min(offset, this._content.length), 0);
14232 var lineOffsets = this.getLineOffsets();
14233 var low = 0, high = lineOffsets.length;
14234 if (high === 0) {
14235 return { line: 0, character: offset };
14236 }
14237 while (low < high) {
14238 var mid = Math.floor((low + high) / 2);
14239 if (lineOffsets[mid] > offset) {
14240 high = mid;
14241 }
14242 else {
14243 low = mid + 1;
14244 }
14245 }
14246 // low is the least x for which the line offset is larger than the current offset
14247 // or array.length if no line offset is larger than the current offset
14248 var line = low - 1;
14249 return { line: line, character: offset - lineOffsets[line] };
14250 };
14251 FullTextDocument.prototype.offsetAt = function (position) {
14252 var lineOffsets = this.getLineOffsets();
14253 if (position.line >= lineOffsets.length) {
14254 return this._content.length;
14255 }
14256 else if (position.line < 0) {
14257 return 0;
14258 }
14259 var lineOffset = lineOffsets[position.line];
14260 var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
14261 return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
14262 };
14263 Object.defineProperty(FullTextDocument.prototype, "lineCount", {
14264 get: function () {
14265 return this.getLineOffsets().length;
14266 },
14267 enumerable: true,
14268 configurable: true
14269 });
14270 FullTextDocument.isIncremental = function (event) {
14271 var candidate = event;
14272 return candidate !== undefined && candidate !== null &&
14273 typeof candidate.text === 'string' && candidate.range !== undefined &&
14274 (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');
14275 };
14276 FullTextDocument.isFull = function (event) {
14277 var candidate = event;
14278 return candidate !== undefined && candidate !== null &&
14279 typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;
14280 };
14281 return FullTextDocument;
14282}());
14283var TextDocument;
14284(function (TextDocument) {
14285 /**
14286 * Creates a new text document.
14287 *
14288 * @param uri The document's uri.
14289 * @param languageId The document's language Id.
14290 * @param version The document's initial version number.
14291 * @param content The document's content.
14292 */
14293 function create(uri, languageId, version, content) {
14294 return new FullTextDocument(uri, languageId, version, content);
14295 }
14296 TextDocument.create = create;
14297 /**
14298 * Updates a TextDocument by modifing its content.
14299 *
14300 * @param document the document to update. Only documents created by TextDocument.create are valid inputs.
14301 * @param changes the changes to apply to the document.
14302 * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.
14303 *
14304 */
14305 function update(document, changes, version) {
14306 if (document instanceof FullTextDocument) {
14307 document.update(changes, version);
14308 return document;
14309 }
14310 else {
14311 throw new Error('TextDocument.update: document must be created by TextDocument.create');
14312 }
14313 }
14314 TextDocument.update = update;
14315 function applyEdits(document, edits) {
14316 var text = document.getText();
14317 var sortedEdits = mergeSort(edits.map(getWellformedEdit), function (a, b) {
14318 var diff = a.range.start.line - b.range.start.line;
14319 if (diff === 0) {
14320 return a.range.start.character - b.range.start.character;
14321 }
14322 return diff;
14323 });
14324 var lastModifiedOffset = 0;
14325 var spans = [];
14326 for (var _i = 0, sortedEdits_1 = sortedEdits; _i < sortedEdits_1.length; _i++) {
14327 var e = sortedEdits_1[_i];
14328 var startOffset = document.offsetAt(e.range.start);
14329 if (startOffset < lastModifiedOffset) {
14330 throw new Error('Overlapping edit');
14331 }
14332 else if (startOffset > lastModifiedOffset) {
14333 spans.push(text.substring(lastModifiedOffset, startOffset));
14334 }
14335 if (e.newText.length) {
14336 spans.push(e.newText);
14337 }
14338 lastModifiedOffset = document.offsetAt(e.range.end);
14339 }
14340 spans.push(text.substr(lastModifiedOffset));
14341 return spans.join('');
14342 }
14343 TextDocument.applyEdits = applyEdits;
14344})(TextDocument || (TextDocument = {}));
14345function mergeSort(data, compare) {
14346 if (data.length <= 1) {
14347 // sorted
14348 return data;
14349 }
14350 var p = (data.length / 2) | 0;
14351 var left = data.slice(0, p);
14352 var right = data.slice(p);
14353 mergeSort(left, compare);
14354 mergeSort(right, compare);
14355 var leftIdx = 0;
14356 var rightIdx = 0;
14357 var i = 0;
14358 while (leftIdx < left.length && rightIdx < right.length) {
14359 var ret = compare(left[leftIdx], right[rightIdx]);
14360 if (ret <= 0) {
14361 // smaller_equal -> take left to preserve order
14362 data[i++] = left[leftIdx++];
14363 }
14364 else {
14365 // greater -> take right
14366 data[i++] = right[rightIdx++];
14367 }
14368 }
14369 while (leftIdx < left.length) {
14370 data[i++] = left[leftIdx++];
14371 }
14372 while (rightIdx < right.length) {
14373 data[i++] = right[rightIdx++];
14374 }
14375 return data;
14376}
14377function computeLineOffsets(text, isAtLineStart, textOffset) {
14378 if (textOffset === void 0) { textOffset = 0; }
14379 var result = isAtLineStart ? [textOffset] : [];
14380 for (var i = 0; i < text.length; i++) {
14381 var ch = text.charCodeAt(i);
14382 if (ch === 13 /* CarriageReturn */ || ch === 10 /* LineFeed */) {
14383 if (ch === 13 /* CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* LineFeed */) {
14384 i++;
14385 }
14386 result.push(textOffset + i + 1);
14387 }
14388 }
14389 return result;
14390}
14391function getWellformedRange(range) {
14392 var start = range.start;
14393 var end = range.end;
14394 if (start.line > end.line || (start.line === end.line && start.character > end.character)) {
14395 return { start: end, end: start };
14396 }
14397 return range;
14398}
14399function getWellformedEdit(textEdit) {
14400 var range = getWellformedRange(textEdit.range);
14401 if (range !== textEdit.range) {
14402 return { newText: textEdit.newText, range: range };
14403 }
14404 return textEdit;
14405}
14406
14407
14408/***/ }),
14409/* 57 */
14410/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
14411
14412"use strict";
14413
14414Object.defineProperty(exports, "__esModule", ({ value: true }));
14415var patterns_1 = __webpack_require__(53);
14416var builtin_1 = __webpack_require__(58);
14417var provider_1 = __webpack_require__(139);
14418function provider(line) {
14419 if (patterns_1.autocmdPattern.test(line)) {
14420 return builtin_1.builtinDocs.getVimAutocmds().filter(function (item) {
14421 return line.indexOf(item.label) === -1;
14422 });
14423 }
14424 return [];
14425}
14426provider_1.useProvider(provider);
14427
14428
14429/***/ }),
14430/* 58 */
14431/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
14432
14433"use strict";
14434
14435var __assign = (this && this.__assign) || function () {
14436 __assign = Object.assign || function(t) {
14437 for (var s, i = 1, n = arguments.length; i < n; i++) {
14438 s = arguments[i];
14439 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
14440 t[p] = s[p];
14441 }
14442 return t;
14443 };
14444 return __assign.apply(this, arguments);
14445};
14446var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14447 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14448 return new (P || (P = Promise))(function (resolve, reject) {
14449 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14450 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14451 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14452 step((generator = generator.apply(thisArg, _arguments || [])).next());
14453 });
14454};
14455var __generator = (this && this.__generator) || function (thisArg, body) {
14456 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
14457 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14458 function verb(n) { return function (v) { return step([n, v]); }; }
14459 function step(op) {
14460 if (f) throw new TypeError("Generator is already executing.");
14461 while (_) try {
14462 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;
14463 if (y = 0, t) op = [op[0] & 2, t.value];
14464 switch (op[0]) {
14465 case 0: case 1: t = op; break;
14466 case 4: _.label++; return { value: op[1], done: false };
14467 case 5: _.label++; y = op[1]; op = [0]; continue;
14468 case 7: op = _.ops.pop(); _.trys.pop(); continue;
14469 default:
14470 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
14471 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
14472 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
14473 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
14474 if (t[2]) _.ops.pop();
14475 _.trys.pop(); continue;
14476 }
14477 op = body.call(thisArg, _);
14478 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
14479 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
14480 }
14481};
14482var __spreadArrays = (this && this.__spreadArrays) || function () {
14483 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
14484 for (var r = Array(s), k = 0, i = 0; i < il; i++)
14485 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
14486 r[k] = a[j];
14487 return r;
14488};
14489var __importDefault = (this && this.__importDefault) || function (mod) {
14490 return (mod && mod.__esModule) ? mod : { "default": mod };
14491};
14492Object.defineProperty(exports, "__esModule", ({ value: true }));
14493exports.builtinDocs = void 0;
14494/*
14495 * vim builtin completion items
14496 *
14497 * 1. functions
14498 * 2. options
14499 * 3. variables
14500 * 4. commands
14501 * 5. has features
14502 * 6. expand Keyword
14503 * 7. map args
14504 */
14505var fast_glob_1 = __importDefault(__webpack_require__(59));
14506var path_1 = __importDefault(__webpack_require__(13));
14507var vscode_languageserver_1 = __webpack_require__(2);
14508var logger_1 = __importDefault(__webpack_require__(136));
14509var patterns_1 = __webpack_require__(53);
14510var util_1 = __webpack_require__(46);
14511var builtin_docs_json_1 = __importDefault(__webpack_require__(138));
14512var config_1 = __importDefault(__webpack_require__(54));
14513var log = logger_1.default("builtin");
14514var Builtin = /** @class */ (function () {
14515 function Builtin() {
14516 // completion items
14517 this.vimPredefinedVariablesItems = [];
14518 this.vimOptionItems = [];
14519 this.vimBuiltinFunctionItems = [];
14520 this.vimBuiltinFunctionMap = {};
14521 this.vimCommandItems = [];
14522 this.vimMapArgsItems = [];
14523 this.vimFeatureItems = [];
14524 this.vimAutocmdItems = [];
14525 this.expandKeywordItems = [];
14526 this.colorschemeItems = [];
14527 this.highlightArgKeys = [];
14528 this.highlightArgValues = {};
14529 // signature help
14530 this.vimBuiltFunctionSignatureHelp = {};
14531 // documents
14532 this.vimBuiltFunctionDocuments = {};
14533 this.vimOptionDocuments = {};
14534 this.vimPredefinedVariableDocuments = {};
14535 this.vimCommandDocuments = {};
14536 this.vimFeatureDocuments = {};
14537 this.expandKeywordDocuments = {};
14538 }
14539 Builtin.prototype.init = function () {
14540 this.start();
14541 };
14542 Builtin.prototype.getPredefinedVimVariables = function () {
14543 return this.vimPredefinedVariablesItems;
14544 };
14545 Builtin.prototype.getVimOptions = function () {
14546 return this.vimOptionItems;
14547 };
14548 Builtin.prototype.getBuiltinVimFunctions = function () {
14549 return this.vimBuiltinFunctionItems;
14550 };
14551 Builtin.prototype.isBuiltinFunction = function (label) {
14552 return this.vimBuiltinFunctionMap[label];
14553 };
14554 Builtin.prototype.getExpandKeywords = function () {
14555 return this.expandKeywordItems;
14556 };
14557 Builtin.prototype.getVimCommands = function () {
14558 return this.vimCommandItems;
14559 };
14560 Builtin.prototype.getVimMapArgs = function () {
14561 return this.vimMapArgsItems;
14562 };
14563 Builtin.prototype.getVimFeatures = function () {
14564 return this.vimFeatureItems;
14565 };
14566 Builtin.prototype.getVimAutocmds = function () {
14567 return this.vimAutocmdItems;
14568 };
14569 Builtin.prototype.getColorschemes = function () {
14570 return this.colorschemeItems;
14571 };
14572 Builtin.prototype.getHighlightArgKeys = function () {
14573 return this.highlightArgKeys;
14574 };
14575 Builtin.prototype.getHighlightArgValues = function () {
14576 return this.highlightArgValues;
14577 };
14578 Builtin.prototype.getSignatureHelpByName = function (name, idx) {
14579 var params = this.vimBuiltFunctionSignatureHelp[name];
14580 if (params) {
14581 return {
14582 signatures: [{
14583 label: name + "(" + params[0] + ")" + (params[1] ? ": " + params[1] : ""),
14584 documentation: this.formatVimDocument(this.vimBuiltFunctionDocuments[name]),
14585 parameters: params[0].split("[")[0].split(",").map(function (param) {
14586 return {
14587 label: param.trim(),
14588 };
14589 }),
14590 }],
14591 activeSignature: 0,
14592 activeParameter: idx,
14593 };
14594 }
14595 return;
14596 };
14597 Builtin.prototype.getDocumentByCompletionItem = function (params) {
14598 var kind = params.kind;
14599 switch (kind) {
14600 case vscode_languageserver_1.CompletionItemKind.Variable:
14601 if (!this.vimPredefinedVariableDocuments[params.label]) {
14602 return params;
14603 }
14604 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimPredefinedVariableDocuments[params.label]) });
14605 case vscode_languageserver_1.CompletionItemKind.Property:
14606 if (!this.vimOptionDocuments[params.label]) {
14607 return params;
14608 }
14609 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimOptionDocuments[params.label]) });
14610 case vscode_languageserver_1.CompletionItemKind.Function:
14611 if (!this.vimBuiltFunctionDocuments[params.label]) {
14612 return params;
14613 }
14614 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimBuiltFunctionDocuments[params.label]) });
14615 case vscode_languageserver_1.CompletionItemKind.EnumMember:
14616 if (!this.vimFeatureDocuments[params.label]) {
14617 return params;
14618 }
14619 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimFeatureDocuments[params.label]) });
14620 case vscode_languageserver_1.CompletionItemKind.Operator:
14621 if (!this.vimCommandDocuments[params.label]) {
14622 return params;
14623 }
14624 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimCommandDocuments[params.label]) });
14625 default:
14626 return params;
14627 }
14628 };
14629 Builtin.prototype.getHoverDocument = function (name, pre, next) {
14630 // builtin variables
14631 if (util_1.isSomeMatchPattern(patterns_1.builtinVariablePattern, pre) && this.vimPredefinedVariableDocuments[name]) {
14632 return {
14633 contents: this.formatVimDocument(this.vimPredefinedVariableDocuments[name]),
14634 };
14635 // options
14636 }
14637 else if (util_1.isSomeMatchPattern(patterns_1.optionPattern, pre)
14638 && (this.vimOptionDocuments[name] || this.vimOptionDocuments[name.slice(1)])) {
14639 return {
14640 contents: this.formatVimDocument(this.vimOptionDocuments[name] || this.vimOptionDocuments[name.slice(1)]),
14641 };
14642 // builtin functions
14643 }
14644 else if (patterns_1.builtinFunctionPattern.test(next) && this.vimBuiltFunctionDocuments[name]) {
14645 return {
14646 contents: this.formatVimDocument(this.vimBuiltFunctionDocuments[name]),
14647 };
14648 // has features
14649 }
14650 else if (util_1.isSomeMatchPattern(patterns_1.featurePattern, pre) && this.vimFeatureDocuments[name]) {
14651 return {
14652 contents: this.formatVimDocument(this.vimFeatureDocuments[name]),
14653 };
14654 // expand Keywords
14655 }
14656 else if (util_1.isSomeMatchPattern(patterns_1.expandPattern, pre) && this.expandKeywordDocuments["<" + name + ">"]) {
14657 return {
14658 contents: this.formatVimDocument(this.expandKeywordDocuments["<" + name + ">"]),
14659 };
14660 // command
14661 }
14662 else if (util_1.isSomeMatchPattern(patterns_1.commandPattern, pre) && this.vimCommandDocuments[name]) {
14663 return {
14664 contents: this.formatVimDocument(this.vimCommandDocuments[name]),
14665 };
14666 }
14667 };
14668 Builtin.prototype.start = function () {
14669 return __awaiter(this, void 0, void 0, function () {
14670 var runtimepath, data;
14671 var _this = this;
14672 return __generator(this, function (_a) {
14673 runtimepath = config_1.default.runtimepath;
14674 // get colorschemes
14675 if (runtimepath) {
14676 this.resolveColorschemes(runtimepath);
14677 }
14678 // get map args
14679 this.resolveMapArgs();
14680 // get highlight arg keys
14681 this.resolveHighlightArgKeys();
14682 // get highlight arg values
14683 this.resolveHighlightArgValues();
14684 try {
14685 data = builtin_docs_json_1.default;
14686 this.vimBuiltinFunctionItems = data.completionItems.functions;
14687 this.vimBuiltinFunctionItems.forEach(function (item) {
14688 if (!_this.vimBuiltinFunctionMap[item.label]) {
14689 _this.vimBuiltinFunctionMap[item.label] = true;
14690 }
14691 });
14692 this.vimBuiltFunctionDocuments = data.documents.functions;
14693 this.vimCommandItems = data.completionItems.commands;
14694 this.vimCommandDocuments = data.documents.commands;
14695 this.vimPredefinedVariablesItems = data.completionItems.variables;
14696 this.vimPredefinedVariableDocuments = data.documents.variables;
14697 this.vimOptionItems = data.completionItems.options;
14698 this.vimOptionDocuments = data.documents.options;
14699 this.vimFeatureItems = data.completionItems.features;
14700 this.vimAutocmdItems = data.completionItems.autocmds;
14701 this.vimFeatureDocuments = data.documents.features;
14702 this.expandKeywordItems = data.completionItems.expandKeywords;
14703 this.expandKeywordDocuments = data.documents.expandKeywords;
14704 this.vimBuiltFunctionSignatureHelp = data.signatureHelp;
14705 }
14706 catch (error) {
14707 log.error("[vimls]: parse docs/builtin-doc.json fail => " + (error.message || error));
14708 }
14709 return [2 /*return*/];
14710 });
14711 });
14712 };
14713 // format vim document to markdown
14714 Builtin.prototype.formatVimDocument = function (document) {
14715 var indent = 0;
14716 return {
14717 kind: vscode_languageserver_1.MarkupKind.Markdown,
14718 value: __spreadArrays([
14719 "```help"
14720 ], document.map(function (line) {
14721 if (indent === 0) {
14722 var m = line.match(/^([ \t]+)/);
14723 if (m) {
14724 indent = m[1].length;
14725 }
14726 }
14727 return line.replace(new RegExp("^[ \\t]{" + indent + "}", "g"), "").replace(/\t/g, " ");
14728 }), [
14729 "```",
14730 ]).join("\n"),
14731 };
14732 };
14733 Builtin.prototype.resolveMapArgs = function () {
14734 this.vimMapArgsItems = ["<buffer>", "<nowait>", "<silent>", "<script>", "<expr>", "<unique>"]
14735 .map(function (item) {
14736 return {
14737 label: item,
14738 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
14739 documentation: "",
14740 insertText: item,
14741 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
14742 };
14743 });
14744 };
14745 Builtin.prototype.resolveColorschemes = function (runtimepath) {
14746 return __awaiter(this, void 0, void 0, function () {
14747 var list, glob, colorschemes, error_1;
14748 return __generator(this, function (_a) {
14749 switch (_a.label) {
14750 case 0:
14751 list = runtimepath;
14752 if (config_1.default.vimruntime) {
14753 list.push(config_1.default.vimruntime);
14754 }
14755 glob = runtimepath.map(function (p) { return path_1.default.join(p.trim(), "colors/*.vim"); });
14756 colorschemes = [];
14757 _a.label = 1;
14758 case 1:
14759 _a.trys.push([1, 3, , 4]);
14760 return [4 /*yield*/, fast_glob_1.default(glob, { onlyFiles: false, deep: 0 })];
14761 case 2:
14762 colorschemes = _a.sent();
14763 return [3 /*break*/, 4];
14764 case 3:
14765 error_1 = _a.sent();
14766 log.warn([
14767 "Index Colorschemes Error: " + JSON.stringify(glob),
14768 "Error => " + (error_1.stack || error_1.message || error_1),
14769 ].join("\n"));
14770 return [3 /*break*/, 4];
14771 case 4:
14772 this.colorschemeItems = colorschemes.map(function (p) {
14773 var label = path_1.default.basename(p, ".vim");
14774 var item = {
14775 label: label,
14776 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
14777 insertText: label,
14778 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
14779 };
14780 return item;
14781 });
14782 return [2 /*return*/];
14783 }
14784 });
14785 });
14786 };
14787 Builtin.prototype.resolveHighlightArgKeys = function () {
14788 this.highlightArgKeys = [
14789 "cterm",
14790 "start",
14791 "stop",
14792 "ctermfg",
14793 "ctermbg",
14794 "gui",
14795 "font",
14796 "guifg",
14797 "guibg",
14798 "guisp",
14799 "blend",
14800 ]
14801 .map(function (item) {
14802 return {
14803 label: item,
14804 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
14805 documentation: "",
14806 insertText: item + "=${0}",
14807 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
14808 };
14809 });
14810 };
14811 Builtin.prototype.resolveHighlightArgValues = function () {
14812 var values = {
14813 "cterm": ["bold", "underline", "undercurl", "reverse", "inverse", "italic", "standout", "NONE"],
14814 "ctermfg ctermbg": [
14815 "Black",
14816 "DarkBlue",
14817 "DarkGreen",
14818 "DarkCyan",
14819 "DarkRed",
14820 "DarkMagenta",
14821 "Brown", "DarkYellow",
14822 "LightGray", "LightGrey", "Gray", "Grey",
14823 "DarkGray", "DarkGrey",
14824 "Blue", "LightBlue",
14825 "Green", "LightGreen",
14826 "Cyan", "LightCyan",
14827 "Red", "LightRed",
14828 "Magenta", "LightMagenta",
14829 "Yellow", "LightYellow",
14830 "White",
14831 ],
14832 "guifg guibg guisp": [
14833 "NONE",
14834 "bg",
14835 "background",
14836 "fg",
14837 "foreground",
14838 "Red", "LightRed", "DarkRed",
14839 "Green", "LightGreen", "DarkGreen", "SeaGreen",
14840 "Blue", "LightBlue", "DarkBlue", "SlateBlue",
14841 "Cyan", "LightCyan", "DarkCyan",
14842 "Magenta", "LightMagenta", "DarkMagenta",
14843 "Yellow", "LightYellow", "Brown", "DarkYellow",
14844 "Gray", "LightGray", "DarkGray",
14845 "Black", "White",
14846 "Orange", "Purple", "Violet",
14847 ],
14848 };
14849 var argValues = {};
14850 Object.keys(values).forEach(function (key) {
14851 var items = values[key].map(function (val) { return ({
14852 label: val,
14853 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
14854 documentation: "",
14855 insertText: val,
14856 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
14857 }); });
14858 key.split(" ").forEach(function (name) {
14859 argValues[name] = items;
14860 });
14861 });
14862 this.highlightArgValues = argValues;
14863 };
14864 return Builtin;
14865}());
14866exports.builtinDocs = new Builtin();
14867
14868
14869/***/ }),
14870/* 59 */
14871/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
14872
14873"use strict";
14874
14875const taskManager = __webpack_require__(60);
14876const async_1 = __webpack_require__(97);
14877const stream_1 = __webpack_require__(132);
14878const sync_1 = __webpack_require__(133);
14879const settings_1 = __webpack_require__(135);
14880const utils = __webpack_require__(61);
14881async function FastGlob(source, options) {
14882 assertPatternsInput(source);
14883 const works = getWorks(source, async_1.default, options);
14884 const result = await Promise.all(works);
14885 return utils.array.flatten(result);
14886}
14887// https://github.com/typescript-eslint/typescript-eslint/issues/60
14888// eslint-disable-next-line no-redeclare
14889(function (FastGlob) {
14890 function sync(source, options) {
14891 assertPatternsInput(source);
14892 const works = getWorks(source, sync_1.default, options);
14893 return utils.array.flatten(works);
14894 }
14895 FastGlob.sync = sync;
14896 function stream(source, options) {
14897 assertPatternsInput(source);
14898 const works = getWorks(source, stream_1.default, options);
14899 /**
14900 * The stream returned by the provider cannot work with an asynchronous iterator.
14901 * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.
14902 * This affects performance (+25%). I don't see best solution right now.
14903 */
14904 return utils.stream.merge(works);
14905 }
14906 FastGlob.stream = stream;
14907 function generateTasks(source, options) {
14908 assertPatternsInput(source);
14909 const patterns = [].concat(source);
14910 const settings = new settings_1.default(options);
14911 return taskManager.generate(patterns, settings);
14912 }
14913 FastGlob.generateTasks = generateTasks;
14914 function isDynamicPattern(source, options) {
14915 assertPatternsInput(source);
14916 const settings = new settings_1.default(options);
14917 return utils.pattern.isDynamicPattern(source, settings);
14918 }
14919 FastGlob.isDynamicPattern = isDynamicPattern;
14920 function escapePath(source) {
14921 assertPatternsInput(source);
14922 return utils.path.escape(source);
14923 }
14924 FastGlob.escapePath = escapePath;
14925})(FastGlob || (FastGlob = {}));
14926function getWorks(source, _Provider, options) {
14927 const patterns = [].concat(source);
14928 const settings = new settings_1.default(options);
14929 const tasks = taskManager.generate(patterns, settings);
14930 const provider = new _Provider(settings);
14931 return tasks.map(provider.read, provider);
14932}
14933function assertPatternsInput(input) {
14934 const source = [].concat(input);
14935 const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));
14936 if (!isValidSource) {
14937 throw new TypeError('Patterns must be a string (non empty) or an array of strings');
14938 }
14939}
14940module.exports = FastGlob;
14941
14942
14943/***/ }),
14944/* 60 */
14945/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
14946
14947"use strict";
14948
14949Object.defineProperty(exports, "__esModule", ({ value: true }));
14950exports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;
14951const utils = __webpack_require__(61);
14952function generate(patterns, settings) {
14953 const positivePatterns = getPositivePatterns(patterns);
14954 const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore);
14955 const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));
14956 const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));
14957 const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);
14958 const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);
14959 return staticTasks.concat(dynamicTasks);
14960}
14961exports.generate = generate;
14962function convertPatternsToTasks(positive, negative, dynamic) {
14963 const positivePatternsGroup = groupPatternsByBaseDirectory(positive);
14964 // When we have a global group – there is no reason to divide the patterns into independent tasks.
14965 // In this case, the global task covers the rest.
14966 if ('.' in positivePatternsGroup) {
14967 const task = convertPatternGroupToTask('.', positive, negative, dynamic);
14968 return [task];
14969 }
14970 return convertPatternGroupsToTasks(positivePatternsGroup, negative, dynamic);
14971}
14972exports.convertPatternsToTasks = convertPatternsToTasks;
14973function getPositivePatterns(patterns) {
14974 return utils.pattern.getPositivePatterns(patterns);
14975}
14976exports.getPositivePatterns = getPositivePatterns;
14977function getNegativePatternsAsPositive(patterns, ignore) {
14978 const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);
14979 const positive = negative.map(utils.pattern.convertToPositivePattern);
14980 return positive;
14981}
14982exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;
14983function groupPatternsByBaseDirectory(patterns) {
14984 const group = {};
14985 return patterns.reduce((collection, pattern) => {
14986 const base = utils.pattern.getBaseDirectory(pattern);
14987 if (base in collection) {
14988 collection[base].push(pattern);
14989 }
14990 else {
14991 collection[base] = [pattern];
14992 }
14993 return collection;
14994 }, group);
14995}
14996exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
14997function convertPatternGroupsToTasks(positive, negative, dynamic) {
14998 return Object.keys(positive).map((base) => {
14999 return convertPatternGroupToTask(base, positive[base], negative, dynamic);
15000 });
15001}
15002exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
15003function convertPatternGroupToTask(base, positive, negative, dynamic) {
15004 return {
15005 dynamic,
15006 positive,
15007 negative,
15008 base,
15009 patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))
15010 };
15011}
15012exports.convertPatternGroupToTask = convertPatternGroupToTask;
15013
15014
15015/***/ }),
15016/* 61 */
15017/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
15018
15019"use strict";
15020
15021Object.defineProperty(exports, "__esModule", ({ value: true }));
15022exports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;
15023const array = __webpack_require__(62);
15024exports.array = array;
15025const errno = __webpack_require__(63);
15026exports.errno = errno;
15027const fs = __webpack_require__(64);
15028exports.fs = fs;
15029const path = __webpack_require__(65);
15030exports.path = path;
15031const pattern = __webpack_require__(66);
15032exports.pattern = pattern;
15033const stream = __webpack_require__(93);
15034exports.stream = stream;
15035const string = __webpack_require__(96);
15036exports.string = string;
15037
15038
15039/***/ }),
15040/* 62 */
15041/***/ ((__unused_webpack_module, exports) => {
15042
15043"use strict";
15044
15045Object.defineProperty(exports, "__esModule", ({ value: true }));
15046exports.splitWhen = exports.flatten = void 0;
15047function flatten(items) {
15048 return items.reduce((collection, item) => [].concat(collection, item), []);
15049}
15050exports.flatten = flatten;
15051function splitWhen(items, predicate) {
15052 const result = [[]];
15053 let groupIndex = 0;
15054 for (const item of items) {
15055 if (predicate(item)) {
15056 groupIndex++;
15057 result[groupIndex] = [];
15058 }
15059 else {
15060 result[groupIndex].push(item);
15061 }
15062 }
15063 return result;
15064}
15065exports.splitWhen = splitWhen;
15066
15067
15068/***/ }),
15069/* 63 */
15070/***/ ((__unused_webpack_module, exports) => {
15071
15072"use strict";
15073
15074Object.defineProperty(exports, "__esModule", ({ value: true }));
15075exports.isEnoentCodeError = void 0;
15076function isEnoentCodeError(error) {
15077 return error.code === 'ENOENT';
15078}
15079exports.isEnoentCodeError = isEnoentCodeError;
15080
15081
15082/***/ }),
15083/* 64 */
15084/***/ ((__unused_webpack_module, exports) => {
15085
15086"use strict";
15087
15088Object.defineProperty(exports, "__esModule", ({ value: true }));
15089exports.createDirentFromStats = void 0;
15090class DirentFromStats {
15091 constructor(name, stats) {
15092 this.name = name;
15093 this.isBlockDevice = stats.isBlockDevice.bind(stats);
15094 this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
15095 this.isDirectory = stats.isDirectory.bind(stats);
15096 this.isFIFO = stats.isFIFO.bind(stats);
15097 this.isFile = stats.isFile.bind(stats);
15098 this.isSocket = stats.isSocket.bind(stats);
15099 this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
15100 }
15101}
15102function createDirentFromStats(name, stats) {
15103 return new DirentFromStats(name, stats);
15104}
15105exports.createDirentFromStats = createDirentFromStats;
15106
15107
15108/***/ }),
15109/* 65 */
15110/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
15111
15112"use strict";
15113
15114Object.defineProperty(exports, "__esModule", ({ value: true }));
15115exports.removeLeadingDotSegment = exports.escape = exports.makeAbsolute = exports.unixify = void 0;
15116const path = __webpack_require__(13);
15117const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\
15118const UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;
15119/**
15120 * Designed to work only with simple paths: `dir\\file`.
15121 */
15122function unixify(filepath) {
15123 return filepath.replace(/\\/g, '/');
15124}
15125exports.unixify = unixify;
15126function makeAbsolute(cwd, filepath) {
15127 return path.resolve(cwd, filepath);
15128}
15129exports.makeAbsolute = makeAbsolute;
15130function escape(pattern) {
15131 return pattern.replace(UNESCAPED_GLOB_SYMBOLS_RE, '\\$2');
15132}
15133exports.escape = escape;
15134function removeLeadingDotSegment(entry) {
15135 // We do not use `startsWith` because this is 10x slower than current implementation for some cases.
15136 // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
15137 if (entry.charAt(0) === '.') {
15138 const secondCharactery = entry.charAt(1);
15139 if (secondCharactery === '/' || secondCharactery === '\\') {
15140 return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);
15141 }
15142 }
15143 return entry;
15144}
15145exports.removeLeadingDotSegment = removeLeadingDotSegment;
15146
15147
15148/***/ }),
15149/* 66 */
15150/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
15151
15152"use strict";
15153
15154Object.defineProperty(exports, "__esModule", ({ value: true }));
15155exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;
15156const path = __webpack_require__(13);
15157const globParent = __webpack_require__(67);
15158const micromatch = __webpack_require__(70);
15159const picomatch = __webpack_require__(87);
15160const GLOBSTAR = '**';
15161const ESCAPE_SYMBOL = '\\';
15162const COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;
15163const REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\[.*]/;
15164const REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\(.*\|.*\)/;
15165const GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\(.*\)/;
15166const BRACE_EXPANSIONS_SYMBOLS_RE = /{.*(?:,|\.\.).*}/;
15167function isStaticPattern(pattern, options = {}) {
15168 return !isDynamicPattern(pattern, options);
15169}
15170exports.isStaticPattern = isStaticPattern;
15171function isDynamicPattern(pattern, options = {}) {
15172 /**
15173 * A special case with an empty string is necessary for matching patterns that start with a forward slash.
15174 * An empty string cannot be a dynamic pattern.
15175 * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.
15176 */
15177 if (pattern === '') {
15178 return false;
15179 }
15180 /**
15181 * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check
15182 * filepath directly (without read directory).
15183 */
15184 if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {
15185 return true;
15186 }
15187 if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {
15188 return true;
15189 }
15190 if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {
15191 return true;
15192 }
15193 if (options.braceExpansion !== false && BRACE_EXPANSIONS_SYMBOLS_RE.test(pattern)) {
15194 return true;
15195 }
15196 return false;
15197}
15198exports.isDynamicPattern = isDynamicPattern;
15199function convertToPositivePattern(pattern) {
15200 return isNegativePattern(pattern) ? pattern.slice(1) : pattern;
15201}
15202exports.convertToPositivePattern = convertToPositivePattern;
15203function convertToNegativePattern(pattern) {
15204 return '!' + pattern;
15205}
15206exports.convertToNegativePattern = convertToNegativePattern;
15207function isNegativePattern(pattern) {
15208 return pattern.startsWith('!') && pattern[1] !== '(';
15209}
15210exports.isNegativePattern = isNegativePattern;
15211function isPositivePattern(pattern) {
15212 return !isNegativePattern(pattern);
15213}
15214exports.isPositivePattern = isPositivePattern;
15215function getNegativePatterns(patterns) {
15216 return patterns.filter(isNegativePattern);
15217}
15218exports.getNegativePatterns = getNegativePatterns;
15219function getPositivePatterns(patterns) {
15220 return patterns.filter(isPositivePattern);
15221}
15222exports.getPositivePatterns = getPositivePatterns;
15223function getBaseDirectory(pattern) {
15224 return globParent(pattern, { flipBackslashes: false });
15225}
15226exports.getBaseDirectory = getBaseDirectory;
15227function hasGlobStar(pattern) {
15228 return pattern.includes(GLOBSTAR);
15229}
15230exports.hasGlobStar = hasGlobStar;
15231function endsWithSlashGlobStar(pattern) {
15232 return pattern.endsWith('/' + GLOBSTAR);
15233}
15234exports.endsWithSlashGlobStar = endsWithSlashGlobStar;
15235function isAffectDepthOfReadingPattern(pattern) {
15236 const basename = path.basename(pattern);
15237 return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);
15238}
15239exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
15240function expandPatternsWithBraceExpansion(patterns) {
15241 return patterns.reduce((collection, pattern) => {
15242 return collection.concat(expandBraceExpansion(pattern));
15243 }, []);
15244}
15245exports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;
15246function expandBraceExpansion(pattern) {
15247 return micromatch.braces(pattern, {
15248 expand: true,
15249 nodupes: true
15250 });
15251}
15252exports.expandBraceExpansion = expandBraceExpansion;
15253function getPatternParts(pattern, options) {
15254 let { parts } = picomatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));
15255 /**
15256 * The scan method returns an empty array in some cases.
15257 * See micromatch/picomatch#58 for more details.
15258 */
15259 if (parts.length === 0) {
15260 parts = [pattern];
15261 }
15262 /**
15263 * The scan method does not return an empty part for the pattern with a forward slash.
15264 * This is another part of micromatch/picomatch#58.
15265 */
15266 if (parts[0].startsWith('/')) {
15267 parts[0] = parts[0].slice(1);
15268 parts.unshift('');
15269 }
15270 return parts;
15271}
15272exports.getPatternParts = getPatternParts;
15273function makeRe(pattern, options) {
15274 return micromatch.makeRe(pattern, options);
15275}
15276exports.makeRe = makeRe;
15277function convertPatternsToRe(patterns, options) {
15278 return patterns.map((pattern) => makeRe(pattern, options));
15279}
15280exports.convertPatternsToRe = convertPatternsToRe;
15281function matchAny(entry, patternsRe) {
15282 return patternsRe.some((patternRe) => patternRe.test(entry));
15283}
15284exports.matchAny = matchAny;
15285
15286
15287/***/ }),
15288/* 67 */
15289/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
15290
15291"use strict";
15292
15293
15294var isGlob = __webpack_require__(68);
15295var pathPosixDirname = __webpack_require__(13).posix.dirname;
15296var isWin32 = __webpack_require__(14).platform() === 'win32';
15297
15298var slash = '/';
15299var backslash = /\\/g;
15300var enclosure = /[\{\[].*[\/]*.*[\}\]]$/;
15301var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/;
15302var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g;
15303
15304/**
15305 * @param {string} str
15306 * @param {Object} opts
15307 * @param {boolean} [opts.flipBackslashes=true]
15308 */
15309module.exports = function globParent(str, opts) {
15310 var options = Object.assign({ flipBackslashes: true }, opts);
15311
15312 // flip windows path separators
15313 if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {
15314 str = str.replace(backslash, slash);
15315 }
15316
15317 // special case for strings ending in enclosure containing path separator
15318 if (enclosure.test(str)) {
15319 str += slash;
15320 }
15321
15322 // preserves full path in case of trailing path separator
15323 str += 'a';
15324
15325 // remove path parts that are globby
15326 do {
15327 str = pathPosixDirname(str);
15328 } while (isGlob(str) || globby.test(str));
15329
15330 // remove escape chars and return result
15331 return str.replace(escaped, '$1');
15332};
15333
15334
15335/***/ }),
15336/* 68 */
15337/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
15338
15339/*!
15340 * is-glob <https://github.com/jonschlinkert/is-glob>
15341 *
15342 * Copyright (c) 2014-2017, Jon Schlinkert.
15343 * Released under the MIT License.
15344 */
15345
15346var isExtglob = __webpack_require__(69);
15347var chars = { '{': '}', '(': ')', '[': ']'};
15348var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
15349var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/;
15350
15351module.exports = function isGlob(str, options) {
15352 if (typeof str !== 'string' || str === '') {
15353 return false;
15354 }
15355
15356 if (isExtglob(str)) {
15357 return true;
15358 }
15359
15360 var regex = strictRegex;
15361 var match;
15362
15363 // optionally relax regex
15364 if (options && options.strict === false) {
15365 regex = relaxedRegex;
15366 }
15367
15368 while ((match = regex.exec(str))) {
15369 if (match[2]) return true;
15370 var idx = match.index + match[0].length;
15371
15372 // if an open bracket/brace/paren is escaped,
15373 // set the index to the next closing character
15374 var open = match[1];
15375 var close = open ? chars[open] : null;
15376 if (open && close) {
15377 var n = str.indexOf(close, idx);
15378 if (n !== -1) {
15379 idx = n + 1;
15380 }
15381 }
15382
15383 str = str.slice(idx);
15384 }
15385 return false;
15386};
15387
15388
15389/***/ }),
15390/* 69 */
15391/***/ ((module) => {
15392
15393/*!
15394 * is-extglob <https://github.com/jonschlinkert/is-extglob>
15395 *
15396 * Copyright (c) 2014-2016, Jon Schlinkert.
15397 * Licensed under the MIT License.
15398 */
15399
15400module.exports = function isExtglob(str) {
15401 if (typeof str !== 'string' || str === '') {
15402 return false;
15403 }
15404
15405 var match;
15406 while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) {
15407 if (match[2]) return true;
15408 str = str.slice(match.index + match[0].length);
15409 }
15410
15411 return false;
15412};
15413
15414
15415/***/ }),
15416/* 70 */
15417/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
15418
15419"use strict";
15420
15421
15422const util = __webpack_require__(48);
15423const braces = __webpack_require__(71);
15424const picomatch = __webpack_require__(81);
15425const utils = __webpack_require__(84);
15426const isEmptyString = val => typeof val === 'string' && (val === '' || val === './');
15427
15428/**
15429 * Returns an array of strings that match one or more glob patterns.
15430 *
15431 * ```js
15432 * const mm = require('micromatch');
15433 * // mm(list, patterns[, options]);
15434 *
15435 * console.log(mm(['a.js', 'a.txt'], ['*.js']));
15436 * //=> [ 'a.js' ]
15437 * ```
15438 * @param {String|Array<string>} list List of strings to match.
15439 * @param {String|Array<string>} patterns One or more glob patterns to use for matching.
15440 * @param {Object} options See available [options](#options)
15441 * @return {Array} Returns an array of matches
15442 * @summary false
15443 * @api public
15444 */
15445
15446const micromatch = (list, patterns, options) => {
15447 patterns = [].concat(patterns);
15448 list = [].concat(list);
15449
15450 let omit = new Set();
15451 let keep = new Set();
15452 let items = new Set();
15453 let negatives = 0;
15454
15455 let onResult = state => {
15456 items.add(state.output);
15457 if (options && options.onResult) {
15458 options.onResult(state);
15459 }
15460 };
15461
15462 for (let i = 0; i < patterns.length; i++) {
15463 let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);
15464 let negated = isMatch.state.negated || isMatch.state.negatedExtglob;
15465 if (negated) negatives++;
15466
15467 for (let item of list) {
15468 let matched = isMatch(item, true);
15469
15470 let match = negated ? !matched.isMatch : matched.isMatch;
15471 if (!match) continue;
15472
15473 if (negated) {
15474 omit.add(matched.output);
15475 } else {
15476 omit.delete(matched.output);
15477 keep.add(matched.output);
15478 }
15479 }
15480 }
15481
15482 let result = negatives === patterns.length ? [...items] : [...keep];
15483 let matches = result.filter(item => !omit.has(item));
15484
15485 if (options && matches.length === 0) {
15486 if (options.failglob === true) {
15487 throw new Error(`No matches found for "${patterns.join(', ')}"`);
15488 }
15489
15490 if (options.nonull === true || options.nullglob === true) {
15491 return options.unescape ? patterns.map(p => p.replace(/\\/g, '')) : patterns;
15492 }
15493 }
15494
15495 return matches;
15496};
15497
15498/**
15499 * Backwards compatibility
15500 */
15501
15502micromatch.match = micromatch;
15503
15504/**
15505 * Returns a matcher function from the given glob `pattern` and `options`.
15506 * The returned function takes a string to match as its only argument and returns
15507 * true if the string is a match.
15508 *
15509 * ```js
15510 * const mm = require('micromatch');
15511 * // mm.matcher(pattern[, options]);
15512 *
15513 * const isMatch = mm.matcher('*.!(*a)');
15514 * console.log(isMatch('a.a')); //=> false
15515 * console.log(isMatch('a.b')); //=> true
15516 * ```
15517 * @param {String} `pattern` Glob pattern
15518 * @param {Object} `options`
15519 * @return {Function} Returns a matcher function.
15520 * @api public
15521 */
15522
15523micromatch.matcher = (pattern, options) => picomatch(pattern, options);
15524
15525/**
15526 * Returns true if **any** of the given glob `patterns` match the specified `string`.
15527 *
15528 * ```js
15529 * const mm = require('micromatch');
15530 * // mm.isMatch(string, patterns[, options]);
15531 *
15532 * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true
15533 * console.log(mm.isMatch('a.a', 'b.*')); //=> false
15534 * ```
15535 * @param {String} str The string to test.
15536 * @param {String|Array} patterns One or more glob patterns to use for matching.
15537 * @param {Object} [options] See available [options](#options).
15538 * @return {Boolean} Returns true if any patterns match `str`
15539 * @api public
15540 */
15541
15542micromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
15543
15544/**
15545 * Backwards compatibility
15546 */
15547
15548micromatch.any = micromatch.isMatch;
15549
15550/**
15551 * Returns a list of strings that _**do not match any**_ of the given `patterns`.
15552 *
15553 * ```js
15554 * const mm = require('micromatch');
15555 * // mm.not(list, patterns[, options]);
15556 *
15557 * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));
15558 * //=> ['b.b', 'c.c']
15559 * ```
15560 * @param {Array} `list` Array of strings to match.
15561 * @param {String|Array} `patterns` One or more glob pattern to use for matching.
15562 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15563 * @return {Array} Returns an array of strings that **do not match** the given patterns.
15564 * @api public
15565 */
15566
15567micromatch.not = (list, patterns, options = {}) => {
15568 patterns = [].concat(patterns).map(String);
15569 let result = new Set();
15570 let items = [];
15571
15572 let onResult = state => {
15573 if (options.onResult) options.onResult(state);
15574 items.push(state.output);
15575 };
15576
15577 let matches = micromatch(list, patterns, { ...options, onResult });
15578
15579 for (let item of items) {
15580 if (!matches.includes(item)) {
15581 result.add(item);
15582 }
15583 }
15584 return [...result];
15585};
15586
15587/**
15588 * Returns true if the given `string` contains the given pattern. Similar
15589 * to [.isMatch](#isMatch) but the pattern can match any part of the string.
15590 *
15591 * ```js
15592 * var mm = require('micromatch');
15593 * // mm.contains(string, pattern[, options]);
15594 *
15595 * console.log(mm.contains('aa/bb/cc', '*b'));
15596 * //=> true
15597 * console.log(mm.contains('aa/bb/cc', '*d'));
15598 * //=> false
15599 * ```
15600 * @param {String} `str` The string to match.
15601 * @param {String|Array} `patterns` Glob pattern to use for matching.
15602 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15603 * @return {Boolean} Returns true if the patter matches any part of `str`.
15604 * @api public
15605 */
15606
15607micromatch.contains = (str, pattern, options) => {
15608 if (typeof str !== 'string') {
15609 throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
15610 }
15611
15612 if (Array.isArray(pattern)) {
15613 return pattern.some(p => micromatch.contains(str, p, options));
15614 }
15615
15616 if (typeof pattern === 'string') {
15617 if (isEmptyString(str) || isEmptyString(pattern)) {
15618 return false;
15619 }
15620
15621 if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {
15622 return true;
15623 }
15624 }
15625
15626 return micromatch.isMatch(str, pattern, { ...options, contains: true });
15627};
15628
15629/**
15630 * Filter the keys of the given object with the given `glob` pattern
15631 * and `options`. Does not attempt to match nested keys. If you need this feature,
15632 * use [glob-object][] instead.
15633 *
15634 * ```js
15635 * const mm = require('micromatch');
15636 * // mm.matchKeys(object, patterns[, options]);
15637 *
15638 * const obj = { aa: 'a', ab: 'b', ac: 'c' };
15639 * console.log(mm.matchKeys(obj, '*b'));
15640 * //=> { ab: 'b' }
15641 * ```
15642 * @param {Object} `object` The object with keys to filter.
15643 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
15644 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15645 * @return {Object} Returns an object with only keys that match the given patterns.
15646 * @api public
15647 */
15648
15649micromatch.matchKeys = (obj, patterns, options) => {
15650 if (!utils.isObject(obj)) {
15651 throw new TypeError('Expected the first argument to be an object');
15652 }
15653 let keys = micromatch(Object.keys(obj), patterns, options);
15654 let res = {};
15655 for (let key of keys) res[key] = obj[key];
15656 return res;
15657};
15658
15659/**
15660 * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.
15661 *
15662 * ```js
15663 * const mm = require('micromatch');
15664 * // mm.some(list, patterns[, options]);
15665 *
15666 * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
15667 * // true
15668 * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));
15669 * // false
15670 * ```
15671 * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.
15672 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
15673 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15674 * @return {Boolean} Returns true if any patterns match `str`
15675 * @api public
15676 */
15677
15678micromatch.some = (list, patterns, options) => {
15679 let items = [].concat(list);
15680
15681 for (let pattern of [].concat(patterns)) {
15682 let isMatch = picomatch(String(pattern), options);
15683 if (items.some(item => isMatch(item))) {
15684 return true;
15685 }
15686 }
15687 return false;
15688};
15689
15690/**
15691 * Returns true if every string in the given `list` matches
15692 * any of the given glob `patterns`.
15693 *
15694 * ```js
15695 * const mm = require('micromatch');
15696 * // mm.every(list, patterns[, options]);
15697 *
15698 * console.log(mm.every('foo.js', ['foo.js']));
15699 * // true
15700 * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));
15701 * // true
15702 * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
15703 * // false
15704 * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));
15705 * // false
15706 * ```
15707 * @param {String|Array} `list` The string or array of strings to test.
15708 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
15709 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15710 * @return {Boolean} Returns true if any patterns match `str`
15711 * @api public
15712 */
15713
15714micromatch.every = (list, patterns, options) => {
15715 let items = [].concat(list);
15716
15717 for (let pattern of [].concat(patterns)) {
15718 let isMatch = picomatch(String(pattern), options);
15719 if (!items.every(item => isMatch(item))) {
15720 return false;
15721 }
15722 }
15723 return true;
15724};
15725
15726/**
15727 * Returns true if **all** of the given `patterns` match
15728 * the specified string.
15729 *
15730 * ```js
15731 * const mm = require('micromatch');
15732 * // mm.all(string, patterns[, options]);
15733 *
15734 * console.log(mm.all('foo.js', ['foo.js']));
15735 * // true
15736 *
15737 * console.log(mm.all('foo.js', ['*.js', '!foo.js']));
15738 * // false
15739 *
15740 * console.log(mm.all('foo.js', ['*.js', 'foo.js']));
15741 * // true
15742 *
15743 * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));
15744 * // true
15745 * ```
15746 * @param {String|Array} `str` The string to test.
15747 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
15748 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15749 * @return {Boolean} Returns true if any patterns match `str`
15750 * @api public
15751 */
15752
15753micromatch.all = (str, patterns, options) => {
15754 if (typeof str !== 'string') {
15755 throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
15756 }
15757
15758 return [].concat(patterns).every(p => picomatch(p, options)(str));
15759};
15760
15761/**
15762 * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.
15763 *
15764 * ```js
15765 * const mm = require('micromatch');
15766 * // mm.capture(pattern, string[, options]);
15767 *
15768 * console.log(mm.capture('test/*.js', 'test/foo.js'));
15769 * //=> ['foo']
15770 * console.log(mm.capture('test/*.js', 'foo/bar.css'));
15771 * //=> null
15772 * ```
15773 * @param {String} `glob` Glob pattern to use for matching.
15774 * @param {String} `input` String to match
15775 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15776 * @return {Boolean} Returns an array of captures if the input matches the glob pattern, otherwise `null`.
15777 * @api public
15778 */
15779
15780micromatch.capture = (glob, input, options) => {
15781 let posix = utils.isWindows(options);
15782 let regex = picomatch.makeRe(String(glob), { ...options, capture: true });
15783 let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);
15784
15785 if (match) {
15786 return match.slice(1).map(v => v === void 0 ? '' : v);
15787 }
15788};
15789
15790/**
15791 * Create a regular expression from the given glob `pattern`.
15792 *
15793 * ```js
15794 * const mm = require('micromatch');
15795 * // mm.makeRe(pattern[, options]);
15796 *
15797 * console.log(mm.makeRe('*.js'));
15798 * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/
15799 * ```
15800 * @param {String} `pattern` A glob pattern to convert to regex.
15801 * @param {Object} `options`
15802 * @return {RegExp} Returns a regex created from the given pattern.
15803 * @api public
15804 */
15805
15806micromatch.makeRe = (...args) => picomatch.makeRe(...args);
15807
15808/**
15809 * Scan a glob pattern to separate the pattern into segments. Used
15810 * by the [split](#split) method.
15811 *
15812 * ```js
15813 * const mm = require('micromatch');
15814 * const state = mm.scan(pattern[, options]);
15815 * ```
15816 * @param {String} `pattern`
15817 * @param {Object} `options`
15818 * @return {Object} Returns an object with
15819 * @api public
15820 */
15821
15822micromatch.scan = (...args) => picomatch.scan(...args);
15823
15824/**
15825 * Parse a glob pattern to create the source string for a regular
15826 * expression.
15827 *
15828 * ```js
15829 * const mm = require('micromatch');
15830 * const state = mm(pattern[, options]);
15831 * ```
15832 * @param {String} `glob`
15833 * @param {Object} `options`
15834 * @return {Object} Returns an object with useful properties and output to be used as regex source string.
15835 * @api public
15836 */
15837
15838micromatch.parse = (patterns, options) => {
15839 let res = [];
15840 for (let pattern of [].concat(patterns || [])) {
15841 for (let str of braces(String(pattern), options)) {
15842 res.push(picomatch.parse(str, options));
15843 }
15844 }
15845 return res;
15846};
15847
15848/**
15849 * Process the given brace `pattern`.
15850 *
15851 * ```js
15852 * const { braces } = require('micromatch');
15853 * console.log(braces('foo/{a,b,c}/bar'));
15854 * //=> [ 'foo/(a|b|c)/bar' ]
15855 *
15856 * console.log(braces('foo/{a,b,c}/bar', { expand: true }));
15857 * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]
15858 * ```
15859 * @param {String} `pattern` String with brace pattern to process.
15860 * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.
15861 * @return {Array}
15862 * @api public
15863 */
15864
15865micromatch.braces = (pattern, options) => {
15866 if (typeof pattern !== 'string') throw new TypeError('Expected a string');
15867 if ((options && options.nobrace === true) || !/\{.*\}/.test(pattern)) {
15868 return [pattern];
15869 }
15870 return braces(pattern, options);
15871};
15872
15873/**
15874 * Expand braces
15875 */
15876
15877micromatch.braceExpand = (pattern, options) => {
15878 if (typeof pattern !== 'string') throw new TypeError('Expected a string');
15879 return micromatch.braces(pattern, { ...options, expand: true });
15880};
15881
15882/**
15883 * Expose micromatch
15884 */
15885
15886module.exports = micromatch;
15887
15888
15889/***/ }),
15890/* 71 */
15891/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
15892
15893"use strict";
15894
15895
15896const stringify = __webpack_require__(72);
15897const compile = __webpack_require__(74);
15898const expand = __webpack_require__(78);
15899const parse = __webpack_require__(79);
15900
15901/**
15902 * Expand the given pattern or create a regex-compatible string.
15903 *
15904 * ```js
15905 * const braces = require('braces');
15906 * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']
15907 * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']
15908 * ```
15909 * @param {String} `str`
15910 * @param {Object} `options`
15911 * @return {String}
15912 * @api public
15913 */
15914
15915const braces = (input, options = {}) => {
15916 let output = [];
15917
15918 if (Array.isArray(input)) {
15919 for (let pattern of input) {
15920 let result = braces.create(pattern, options);
15921 if (Array.isArray(result)) {
15922 output.push(...result);
15923 } else {
15924 output.push(result);
15925 }
15926 }
15927 } else {
15928 output = [].concat(braces.create(input, options));
15929 }
15930
15931 if (options && options.expand === true && options.nodupes === true) {
15932 output = [...new Set(output)];
15933 }
15934 return output;
15935};
15936
15937/**
15938 * Parse the given `str` with the given `options`.
15939 *
15940 * ```js
15941 * // braces.parse(pattern, [, options]);
15942 * const ast = braces.parse('a/{b,c}/d');
15943 * console.log(ast);
15944 * ```
15945 * @param {String} pattern Brace pattern to parse
15946 * @param {Object} options
15947 * @return {Object} Returns an AST
15948 * @api public
15949 */
15950
15951braces.parse = (input, options = {}) => parse(input, options);
15952
15953/**
15954 * Creates a braces string from an AST, or an AST node.
15955 *
15956 * ```js
15957 * const braces = require('braces');
15958 * let ast = braces.parse('foo/{a,b}/bar');
15959 * console.log(stringify(ast.nodes[2])); //=> '{a,b}'
15960 * ```
15961 * @param {String} `input` Brace pattern or AST.
15962 * @param {Object} `options`
15963 * @return {Array} Returns an array of expanded values.
15964 * @api public
15965 */
15966
15967braces.stringify = (input, options = {}) => {
15968 if (typeof input === 'string') {
15969 return stringify(braces.parse(input, options), options);
15970 }
15971 return stringify(input, options);
15972};
15973
15974/**
15975 * Compiles a brace pattern into a regex-compatible, optimized string.
15976 * This method is called by the main [braces](#braces) function by default.
15977 *
15978 * ```js
15979 * const braces = require('braces');
15980 * console.log(braces.compile('a/{b,c}/d'));
15981 * //=> ['a/(b|c)/d']
15982 * ```
15983 * @param {String} `input` Brace pattern or AST.
15984 * @param {Object} `options`
15985 * @return {Array} Returns an array of expanded values.
15986 * @api public
15987 */
15988
15989braces.compile = (input, options = {}) => {
15990 if (typeof input === 'string') {
15991 input = braces.parse(input, options);
15992 }
15993 return compile(input, options);
15994};
15995
15996/**
15997 * Expands a brace pattern into an array. This method is called by the
15998 * main [braces](#braces) function when `options.expand` is true. Before
15999 * using this method it's recommended that you read the [performance notes](#performance))
16000 * and advantages of using [.compile](#compile) instead.
16001 *
16002 * ```js
16003 * const braces = require('braces');
16004 * console.log(braces.expand('a/{b,c}/d'));
16005 * //=> ['a/b/d', 'a/c/d'];
16006 * ```
16007 * @param {String} `pattern` Brace pattern
16008 * @param {Object} `options`
16009 * @return {Array} Returns an array of expanded values.
16010 * @api public
16011 */
16012
16013braces.expand = (input, options = {}) => {
16014 if (typeof input === 'string') {
16015 input = braces.parse(input, options);
16016 }
16017
16018 let result = expand(input, options);
16019
16020 // filter out empty strings if specified
16021 if (options.noempty === true) {
16022 result = result.filter(Boolean);
16023 }
16024
16025 // filter out duplicates if specified
16026 if (options.nodupes === true) {
16027 result = [...new Set(result)];
16028 }
16029
16030 return result;
16031};
16032
16033/**
16034 * Processes a brace pattern and returns either an expanded array
16035 * (if `options.expand` is true), a highly optimized regex-compatible string.
16036 * This method is called by the main [braces](#braces) function.
16037 *
16038 * ```js
16039 * const braces = require('braces');
16040 * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))
16041 * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'
16042 * ```
16043 * @param {String} `pattern` Brace pattern
16044 * @param {Object} `options`
16045 * @return {Array} Returns an array of expanded values.
16046 * @api public
16047 */
16048
16049braces.create = (input, options = {}) => {
16050 if (input === '' || input.length < 3) {
16051 return [input];
16052 }
16053
16054 return options.expand !== true
16055 ? braces.compile(input, options)
16056 : braces.expand(input, options);
16057};
16058
16059/**
16060 * Expose "braces"
16061 */
16062
16063module.exports = braces;
16064
16065
16066/***/ }),
16067/* 72 */
16068/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
16069
16070"use strict";
16071
16072
16073const utils = __webpack_require__(73);
16074
16075module.exports = (ast, options = {}) => {
16076 let stringify = (node, parent = {}) => {
16077 let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);
16078 let invalidNode = node.invalid === true && options.escapeInvalid === true;
16079 let output = '';
16080
16081 if (node.value) {
16082 if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {
16083 return '\\' + node.value;
16084 }
16085 return node.value;
16086 }
16087
16088 if (node.value) {
16089 return node.value;
16090 }
16091
16092 if (node.nodes) {
16093 for (let child of node.nodes) {
16094 output += stringify(child);
16095 }
16096 }
16097 return output;
16098 };
16099
16100 return stringify(ast);
16101};
16102
16103
16104
16105/***/ }),
16106/* 73 */
16107/***/ ((__unused_webpack_module, exports) => {
16108
16109"use strict";
16110
16111
16112exports.isInteger = num => {
16113 if (typeof num === 'number') {
16114 return Number.isInteger(num);
16115 }
16116 if (typeof num === 'string' && num.trim() !== '') {
16117 return Number.isInteger(Number(num));
16118 }
16119 return false;
16120};
16121
16122/**
16123 * Find a node of the given type
16124 */
16125
16126exports.find = (node, type) => node.nodes.find(node => node.type === type);
16127
16128/**
16129 * Find a node of the given type
16130 */
16131
16132exports.exceedsLimit = (min, max, step = 1, limit) => {
16133 if (limit === false) return false;
16134 if (!exports.isInteger(min) || !exports.isInteger(max)) return false;
16135 return ((Number(max) - Number(min)) / Number(step)) >= limit;
16136};
16137
16138/**
16139 * Escape the given node with '\\' before node.value
16140 */
16141
16142exports.escapeNode = (block, n = 0, type) => {
16143 let node = block.nodes[n];
16144 if (!node) return;
16145
16146 if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {
16147 if (node.escaped !== true) {
16148 node.value = '\\' + node.value;
16149 node.escaped = true;
16150 }
16151 }
16152};
16153
16154/**
16155 * Returns true if the given brace node should be enclosed in literal braces
16156 */
16157
16158exports.encloseBrace = node => {
16159 if (node.type !== 'brace') return false;
16160 if ((node.commas >> 0 + node.ranges >> 0) === 0) {
16161 node.invalid = true;
16162 return true;
16163 }
16164 return false;
16165};
16166
16167/**
16168 * Returns true if a brace node is invalid.
16169 */
16170
16171exports.isInvalidBrace = block => {
16172 if (block.type !== 'brace') return false;
16173 if (block.invalid === true || block.dollar) return true;
16174 if ((block.commas >> 0 + block.ranges >> 0) === 0) {
16175 block.invalid = true;
16176 return true;
16177 }
16178 if (block.open !== true || block.close !== true) {
16179 block.invalid = true;
16180 return true;
16181 }
16182 return false;
16183};
16184
16185/**
16186 * Returns true if a node is an open or close node
16187 */
16188
16189exports.isOpenOrClose = node => {
16190 if (node.type === 'open' || node.type === 'close') {
16191 return true;
16192 }
16193 return node.open === true || node.close === true;
16194};
16195
16196/**
16197 * Reduce an array of text nodes.
16198 */
16199
16200exports.reduce = nodes => nodes.reduce((acc, node) => {
16201 if (node.type === 'text') acc.push(node.value);
16202 if (node.type === 'range') node.type = 'text';
16203 return acc;
16204}, []);
16205
16206/**
16207 * Flatten an array
16208 */
16209
16210exports.flatten = (...args) => {
16211 const result = [];
16212 const flat = arr => {
16213 for (let i = 0; i < arr.length; i++) {
16214 let ele = arr[i];
16215 Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele);
16216 }
16217 return result;
16218 };
16219 flat(args);
16220 return result;
16221};
16222
16223
16224/***/ }),
16225/* 74 */
16226/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
16227
16228"use strict";
16229
16230
16231const fill = __webpack_require__(75);
16232const utils = __webpack_require__(73);
16233
16234const compile = (ast, options = {}) => {
16235 let walk = (node, parent = {}) => {
16236 let invalidBlock = utils.isInvalidBrace(parent);
16237 let invalidNode = node.invalid === true && options.escapeInvalid === true;
16238 let invalid = invalidBlock === true || invalidNode === true;
16239 let prefix = options.escapeInvalid === true ? '\\' : '';
16240 let output = '';
16241
16242 if (node.isOpen === true) {
16243 return prefix + node.value;
16244 }
16245 if (node.isClose === true) {
16246 return prefix + node.value;
16247 }
16248
16249 if (node.type === 'open') {
16250 return invalid ? (prefix + node.value) : '(';
16251 }
16252
16253 if (node.type === 'close') {
16254 return invalid ? (prefix + node.value) : ')';
16255 }
16256
16257 if (node.type === 'comma') {
16258 return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');
16259 }
16260
16261 if (node.value) {
16262 return node.value;
16263 }
16264
16265 if (node.nodes && node.ranges > 0) {
16266 let args = utils.reduce(node.nodes);
16267 let range = fill(...args, { ...options, wrap: false, toRegex: true });
16268
16269 if (range.length !== 0) {
16270 return args.length > 1 && range.length > 1 ? `(${range})` : range;
16271 }
16272 }
16273
16274 if (node.nodes) {
16275 for (let child of node.nodes) {
16276 output += walk(child, node);
16277 }
16278 }
16279 return output;
16280 };
16281
16282 return walk(ast);
16283};
16284
16285module.exports = compile;
16286
16287
16288/***/ }),
16289/* 75 */
16290/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
16291
16292"use strict";
16293/*!
16294 * fill-range <https://github.com/jonschlinkert/fill-range>
16295 *
16296 * Copyright (c) 2014-present, Jon Schlinkert.
16297 * Licensed under the MIT License.
16298 */
16299
16300
16301
16302const util = __webpack_require__(48);
16303const toRegexRange = __webpack_require__(76);
16304
16305const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
16306
16307const transform = toNumber => {
16308 return value => toNumber === true ? Number(value) : String(value);
16309};
16310
16311const isValidValue = value => {
16312 return typeof value === 'number' || (typeof value === 'string' && value !== '');
16313};
16314
16315const isNumber = num => Number.isInteger(+num);
16316
16317const zeros = input => {
16318 let value = `${input}`;
16319 let index = -1;
16320 if (value[0] === '-') value = value.slice(1);
16321 if (value === '0') return false;
16322 while (value[++index] === '0');
16323 return index > 0;
16324};
16325
16326const stringify = (start, end, options) => {
16327 if (typeof start === 'string' || typeof end === 'string') {
16328 return true;
16329 }
16330 return options.stringify === true;
16331};
16332
16333const pad = (input, maxLength, toNumber) => {
16334 if (maxLength > 0) {
16335 let dash = input[0] === '-' ? '-' : '';
16336 if (dash) input = input.slice(1);
16337 input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));
16338 }
16339 if (toNumber === false) {
16340 return String(input);
16341 }
16342 return input;
16343};
16344
16345const toMaxLen = (input, maxLength) => {
16346 let negative = input[0] === '-' ? '-' : '';
16347 if (negative) {
16348 input = input.slice(1);
16349 maxLength--;
16350 }
16351 while (input.length < maxLength) input = '0' + input;
16352 return negative ? ('-' + input) : input;
16353};
16354
16355const toSequence = (parts, options) => {
16356 parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
16357 parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
16358
16359 let prefix = options.capture ? '' : '?:';
16360 let positives = '';
16361 let negatives = '';
16362 let result;
16363
16364 if (parts.positives.length) {
16365 positives = parts.positives.join('|');
16366 }
16367
16368 if (parts.negatives.length) {
16369 negatives = `-(${prefix}${parts.negatives.join('|')})`;
16370 }
16371
16372 if (positives && negatives) {
16373 result = `${positives}|${negatives}`;
16374 } else {
16375 result = positives || negatives;
16376 }
16377
16378 if (options.wrap) {
16379 return `(${prefix}${result})`;
16380 }
16381
16382 return result;
16383};
16384
16385const toRange = (a, b, isNumbers, options) => {
16386 if (isNumbers) {
16387 return toRegexRange(a, b, { wrap: false, ...options });
16388 }
16389
16390 let start = String.fromCharCode(a);
16391 if (a === b) return start;
16392
16393 let stop = String.fromCharCode(b);
16394 return `[${start}-${stop}]`;
16395};
16396
16397const toRegex = (start, end, options) => {
16398 if (Array.isArray(start)) {
16399 let wrap = options.wrap === true;
16400 let prefix = options.capture ? '' : '?:';
16401 return wrap ? `(${prefix}${start.join('|')})` : start.join('|');
16402 }
16403 return toRegexRange(start, end, options);
16404};
16405
16406const rangeError = (...args) => {
16407 return new RangeError('Invalid range arguments: ' + util.inspect(...args));
16408};
16409
16410const invalidRange = (start, end, options) => {
16411 if (options.strictRanges === true) throw rangeError([start, end]);
16412 return [];
16413};
16414
16415const invalidStep = (step, options) => {
16416 if (options.strictRanges === true) {
16417 throw new TypeError(`Expected step "${step}" to be a number`);
16418 }
16419 return [];
16420};
16421
16422const fillNumbers = (start, end, step = 1, options = {}) => {
16423 let a = Number(start);
16424 let b = Number(end);
16425
16426 if (!Number.isInteger(a) || !Number.isInteger(b)) {
16427 if (options.strictRanges === true) throw rangeError([start, end]);
16428 return [];
16429 }
16430
16431 // fix negative zero
16432 if (a === 0) a = 0;
16433 if (b === 0) b = 0;
16434
16435 let descending = a > b;
16436 let startString = String(start);
16437 let endString = String(end);
16438 let stepString = String(step);
16439 step = Math.max(Math.abs(step), 1);
16440
16441 let padded = zeros(startString) || zeros(endString) || zeros(stepString);
16442 let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;
16443 let toNumber = padded === false && stringify(start, end, options) === false;
16444 let format = options.transform || transform(toNumber);
16445
16446 if (options.toRegex && step === 1) {
16447 return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
16448 }
16449
16450 let parts = { negatives: [], positives: [] };
16451 let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));
16452 let range = [];
16453 let index = 0;
16454
16455 while (descending ? a >= b : a <= b) {
16456 if (options.toRegex === true && step > 1) {
16457 push(a);
16458 } else {
16459 range.push(pad(format(a, index), maxLen, toNumber));
16460 }
16461 a = descending ? a - step : a + step;
16462 index++;
16463 }
16464
16465 if (options.toRegex === true) {
16466 return step > 1
16467 ? toSequence(parts, options)
16468 : toRegex(range, null, { wrap: false, ...options });
16469 }
16470
16471 return range;
16472};
16473
16474const fillLetters = (start, end, step = 1, options = {}) => {
16475 if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {
16476 return invalidRange(start, end, options);
16477 }
16478
16479
16480 let format = options.transform || (val => String.fromCharCode(val));
16481 let a = `${start}`.charCodeAt(0);
16482 let b = `${end}`.charCodeAt(0);
16483
16484 let descending = a > b;
16485 let min = Math.min(a, b);
16486 let max = Math.max(a, b);
16487
16488 if (options.toRegex && step === 1) {
16489 return toRange(min, max, false, options);
16490 }
16491
16492 let range = [];
16493 let index = 0;
16494
16495 while (descending ? a >= b : a <= b) {
16496 range.push(format(a, index));
16497 a = descending ? a - step : a + step;
16498 index++;
16499 }
16500
16501 if (options.toRegex === true) {
16502 return toRegex(range, null, { wrap: false, options });
16503 }
16504
16505 return range;
16506};
16507
16508const fill = (start, end, step, options = {}) => {
16509 if (end == null && isValidValue(start)) {
16510 return [start];
16511 }
16512
16513 if (!isValidValue(start) || !isValidValue(end)) {
16514 return invalidRange(start, end, options);
16515 }
16516
16517 if (typeof step === 'function') {
16518 return fill(start, end, 1, { transform: step });
16519 }
16520
16521 if (isObject(step)) {
16522 return fill(start, end, 0, step);
16523 }
16524
16525 let opts = { ...options };
16526 if (opts.capture === true) opts.wrap = true;
16527 step = step || opts.step || 1;
16528
16529 if (!isNumber(step)) {
16530 if (step != null && !isObject(step)) return invalidStep(step, opts);
16531 return fill(start, end, 1, step);
16532 }
16533
16534 if (isNumber(start) && isNumber(end)) {
16535 return fillNumbers(start, end, step, opts);
16536 }
16537
16538 return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
16539};
16540
16541module.exports = fill;
16542
16543
16544/***/ }),
16545/* 76 */
16546/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
16547
16548"use strict";
16549/*!
16550 * to-regex-range <https://github.com/micromatch/to-regex-range>
16551 *
16552 * Copyright (c) 2015-present, Jon Schlinkert.
16553 * Released under the MIT License.
16554 */
16555
16556
16557
16558const isNumber = __webpack_require__(77);
16559
16560const toRegexRange = (min, max, options) => {
16561 if (isNumber(min) === false) {
16562 throw new TypeError('toRegexRange: expected the first argument to be a number');
16563 }
16564
16565 if (max === void 0 || min === max) {
16566 return String(min);
16567 }
16568
16569 if (isNumber(max) === false) {
16570 throw new TypeError('toRegexRange: expected the second argument to be a number.');
16571 }
16572
16573 let opts = { relaxZeros: true, ...options };
16574 if (typeof opts.strictZeros === 'boolean') {
16575 opts.relaxZeros = opts.strictZeros === false;
16576 }
16577
16578 let relax = String(opts.relaxZeros);
16579 let shorthand = String(opts.shorthand);
16580 let capture = String(opts.capture);
16581 let wrap = String(opts.wrap);
16582 let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;
16583
16584 if (toRegexRange.cache.hasOwnProperty(cacheKey)) {
16585 return toRegexRange.cache[cacheKey].result;
16586 }
16587
16588 let a = Math.min(min, max);
16589 let b = Math.max(min, max);
16590
16591 if (Math.abs(a - b) === 1) {
16592 let result = min + '|' + max;
16593 if (opts.capture) {
16594 return `(${result})`;
16595 }
16596 if (opts.wrap === false) {
16597 return result;
16598 }
16599 return `(?:${result})`;
16600 }
16601
16602 let isPadded = hasPadding(min) || hasPadding(max);
16603 let state = { min, max, a, b };
16604 let positives = [];
16605 let negatives = [];
16606
16607 if (isPadded) {
16608 state.isPadded = isPadded;
16609 state.maxLen = String(state.max).length;
16610 }
16611
16612 if (a < 0) {
16613 let newMin = b < 0 ? Math.abs(b) : 1;
16614 negatives = splitToPatterns(newMin, Math.abs(a), state, opts);
16615 a = state.a = 0;
16616 }
16617
16618 if (b >= 0) {
16619 positives = splitToPatterns(a, b, state, opts);
16620 }
16621
16622 state.negatives = negatives;
16623 state.positives = positives;
16624 state.result = collatePatterns(negatives, positives, opts);
16625
16626 if (opts.capture === true) {
16627 state.result = `(${state.result})`;
16628 } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {
16629 state.result = `(?:${state.result})`;
16630 }
16631
16632 toRegexRange.cache[cacheKey] = state;
16633 return state.result;
16634};
16635
16636function collatePatterns(neg, pos, options) {
16637 let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];
16638 let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];
16639 let intersected = filterPatterns(neg, pos, '-?', true, options) || [];
16640 let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);
16641 return subpatterns.join('|');
16642}
16643
16644function splitToRanges(min, max) {
16645 let nines = 1;
16646 let zeros = 1;
16647
16648 let stop = countNines(min, nines);
16649 let stops = new Set([max]);
16650
16651 while (min <= stop && stop <= max) {
16652 stops.add(stop);
16653 nines += 1;
16654 stop = countNines(min, nines);
16655 }
16656
16657 stop = countZeros(max + 1, zeros) - 1;
16658
16659 while (min < stop && stop <= max) {
16660 stops.add(stop);
16661 zeros += 1;
16662 stop = countZeros(max + 1, zeros) - 1;
16663 }
16664
16665 stops = [...stops];
16666 stops.sort(compare);
16667 return stops;
16668}
16669
16670/**
16671 * Convert a range to a regex pattern
16672 * @param {Number} `start`
16673 * @param {Number} `stop`
16674 * @return {String}
16675 */
16676
16677function rangeToPattern(start, stop, options) {
16678 if (start === stop) {
16679 return { pattern: start, count: [], digits: 0 };
16680 }
16681
16682 let zipped = zip(start, stop);
16683 let digits = zipped.length;
16684 let pattern = '';
16685 let count = 0;
16686
16687 for (let i = 0; i < digits; i++) {
16688 let [startDigit, stopDigit] = zipped[i];
16689
16690 if (startDigit === stopDigit) {
16691 pattern += startDigit;
16692
16693 } else if (startDigit !== '0' || stopDigit !== '9') {
16694 pattern += toCharacterClass(startDigit, stopDigit, options);
16695
16696 } else {
16697 count++;
16698 }
16699 }
16700
16701 if (count) {
16702 pattern += options.shorthand === true ? '\\d' : '[0-9]';
16703 }
16704
16705 return { pattern, count: [count], digits };
16706}
16707
16708function splitToPatterns(min, max, tok, options) {
16709 let ranges = splitToRanges(min, max);
16710 let tokens = [];
16711 let start = min;
16712 let prev;
16713
16714 for (let i = 0; i < ranges.length; i++) {
16715 let max = ranges[i];
16716 let obj = rangeToPattern(String(start), String(max), options);
16717 let zeros = '';
16718
16719 if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
16720 if (prev.count.length > 1) {
16721 prev.count.pop();
16722 }
16723
16724 prev.count.push(obj.count[0]);
16725 prev.string = prev.pattern + toQuantifier(prev.count);
16726 start = max + 1;
16727 continue;
16728 }
16729
16730 if (tok.isPadded) {
16731 zeros = padZeros(max, tok, options);
16732 }
16733
16734 obj.string = zeros + obj.pattern + toQuantifier(obj.count);
16735 tokens.push(obj);
16736 start = max + 1;
16737 prev = obj;
16738 }
16739
16740 return tokens;
16741}
16742
16743function filterPatterns(arr, comparison, prefix, intersection, options) {
16744 let result = [];
16745
16746 for (let ele of arr) {
16747 let { string } = ele;
16748
16749 // only push if _both_ are negative...
16750 if (!intersection && !contains(comparison, 'string', string)) {
16751 result.push(prefix + string);
16752 }
16753
16754 // or _both_ are positive
16755 if (intersection && contains(comparison, 'string', string)) {
16756 result.push(prefix + string);
16757 }
16758 }
16759 return result;
16760}
16761
16762/**
16763 * Zip strings
16764 */
16765
16766function zip(a, b) {
16767 let arr = [];
16768 for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
16769 return arr;
16770}
16771
16772function compare(a, b) {
16773 return a > b ? 1 : b > a ? -1 : 0;
16774}
16775
16776function contains(arr, key, val) {
16777 return arr.some(ele => ele[key] === val);
16778}
16779
16780function countNines(min, len) {
16781 return Number(String(min).slice(0, -len) + '9'.repeat(len));
16782}
16783
16784function countZeros(integer, zeros) {
16785 return integer - (integer % Math.pow(10, zeros));
16786}
16787
16788function toQuantifier(digits) {
16789 let [start = 0, stop = ''] = digits;
16790 if (stop || start > 1) {
16791 return `{${start + (stop ? ',' + stop : '')}}`;
16792 }
16793 return '';
16794}
16795
16796function toCharacterClass(a, b, options) {
16797 return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;
16798}
16799
16800function hasPadding(str) {
16801 return /^-?(0+)\d/.test(str);
16802}
16803
16804function padZeros(value, tok, options) {
16805 if (!tok.isPadded) {
16806 return value;
16807 }
16808
16809 let diff = Math.abs(tok.maxLen - String(value).length);
16810 let relax = options.relaxZeros !== false;
16811
16812 switch (diff) {
16813 case 0:
16814 return '';
16815 case 1:
16816 return relax ? '0?' : '0';
16817 case 2:
16818 return relax ? '0{0,2}' : '00';
16819 default: {
16820 return relax ? `0{0,${diff}}` : `0{${diff}}`;
16821 }
16822 }
16823}
16824
16825/**
16826 * Cache
16827 */
16828
16829toRegexRange.cache = {};
16830toRegexRange.clearCache = () => (toRegexRange.cache = {});
16831
16832/**
16833 * Expose `toRegexRange`
16834 */
16835
16836module.exports = toRegexRange;
16837
16838
16839/***/ }),
16840/* 77 */
16841/***/ ((module) => {
16842
16843"use strict";
16844/*!
16845 * is-number <https://github.com/jonschlinkert/is-number>
16846 *
16847 * Copyright (c) 2014-present, Jon Schlinkert.
16848 * Released under the MIT License.
16849 */
16850
16851
16852
16853module.exports = function(num) {
16854 if (typeof num === 'number') {
16855 return num - num === 0;
16856 }
16857 if (typeof num === 'string' && num.trim() !== '') {
16858 return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);
16859 }
16860 return false;
16861};
16862
16863
16864/***/ }),
16865/* 78 */
16866/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
16867
16868"use strict";
16869
16870
16871const fill = __webpack_require__(75);
16872const stringify = __webpack_require__(72);
16873const utils = __webpack_require__(73);
16874
16875const append = (queue = '', stash = '', enclose = false) => {
16876 let result = [];
16877
16878 queue = [].concat(queue);
16879 stash = [].concat(stash);
16880
16881 if (!stash.length) return queue;
16882 if (!queue.length) {
16883 return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;
16884 }
16885
16886 for (let item of queue) {
16887 if (Array.isArray(item)) {
16888 for (let value of item) {
16889 result.push(append(value, stash, enclose));
16890 }
16891 } else {
16892 for (let ele of stash) {
16893 if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;
16894 result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));
16895 }
16896 }
16897 }
16898 return utils.flatten(result);
16899};
16900
16901const expand = (ast, options = {}) => {
16902 let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;
16903
16904 let walk = (node, parent = {}) => {
16905 node.queue = [];
16906
16907 let p = parent;
16908 let q = parent.queue;
16909
16910 while (p.type !== 'brace' && p.type !== 'root' && p.parent) {
16911 p = p.parent;
16912 q = p.queue;
16913 }
16914
16915 if (node.invalid || node.dollar) {
16916 q.push(append(q.pop(), stringify(node, options)));
16917 return;
16918 }
16919
16920 if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {
16921 q.push(append(q.pop(), ['{}']));
16922 return;
16923 }
16924
16925 if (node.nodes && node.ranges > 0) {
16926 let args = utils.reduce(node.nodes);
16927
16928 if (utils.exceedsLimit(...args, options.step, rangeLimit)) {
16929 throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');
16930 }
16931
16932 let range = fill(...args, options);
16933 if (range.length === 0) {
16934 range = stringify(node, options);
16935 }
16936
16937 q.push(append(q.pop(), range));
16938 node.nodes = [];
16939 return;
16940 }
16941
16942 let enclose = utils.encloseBrace(node);
16943 let queue = node.queue;
16944 let block = node;
16945
16946 while (block.type !== 'brace' && block.type !== 'root' && block.parent) {
16947 block = block.parent;
16948 queue = block.queue;
16949 }
16950
16951 for (let i = 0; i < node.nodes.length; i++) {
16952 let child = node.nodes[i];
16953
16954 if (child.type === 'comma' && node.type === 'brace') {
16955 if (i === 1) queue.push('');
16956 queue.push('');
16957 continue;
16958 }
16959
16960 if (child.type === 'close') {
16961 q.push(append(q.pop(), queue, enclose));
16962 continue;
16963 }
16964
16965 if (child.value && child.type !== 'open') {
16966 queue.push(append(queue.pop(), child.value));
16967 continue;
16968 }
16969
16970 if (child.nodes) {
16971 walk(child, node);
16972 }
16973 }
16974
16975 return queue;
16976 };
16977
16978 return utils.flatten(walk(ast));
16979};
16980
16981module.exports = expand;
16982
16983
16984/***/ }),
16985/* 79 */
16986/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
16987
16988"use strict";
16989
16990
16991const stringify = __webpack_require__(72);
16992
16993/**
16994 * Constants
16995 */
16996
16997const {
16998 MAX_LENGTH,
16999 CHAR_BACKSLASH, /* \ */
17000 CHAR_BACKTICK, /* ` */
17001 CHAR_COMMA, /* , */
17002 CHAR_DOT, /* . */
17003 CHAR_LEFT_PARENTHESES, /* ( */
17004 CHAR_RIGHT_PARENTHESES, /* ) */
17005 CHAR_LEFT_CURLY_BRACE, /* { */
17006 CHAR_RIGHT_CURLY_BRACE, /* } */
17007 CHAR_LEFT_SQUARE_BRACKET, /* [ */
17008 CHAR_RIGHT_SQUARE_BRACKET, /* ] */
17009 CHAR_DOUBLE_QUOTE, /* " */
17010 CHAR_SINGLE_QUOTE, /* ' */
17011 CHAR_NO_BREAK_SPACE,
17012 CHAR_ZERO_WIDTH_NOBREAK_SPACE
17013} = __webpack_require__(80);
17014
17015/**
17016 * parse
17017 */
17018
17019const parse = (input, options = {}) => {
17020 if (typeof input !== 'string') {
17021 throw new TypeError('Expected a string');
17022 }
17023
17024 let opts = options || {};
17025 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
17026 if (input.length > max) {
17027 throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
17028 }
17029
17030 let ast = { type: 'root', input, nodes: [] };
17031 let stack = [ast];
17032 let block = ast;
17033 let prev = ast;
17034 let brackets = 0;
17035 let length = input.length;
17036 let index = 0;
17037 let depth = 0;
17038 let value;
17039 let memo = {};
17040
17041 /**
17042 * Helpers
17043 */
17044
17045 const advance = () => input[index++];
17046 const push = node => {
17047 if (node.type === 'text' && prev.type === 'dot') {
17048 prev.type = 'text';
17049 }
17050
17051 if (prev && prev.type === 'text' && node.type === 'text') {
17052 prev.value += node.value;
17053 return;
17054 }
17055
17056 block.nodes.push(node);
17057 node.parent = block;
17058 node.prev = prev;
17059 prev = node;
17060 return node;
17061 };
17062
17063 push({ type: 'bos' });
17064
17065 while (index < length) {
17066 block = stack[stack.length - 1];
17067 value = advance();
17068
17069 /**
17070 * Invalid chars
17071 */
17072
17073 if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
17074 continue;
17075 }
17076
17077 /**
17078 * Escaped chars
17079 */
17080
17081 if (value === CHAR_BACKSLASH) {
17082 push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });
17083 continue;
17084 }
17085
17086 /**
17087 * Right square bracket (literal): ']'
17088 */
17089
17090 if (value === CHAR_RIGHT_SQUARE_BRACKET) {
17091 push({ type: 'text', value: '\\' + value });
17092 continue;
17093 }
17094
17095 /**
17096 * Left square bracket: '['
17097 */
17098
17099 if (value === CHAR_LEFT_SQUARE_BRACKET) {
17100 brackets++;
17101
17102 let closed = true;
17103 let next;
17104
17105 while (index < length && (next = advance())) {
17106 value += next;
17107
17108 if (next === CHAR_LEFT_SQUARE_BRACKET) {
17109 brackets++;
17110 continue;
17111 }
17112
17113 if (next === CHAR_BACKSLASH) {
17114 value += advance();
17115 continue;
17116 }
17117
17118 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
17119 brackets--;
17120
17121 if (brackets === 0) {
17122 break;
17123 }
17124 }
17125 }
17126
17127 push({ type: 'text', value });
17128 continue;
17129 }
17130
17131 /**
17132 * Parentheses
17133 */
17134
17135 if (value === CHAR_LEFT_PARENTHESES) {
17136 block = push({ type: 'paren', nodes: [] });
17137 stack.push(block);
17138 push({ type: 'text', value });
17139 continue;
17140 }
17141
17142 if (value === CHAR_RIGHT_PARENTHESES) {
17143 if (block.type !== 'paren') {
17144 push({ type: 'text', value });
17145 continue;
17146 }
17147 block = stack.pop();
17148 push({ type: 'text', value });
17149 block = stack[stack.length - 1];
17150 continue;
17151 }
17152
17153 /**
17154 * Quotes: '|"|`
17155 */
17156
17157 if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {
17158 let open = value;
17159 let next;
17160
17161 if (options.keepQuotes !== true) {
17162 value = '';
17163 }
17164
17165 while (index < length && (next = advance())) {
17166 if (next === CHAR_BACKSLASH) {
17167 value += next + advance();
17168 continue;
17169 }
17170
17171 if (next === open) {
17172 if (options.keepQuotes === true) value += next;
17173 break;
17174 }
17175
17176 value += next;
17177 }
17178
17179 push({ type: 'text', value });
17180 continue;
17181 }
17182
17183 /**
17184 * Left curly brace: '{'
17185 */
17186
17187 if (value === CHAR_LEFT_CURLY_BRACE) {
17188 depth++;
17189
17190 let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;
17191 let brace = {
17192 type: 'brace',
17193 open: true,
17194 close: false,
17195 dollar,
17196 depth,
17197 commas: 0,
17198 ranges: 0,
17199 nodes: []
17200 };
17201
17202 block = push(brace);
17203 stack.push(block);
17204 push({ type: 'open', value });
17205 continue;
17206 }
17207
17208 /**
17209 * Right curly brace: '}'
17210 */
17211
17212 if (value === CHAR_RIGHT_CURLY_BRACE) {
17213 if (block.type !== 'brace') {
17214 push({ type: 'text', value });
17215 continue;
17216 }
17217
17218 let type = 'close';
17219 block = stack.pop();
17220 block.close = true;
17221
17222 push({ type, value });
17223 depth--;
17224
17225 block = stack[stack.length - 1];
17226 continue;
17227 }
17228
17229 /**
17230 * Comma: ','
17231 */
17232
17233 if (value === CHAR_COMMA && depth > 0) {
17234 if (block.ranges > 0) {
17235 block.ranges = 0;
17236 let open = block.nodes.shift();
17237 block.nodes = [open, { type: 'text', value: stringify(block) }];
17238 }
17239
17240 push({ type: 'comma', value });
17241 block.commas++;
17242 continue;
17243 }
17244
17245 /**
17246 * Dot: '.'
17247 */
17248
17249 if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
17250 let siblings = block.nodes;
17251
17252 if (depth === 0 || siblings.length === 0) {
17253 push({ type: 'text', value });
17254 continue;
17255 }
17256
17257 if (prev.type === 'dot') {
17258 block.range = [];
17259 prev.value += value;
17260 prev.type = 'range';
17261
17262 if (block.nodes.length !== 3 && block.nodes.length !== 5) {
17263 block.invalid = true;
17264 block.ranges = 0;
17265 prev.type = 'text';
17266 continue;
17267 }
17268
17269 block.ranges++;
17270 block.args = [];
17271 continue;
17272 }
17273
17274 if (prev.type === 'range') {
17275 siblings.pop();
17276
17277 let before = siblings[siblings.length - 1];
17278 before.value += prev.value + value;
17279 prev = before;
17280 block.ranges--;
17281 continue;
17282 }
17283
17284 push({ type: 'dot', value });
17285 continue;
17286 }
17287
17288 /**
17289 * Text
17290 */
17291
17292 push({ type: 'text', value });
17293 }
17294
17295 // Mark imbalanced braces and brackets as invalid
17296 do {
17297 block = stack.pop();
17298
17299 if (block.type !== 'root') {
17300 block.nodes.forEach(node => {
17301 if (!node.nodes) {
17302 if (node.type === 'open') node.isOpen = true;
17303 if (node.type === 'close') node.isClose = true;
17304 if (!node.nodes) node.type = 'text';
17305 node.invalid = true;
17306 }
17307 });
17308
17309 // get the location of the block on parent.nodes (block's siblings)
17310 let parent = stack[stack.length - 1];
17311 let index = parent.nodes.indexOf(block);
17312 // replace the (invalid) block with it's nodes
17313 parent.nodes.splice(index, 1, ...block.nodes);
17314 }
17315 } while (stack.length > 0);
17316
17317 push({ type: 'eos' });
17318 return ast;
17319};
17320
17321module.exports = parse;
17322
17323
17324/***/ }),
17325/* 80 */
17326/***/ ((module) => {
17327
17328"use strict";
17329
17330
17331module.exports = {
17332 MAX_LENGTH: 1024 * 64,
17333
17334 // Digits
17335 CHAR_0: '0', /* 0 */
17336 CHAR_9: '9', /* 9 */
17337
17338 // Alphabet chars.
17339 CHAR_UPPERCASE_A: 'A', /* A */
17340 CHAR_LOWERCASE_A: 'a', /* a */
17341 CHAR_UPPERCASE_Z: 'Z', /* Z */
17342 CHAR_LOWERCASE_Z: 'z', /* z */
17343
17344 CHAR_LEFT_PARENTHESES: '(', /* ( */
17345 CHAR_RIGHT_PARENTHESES: ')', /* ) */
17346
17347 CHAR_ASTERISK: '*', /* * */
17348
17349 // Non-alphabetic chars.
17350 CHAR_AMPERSAND: '&', /* & */
17351 CHAR_AT: '@', /* @ */
17352 CHAR_BACKSLASH: '\\', /* \ */
17353 CHAR_BACKTICK: '`', /* ` */
17354 CHAR_CARRIAGE_RETURN: '\r', /* \r */
17355 CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */
17356 CHAR_COLON: ':', /* : */
17357 CHAR_COMMA: ',', /* , */
17358 CHAR_DOLLAR: '$', /* . */
17359 CHAR_DOT: '.', /* . */
17360 CHAR_DOUBLE_QUOTE: '"', /* " */
17361 CHAR_EQUAL: '=', /* = */
17362 CHAR_EXCLAMATION_MARK: '!', /* ! */
17363 CHAR_FORM_FEED: '\f', /* \f */
17364 CHAR_FORWARD_SLASH: '/', /* / */
17365 CHAR_HASH: '#', /* # */
17366 CHAR_HYPHEN_MINUS: '-', /* - */
17367 CHAR_LEFT_ANGLE_BRACKET: '<', /* < */
17368 CHAR_LEFT_CURLY_BRACE: '{', /* { */
17369 CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */
17370 CHAR_LINE_FEED: '\n', /* \n */
17371 CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */
17372 CHAR_PERCENT: '%', /* % */
17373 CHAR_PLUS: '+', /* + */
17374 CHAR_QUESTION_MARK: '?', /* ? */
17375 CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */
17376 CHAR_RIGHT_CURLY_BRACE: '}', /* } */
17377 CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */
17378 CHAR_SEMICOLON: ';', /* ; */
17379 CHAR_SINGLE_QUOTE: '\'', /* ' */
17380 CHAR_SPACE: ' ', /* */
17381 CHAR_TAB: '\t', /* \t */
17382 CHAR_UNDERSCORE: '_', /* _ */
17383 CHAR_VERTICAL_LINE: '|', /* | */
17384 CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */
17385};
17386
17387
17388/***/ }),
17389/* 81 */
17390/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
17391
17392"use strict";
17393
17394
17395module.exports = __webpack_require__(82);
17396
17397
17398/***/ }),
17399/* 82 */
17400/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
17401
17402"use strict";
17403
17404
17405const path = __webpack_require__(13);
17406const scan = __webpack_require__(83);
17407const parse = __webpack_require__(86);
17408const utils = __webpack_require__(84);
17409
17410/**
17411 * Creates a matcher function from one or more glob patterns. The
17412 * returned function takes a string to match as its first argument,
17413 * and returns true if the string is a match. The returned matcher
17414 * function also takes a boolean as the second argument that, when true,
17415 * returns an object with additional information.
17416 *
17417 * ```js
17418 * const picomatch = require('picomatch');
17419 * // picomatch(glob[, options]);
17420 *
17421 * const isMatch = picomatch('*.!(*a)');
17422 * console.log(isMatch('a.a')); //=> false
17423 * console.log(isMatch('a.b')); //=> true
17424 * ```
17425 * @name picomatch
17426 * @param {String|Array} `globs` One or more glob patterns.
17427 * @param {Object=} `options`
17428 * @return {Function=} Returns a matcher function.
17429 * @api public
17430 */
17431
17432const picomatch = (glob, options, returnState = false) => {
17433 if (Array.isArray(glob)) {
17434 let fns = glob.map(input => picomatch(input, options, returnState));
17435 return str => {
17436 for (let isMatch of fns) {
17437 let state = isMatch(str);
17438 if (state) return state;
17439 }
17440 return false;
17441 };
17442 }
17443
17444 if (typeof glob !== 'string' || glob === '') {
17445 throw new TypeError('Expected pattern to be a non-empty string');
17446 }
17447
17448 let opts = options || {};
17449 let posix = utils.isWindows(options);
17450 let regex = picomatch.makeRe(glob, options, false, true);
17451 let state = regex.state;
17452 delete regex.state;
17453
17454 let isIgnored = () => false;
17455 if (opts.ignore) {
17456 let ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
17457 isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
17458 }
17459
17460 const matcher = (input, returnObject = false) => {
17461 let { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
17462 let result = { glob, state, regex, posix, input, output, match, isMatch };
17463
17464 if (typeof opts.onResult === 'function') {
17465 opts.onResult(result);
17466 }
17467
17468 if (isMatch === false) {
17469 result.isMatch = false;
17470 return returnObject ? result : false;
17471 }
17472
17473 if (isIgnored(input)) {
17474 if (typeof opts.onIgnore === 'function') {
17475 opts.onIgnore(result);
17476 }
17477 result.isMatch = false;
17478 return returnObject ? result : false;
17479 }
17480
17481 if (typeof opts.onMatch === 'function') {
17482 opts.onMatch(result);
17483 }
17484 return returnObject ? result : true;
17485 };
17486
17487 if (returnState) {
17488 matcher.state = state;
17489 }
17490
17491 return matcher;
17492};
17493
17494/**
17495 * Test `input` with the given `regex`. This is used by the main
17496 * `picomatch()` function to test the input string.
17497 *
17498 * ```js
17499 * const picomatch = require('picomatch');
17500 * // picomatch.test(input, regex[, options]);
17501 *
17502 * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
17503 * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
17504 * ```
17505 * @param {String} `input` String to test.
17506 * @param {RegExp} `regex`
17507 * @return {Object} Returns an object with matching info.
17508 * @api public
17509 */
17510
17511picomatch.test = (input, regex, options, { glob, posix } = {}) => {
17512 if (typeof input !== 'string') {
17513 throw new TypeError('Expected input to be a string');
17514 }
17515
17516 if (input === '') {
17517 return { isMatch: false, output: '' };
17518 }
17519
17520 let opts = options || {};
17521 let format = opts.format || (posix ? utils.toPosixSlashes : null);
17522 let match = input === glob;
17523 let output = (match && format) ? format(input) : input;
17524
17525 if (match === false) {
17526 output = format ? format(input) : input;
17527 match = output === glob;
17528 }
17529
17530 if (match === false || opts.capture === true) {
17531 if (opts.matchBase === true || opts.basename === true) {
17532 match = picomatch.matchBase(input, regex, options, posix);
17533 } else {
17534 match = regex.exec(output);
17535 }
17536 }
17537
17538 return { isMatch: !!match, match, output };
17539};
17540
17541/**
17542 * Match the basename of a filepath.
17543 *
17544 * ```js
17545 * const picomatch = require('picomatch');
17546 * // picomatch.matchBase(input, glob[, options]);
17547 * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
17548 * ```
17549 * @param {String} `input` String to test.
17550 * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
17551 * @return {Boolean}
17552 * @api public
17553 */
17554
17555picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
17556 let regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
17557 return regex.test(path.basename(input));
17558};
17559
17560/**
17561 * Returns true if **any** of the given glob `patterns` match the specified `string`.
17562 *
17563 * ```js
17564 * const picomatch = require('picomatch');
17565 * // picomatch.isMatch(string, patterns[, options]);
17566 *
17567 * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
17568 * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
17569 * ```
17570 * @param {String|Array} str The string to test.
17571 * @param {String|Array} patterns One or more glob patterns to use for matching.
17572 * @param {Object} [options] See available [options](#options).
17573 * @return {Boolean} Returns true if any patterns match `str`
17574 * @api public
17575 */
17576
17577picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
17578
17579/**
17580 * Parse a glob pattern to create the source string for a regular
17581 * expression.
17582 *
17583 * ```js
17584 * const picomatch = require('picomatch');
17585 * const result = picomatch.parse(glob[, options]);
17586 * ```
17587 * @param {String} `glob`
17588 * @param {Object} `options`
17589 * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
17590 * @api public
17591 */
17592
17593picomatch.parse = (glob, options) => parse(glob, options);
17594
17595/**
17596 * Scan a glob pattern to separate the pattern into segments.
17597 *
17598 * ```js
17599 * const picomatch = require('picomatch');
17600 * // picomatch.scan(input[, options]);
17601 *
17602 * const result = picomatch.scan('!./foo/*.js');
17603 * console.log(result);
17604 * // { prefix: '!./',
17605 * // input: '!./foo/*.js',
17606 * // base: 'foo',
17607 * // glob: '*.js',
17608 * // negated: true,
17609 * // isGlob: true }
17610 * ```
17611 * @param {String} `input` Glob pattern to scan.
17612 * @param {Object} `options`
17613 * @return {Object} Returns an object with
17614 * @api public
17615 */
17616
17617picomatch.scan = (input, options) => scan(input, options);
17618
17619/**
17620 * Create a regular expression from a glob pattern.
17621 *
17622 * ```js
17623 * const picomatch = require('picomatch');
17624 * // picomatch.makeRe(input[, options]);
17625 *
17626 * console.log(picomatch.makeRe('*.js'));
17627 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
17628 * ```
17629 * @param {String} `input` A glob pattern to convert to regex.
17630 * @param {Object} `options`
17631 * @return {RegExp} Returns a regex created from the given pattern.
17632 * @api public
17633 */
17634
17635picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => {
17636 if (!input || typeof input !== 'string') {
17637 throw new TypeError('Expected a non-empty string');
17638 }
17639
17640 let opts = options || {};
17641 let prepend = opts.contains ? '' : '^';
17642 let append = opts.contains ? '' : '$';
17643 let state = { negated: false, fastpaths: true };
17644 let prefix = '';
17645 let output;
17646
17647 if (input.startsWith('./')) {
17648 input = input.slice(2);
17649 prefix = state.prefix = './';
17650 }
17651
17652 if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
17653 output = parse.fastpaths(input, options);
17654 }
17655
17656 if (output === void 0) {
17657 state = picomatch.parse(input, options);
17658 state.prefix = prefix + (state.prefix || '');
17659 output = state.output;
17660 }
17661
17662 if (returnOutput === true) {
17663 return output;
17664 }
17665
17666 let source = `${prepend}(?:${output})${append}`;
17667 if (state && state.negated === true) {
17668 source = `^(?!${source}).*$`;
17669 }
17670
17671 let regex = picomatch.toRegex(source, options);
17672 if (returnState === true) {
17673 regex.state = state;
17674 }
17675
17676 return regex;
17677};
17678
17679/**
17680 * Create a regular expression from the given regex source string.
17681 *
17682 * ```js
17683 * const picomatch = require('picomatch');
17684 * // picomatch.toRegex(source[, options]);
17685 *
17686 * const { output } = picomatch.parse('*.js');
17687 * console.log(picomatch.toRegex(output));
17688 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
17689 * ```
17690 * @param {String} `source` Regular expression source string.
17691 * @param {Object} `options`
17692 * @return {RegExp}
17693 * @api public
17694 */
17695
17696picomatch.toRegex = (source, options) => {
17697 try {
17698 let opts = options || {};
17699 return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
17700 } catch (err) {
17701 if (options && options.debug === true) throw err;
17702 return /$^/;
17703 }
17704};
17705
17706/**
17707 * Picomatch constants.
17708 * @return {Object}
17709 */
17710
17711picomatch.constants = __webpack_require__(85);
17712
17713/**
17714 * Expose "picomatch"
17715 */
17716
17717module.exports = picomatch;
17718
17719
17720/***/ }),
17721/* 83 */
17722/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
17723
17724"use strict";
17725
17726
17727const utils = __webpack_require__(84);
17728
17729const {
17730 CHAR_ASTERISK, /* * */
17731 CHAR_AT, /* @ */
17732 CHAR_BACKWARD_SLASH, /* \ */
17733 CHAR_COMMA, /* , */
17734 CHAR_DOT, /* . */
17735 CHAR_EXCLAMATION_MARK, /* ! */
17736 CHAR_FORWARD_SLASH, /* / */
17737 CHAR_LEFT_CURLY_BRACE, /* { */
17738 CHAR_LEFT_PARENTHESES, /* ( */
17739 CHAR_LEFT_SQUARE_BRACKET, /* [ */
17740 CHAR_PLUS, /* + */
17741 CHAR_QUESTION_MARK, /* ? */
17742 CHAR_RIGHT_CURLY_BRACE, /* } */
17743 CHAR_RIGHT_PARENTHESES, /* ) */
17744 CHAR_RIGHT_SQUARE_BRACKET /* ] */
17745} = __webpack_require__(85);
17746
17747const isPathSeparator = code => {
17748 return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
17749};
17750
17751/**
17752 * Quickly scans a glob pattern and returns an object with a handful of
17753 * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
17754 * `glob` (the actual pattern), and `negated` (true if the path starts with `!`).
17755 *
17756 * ```js
17757 * const pm = require('picomatch');
17758 * console.log(pm.scan('foo/bar/*.js'));
17759 * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
17760 * ```
17761 * @param {String} `str`
17762 * @param {Object} `options`
17763 * @return {Object} Returns an object with tokens and regex source string.
17764 * @api public
17765 */
17766
17767module.exports = (input, options) => {
17768 let opts = options || {};
17769 let length = input.length - 1;
17770 let index = -1;
17771 let start = 0;
17772 let lastIndex = 0;
17773 let isGlob = false;
17774 let backslashes = false;
17775 let negated = false;
17776 let braces = 0;
17777 let prev;
17778 let code;
17779
17780 let braceEscaped = false;
17781
17782 let eos = () => index >= length;
17783 let advance = () => {
17784 prev = code;
17785 return input.charCodeAt(++index);
17786 };
17787
17788 while (index < length) {
17789 code = advance();
17790 let next;
17791
17792 if (code === CHAR_BACKWARD_SLASH) {
17793 backslashes = true;
17794 next = advance();
17795
17796 if (next === CHAR_LEFT_CURLY_BRACE) {
17797 braceEscaped = true;
17798 }
17799 continue;
17800 }
17801
17802 if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
17803 braces++;
17804
17805 while (!eos() && (next = advance())) {
17806 if (next === CHAR_BACKWARD_SLASH) {
17807 backslashes = true;
17808 next = advance();
17809 continue;
17810 }
17811
17812 if (next === CHAR_LEFT_CURLY_BRACE) {
17813 braces++;
17814 continue;
17815 }
17816
17817 if (!braceEscaped && next === CHAR_DOT && (next = advance()) === CHAR_DOT) {
17818 isGlob = true;
17819 break;
17820 }
17821
17822 if (!braceEscaped && next === CHAR_COMMA) {
17823 isGlob = true;
17824 break;
17825 }
17826
17827 if (next === CHAR_RIGHT_CURLY_BRACE) {
17828 braces--;
17829 if (braces === 0) {
17830 braceEscaped = false;
17831 break;
17832 }
17833 }
17834 }
17835 }
17836
17837 if (code === CHAR_FORWARD_SLASH) {
17838 if (prev === CHAR_DOT && index === (start + 1)) {
17839 start += 2;
17840 continue;
17841 }
17842
17843 lastIndex = index + 1;
17844 continue;
17845 }
17846
17847 if (code === CHAR_ASTERISK) {
17848 isGlob = true;
17849 break;
17850 }
17851
17852 if (code === CHAR_ASTERISK || code === CHAR_QUESTION_MARK) {
17853 isGlob = true;
17854 break;
17855 }
17856
17857 if (code === CHAR_LEFT_SQUARE_BRACKET) {
17858 while (!eos() && (next = advance())) {
17859 if (next === CHAR_BACKWARD_SLASH) {
17860 backslashes = true;
17861 next = advance();
17862 continue;
17863 }
17864
17865 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
17866 isGlob = true;
17867 break;
17868 }
17869 }
17870 }
17871
17872 let isExtglobChar = code === CHAR_PLUS
17873 || code === CHAR_AT
17874 || code === CHAR_EXCLAMATION_MARK;
17875
17876 if (isExtglobChar && input.charCodeAt(index + 1) === CHAR_LEFT_PARENTHESES) {
17877 isGlob = true;
17878 break;
17879 }
17880
17881 if (code === CHAR_EXCLAMATION_MARK && index === start) {
17882 negated = true;
17883 start++;
17884 continue;
17885 }
17886
17887 if (code === CHAR_LEFT_PARENTHESES) {
17888 while (!eos() && (next = advance())) {
17889 if (next === CHAR_BACKWARD_SLASH) {
17890 backslashes = true;
17891 next = advance();
17892 continue;
17893 }
17894
17895 if (next === CHAR_RIGHT_PARENTHESES) {
17896 isGlob = true;
17897 break;
17898 }
17899 }
17900 }
17901
17902 if (isGlob) {
17903 break;
17904 }
17905 }
17906
17907 let prefix = '';
17908 let orig = input;
17909 let base = input;
17910 let glob = '';
17911
17912 if (start > 0) {
17913 prefix = input.slice(0, start);
17914 input = input.slice(start);
17915 lastIndex -= start;
17916 }
17917
17918 if (base && isGlob === true && lastIndex > 0) {
17919 base = input.slice(0, lastIndex);
17920 glob = input.slice(lastIndex);
17921 } else if (isGlob === true) {
17922 base = '';
17923 glob = input;
17924 } else {
17925 base = input;
17926 }
17927
17928 if (base && base !== '' && base !== '/' && base !== input) {
17929 if (isPathSeparator(base.charCodeAt(base.length - 1))) {
17930 base = base.slice(0, -1);
17931 }
17932 }
17933
17934 if (opts.unescape === true) {
17935 if (glob) glob = utils.removeBackslashes(glob);
17936
17937 if (base && backslashes === true) {
17938 base = utils.removeBackslashes(base);
17939 }
17940 }
17941
17942 return { prefix, input: orig, base, glob, negated, isGlob };
17943};
17944
17945
17946/***/ }),
17947/* 84 */
17948/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
17949
17950"use strict";
17951
17952
17953const path = __webpack_require__(13);
17954const win32 = process.platform === 'win32';
17955const {
17956 REGEX_SPECIAL_CHARS,
17957 REGEX_SPECIAL_CHARS_GLOBAL,
17958 REGEX_REMOVE_BACKSLASH
17959} = __webpack_require__(85);
17960
17961exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
17962exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
17963exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
17964exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
17965exports.toPosixSlashes = str => str.replace(/\\/g, '/');
17966
17967exports.removeBackslashes = str => {
17968 return str.replace(REGEX_REMOVE_BACKSLASH, match => {
17969 return match === '\\' ? '' : match;
17970 });
17971}
17972
17973exports.supportsLookbehinds = () => {
17974 let segs = process.version.slice(1).split('.');
17975 if (segs.length === 3 && +segs[0] >= 9 || (+segs[0] === 8 && +segs[1] >= 10)) {
17976 return true;
17977 }
17978 return false;
17979};
17980
17981exports.isWindows = options => {
17982 if (options && typeof options.windows === 'boolean') {
17983 return options.windows;
17984 }
17985 return win32 === true || path.sep === '\\';
17986};
17987
17988exports.escapeLast = (input, char, lastIdx) => {
17989 let idx = input.lastIndexOf(char, lastIdx);
17990 if (idx === -1) return input;
17991 if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
17992 return input.slice(0, idx) + '\\' + input.slice(idx);
17993};
17994
17995
17996/***/ }),
17997/* 85 */
17998/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
17999
18000"use strict";
18001
18002
18003const path = __webpack_require__(13);
18004const WIN_SLASH = '\\\\/';
18005const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
18006
18007/**
18008 * Posix glob regex
18009 */
18010
18011const DOT_LITERAL = '\\.';
18012const PLUS_LITERAL = '\\+';
18013const QMARK_LITERAL = '\\?';
18014const SLASH_LITERAL = '\\/';
18015const ONE_CHAR = '(?=.)';
18016const QMARK = '[^/]';
18017const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
18018const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
18019const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
18020const NO_DOT = `(?!${DOT_LITERAL})`;
18021const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
18022const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
18023const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
18024const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
18025const STAR = `${QMARK}*?`;
18026
18027const POSIX_CHARS = {
18028 DOT_LITERAL,
18029 PLUS_LITERAL,
18030 QMARK_LITERAL,
18031 SLASH_LITERAL,
18032 ONE_CHAR,
18033 QMARK,
18034 END_ANCHOR,
18035 DOTS_SLASH,
18036 NO_DOT,
18037 NO_DOTS,
18038 NO_DOT_SLASH,
18039 NO_DOTS_SLASH,
18040 QMARK_NO_DOT,
18041 STAR,
18042 START_ANCHOR
18043};
18044
18045/**
18046 * Windows glob regex
18047 */
18048
18049const WINDOWS_CHARS = {
18050 ...POSIX_CHARS,
18051
18052 SLASH_LITERAL: `[${WIN_SLASH}]`,
18053 QMARK: WIN_NO_SLASH,
18054 STAR: `${WIN_NO_SLASH}*?`,
18055 DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
18056 NO_DOT: `(?!${DOT_LITERAL})`,
18057 NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
18058 NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
18059 NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
18060 QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
18061 START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
18062 END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
18063};
18064
18065/**
18066 * POSIX Bracket Regex
18067 */
18068
18069const POSIX_REGEX_SOURCE = {
18070 alnum: 'a-zA-Z0-9',
18071 alpha: 'a-zA-Z',
18072 ascii: '\\x00-\\x7F',
18073 blank: ' \\t',
18074 cntrl: '\\x00-\\x1F\\x7F',
18075 digit: '0-9',
18076 graph: '\\x21-\\x7E',
18077 lower: 'a-z',
18078 print: '\\x20-\\x7E ',
18079 punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
18080 space: ' \\t\\r\\n\\v\\f',
18081 upper: 'A-Z',
18082 word: 'A-Za-z0-9_',
18083 xdigit: 'A-Fa-f0-9'
18084};
18085
18086module.exports = {
18087 MAX_LENGTH: 1024 * 64,
18088 POSIX_REGEX_SOURCE,
18089
18090 // regular expressions
18091 REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
18092 REGEX_NON_SPECIAL_CHAR: /^[^@![\].,$*+?^{}()|\\/]+/,
18093 REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
18094 REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
18095 REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
18096 REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
18097
18098 // Replace globs with equivalent patterns to reduce parsing time.
18099 REPLACEMENTS: {
18100 '***': '*',
18101 '**/**': '**',
18102 '**/**/**': '**'
18103 },
18104
18105 // Digits
18106 CHAR_0: 48, /* 0 */
18107 CHAR_9: 57, /* 9 */
18108
18109 // Alphabet chars.
18110 CHAR_UPPERCASE_A: 65, /* A */
18111 CHAR_LOWERCASE_A: 97, /* a */
18112 CHAR_UPPERCASE_Z: 90, /* Z */
18113 CHAR_LOWERCASE_Z: 122, /* z */
18114
18115 CHAR_LEFT_PARENTHESES: 40, /* ( */
18116 CHAR_RIGHT_PARENTHESES: 41, /* ) */
18117
18118 CHAR_ASTERISK: 42, /* * */
18119
18120 // Non-alphabetic chars.
18121 CHAR_AMPERSAND: 38, /* & */
18122 CHAR_AT: 64, /* @ */
18123 CHAR_BACKWARD_SLASH: 92, /* \ */
18124 CHAR_CARRIAGE_RETURN: 13, /* \r */
18125 CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
18126 CHAR_COLON: 58, /* : */
18127 CHAR_COMMA: 44, /* , */
18128 CHAR_DOT: 46, /* . */
18129 CHAR_DOUBLE_QUOTE: 34, /* " */
18130 CHAR_EQUAL: 61, /* = */
18131 CHAR_EXCLAMATION_MARK: 33, /* ! */
18132 CHAR_FORM_FEED: 12, /* \f */
18133 CHAR_FORWARD_SLASH: 47, /* / */
18134 CHAR_GRAVE_ACCENT: 96, /* ` */
18135 CHAR_HASH: 35, /* # */
18136 CHAR_HYPHEN_MINUS: 45, /* - */
18137 CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
18138 CHAR_LEFT_CURLY_BRACE: 123, /* { */
18139 CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
18140 CHAR_LINE_FEED: 10, /* \n */
18141 CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
18142 CHAR_PERCENT: 37, /* % */
18143 CHAR_PLUS: 43, /* + */
18144 CHAR_QUESTION_MARK: 63, /* ? */
18145 CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
18146 CHAR_RIGHT_CURLY_BRACE: 125, /* } */
18147 CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
18148 CHAR_SEMICOLON: 59, /* ; */
18149 CHAR_SINGLE_QUOTE: 39, /* ' */
18150 CHAR_SPACE: 32, /* */
18151 CHAR_TAB: 9, /* \t */
18152 CHAR_UNDERSCORE: 95, /* _ */
18153 CHAR_VERTICAL_LINE: 124, /* | */
18154 CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
18155
18156 SEP: path.sep,
18157
18158 /**
18159 * Create EXTGLOB_CHARS
18160 */
18161
18162 extglobChars(chars) {
18163 return {
18164 '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
18165 '?': { type: 'qmark', open: '(?:', close: ')?' },
18166 '+': { type: 'plus', open: '(?:', close: ')+' },
18167 '*': { type: 'star', open: '(?:', close: ')*' },
18168 '@': { type: 'at', open: '(?:', close: ')' }
18169 };
18170 },
18171
18172 /**
18173 * Create GLOB_CHARS
18174 */
18175
18176 globChars(win32) {
18177 return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
18178 }
18179};
18180
18181
18182/***/ }),
18183/* 86 */
18184/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
18185
18186"use strict";
18187
18188
18189const utils = __webpack_require__(84);
18190const constants = __webpack_require__(85);
18191
18192/**
18193 * Constants
18194 */
18195
18196const {
18197 MAX_LENGTH,
18198 POSIX_REGEX_SOURCE,
18199 REGEX_NON_SPECIAL_CHAR,
18200 REGEX_SPECIAL_CHARS_BACKREF,
18201 REPLACEMENTS
18202} = constants;
18203
18204/**
18205 * Helpers
18206 */
18207
18208const expandRange = (args, options) => {
18209 if (typeof options.expandRange === 'function') {
18210 return options.expandRange(...args, options);
18211 }
18212
18213 args.sort();
18214 let value = `[${args.join('-')}]`;
18215
18216 try {
18217 /* eslint-disable no-new */
18218 new RegExp(value);
18219 } catch (ex) {
18220 return args.map(v => utils.escapeRegex(v)).join('..');
18221 }
18222
18223 return value;
18224};
18225
18226const negate = state => {
18227 let count = 1;
18228
18229 while (state.peek() === '!' && (state.peek(2) !== '(' || state.peek(3) === '?')) {
18230 state.advance();
18231 state.start++;
18232 count++;
18233 }
18234
18235 if (count % 2 === 0) {
18236 return false;
18237 }
18238
18239 state.negated = true;
18240 state.start++;
18241 return true;
18242};
18243
18244/**
18245 * Create the message for a syntax error
18246 */
18247
18248const syntaxError = (type, char) => {
18249 return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
18250};
18251
18252/**
18253 * Parse the given input string.
18254 * @param {String} input
18255 * @param {Object} options
18256 * @return {Object}
18257 */
18258
18259const parse = (input, options) => {
18260 if (typeof input !== 'string') {
18261 throw new TypeError('Expected a string');
18262 }
18263
18264 input = REPLACEMENTS[input] || input;
18265
18266 let opts = { ...options };
18267 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
18268 let len = input.length;
18269 if (len > max) {
18270 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
18271 }
18272
18273 let bos = { type: 'bos', value: '', output: opts.prepend || '' };
18274 let tokens = [bos];
18275
18276 let capture = opts.capture ? '' : '?:';
18277 let win32 = utils.isWindows(options);
18278
18279 // create constants based on platform, for windows or posix
18280 const PLATFORM_CHARS = constants.globChars(win32);
18281 const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
18282
18283 const {
18284 DOT_LITERAL,
18285 PLUS_LITERAL,
18286 SLASH_LITERAL,
18287 ONE_CHAR,
18288 DOTS_SLASH,
18289 NO_DOT,
18290 NO_DOT_SLASH,
18291 NO_DOTS_SLASH,
18292 QMARK,
18293 QMARK_NO_DOT,
18294 STAR,
18295 START_ANCHOR
18296 } = PLATFORM_CHARS;
18297
18298 const globstar = (opts) => {
18299 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
18300 };
18301
18302 let nodot = opts.dot ? '' : NO_DOT;
18303 let star = opts.bash === true ? globstar(opts) : STAR;
18304 let qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
18305
18306 if (opts.capture) {
18307 star = `(${star})`;
18308 }
18309
18310 // minimatch options support
18311 if (typeof opts.noext === 'boolean') {
18312 opts.noextglob = opts.noext;
18313 }
18314
18315 let state = {
18316 index: -1,
18317 start: 0,
18318 consumed: '',
18319 output: '',
18320 backtrack: false,
18321 brackets: 0,
18322 braces: 0,
18323 parens: 0,
18324 quotes: 0,
18325 tokens
18326 };
18327
18328 let extglobs = [];
18329 let stack = [];
18330 let prev = bos;
18331 let value;
18332
18333 /**
18334 * Tokenizing helpers
18335 */
18336
18337 const eos = () => state.index === len - 1;
18338 const peek = state.peek = (n = 1) => input[state.index + n];
18339 const advance = state.advance = () => input[++state.index];
18340 const append = token => {
18341 state.output += token.output != null ? token.output : token.value;
18342 state.consumed += token.value || '';
18343 };
18344
18345 const increment = type => {
18346 state[type]++;
18347 stack.push(type);
18348 };
18349
18350 const decrement = type => {
18351 state[type]--;
18352 stack.pop();
18353 };
18354
18355 /**
18356 * Push tokens onto the tokens array. This helper speeds up
18357 * tokenizing by 1) helping us avoid backtracking as much as possible,
18358 * and 2) helping us avoid creating extra tokens when consecutive
18359 * characters are plain text. This improves performance and simplifies
18360 * lookbehinds.
18361 */
18362
18363 const push = tok => {
18364 if (prev.type === 'globstar') {
18365 let isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
18366 let isExtglob = extglobs.length && (tok.type === 'pipe' || tok.type === 'paren');
18367 if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
18368 state.output = state.output.slice(0, -prev.output.length);
18369 prev.type = 'star';
18370 prev.value = '*';
18371 prev.output = star;
18372 state.output += prev.output;
18373 }
18374 }
18375
18376 if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) {
18377 extglobs[extglobs.length - 1].inner += tok.value;
18378 }
18379
18380 if (tok.value || tok.output) append(tok);
18381 if (prev && prev.type === 'text' && tok.type === 'text') {
18382 prev.value += tok.value;
18383 return;
18384 }
18385
18386 tok.prev = prev;
18387 tokens.push(tok);
18388 prev = tok;
18389 };
18390
18391 const extglobOpen = (type, value) => {
18392 let token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
18393
18394 token.prev = prev;
18395 token.parens = state.parens;
18396 token.output = state.output;
18397 let output = (opts.capture ? '(' : '') + token.open;
18398
18399 push({ type, value, output: state.output ? '' : ONE_CHAR });
18400 push({ type: 'paren', extglob: true, value: advance(), output });
18401 increment('parens');
18402 extglobs.push(token);
18403 };
18404
18405 const extglobClose = token => {
18406 let output = token.close + (opts.capture ? ')' : '');
18407
18408 if (token.type === 'negate') {
18409 let extglobStar = star;
18410
18411 if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
18412 extglobStar = globstar(opts);
18413 }
18414
18415 if (extglobStar !== star || eos() || /^\)+$/.test(input.slice(state.index + 1))) {
18416 output = token.close = ')$))' + extglobStar;
18417 }
18418
18419 if (token.prev.type === 'bos' && eos()) {
18420 state.negatedExtglob = true;
18421 }
18422 }
18423
18424 push({ type: 'paren', extglob: true, value, output });
18425 decrement('parens');
18426 };
18427
18428 if (opts.fastpaths !== false && !/(^[*!]|[/{[()\]}"])/.test(input)) {
18429 let backslashes = false;
18430
18431 let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
18432 if (first === '\\') {
18433 backslashes = true;
18434 return m;
18435 }
18436
18437 if (first === '?') {
18438 if (esc) {
18439 return esc + first + (rest ? QMARK.repeat(rest.length) : '');
18440 }
18441 if (index === 0) {
18442 return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
18443 }
18444 return QMARK.repeat(chars.length);
18445 }
18446
18447 if (first === '.') {
18448 return DOT_LITERAL.repeat(chars.length);
18449 }
18450
18451 if (first === '*') {
18452 if (esc) {
18453 return esc + first + (rest ? star : '');
18454 }
18455 return star;
18456 }
18457 return esc ? m : '\\' + m;
18458 });
18459
18460 if (backslashes === true) {
18461 if (opts.unescape === true) {
18462 output = output.replace(/\\/g, '');
18463 } else {
18464 output = output.replace(/\\+/g, m => {
18465 return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
18466 });
18467 }
18468 }
18469
18470 state.output = output;
18471 return state;
18472 }
18473
18474 /**
18475 * Tokenize input until we reach end-of-string
18476 */
18477
18478 while (!eos()) {
18479 value = advance();
18480
18481 if (value === '\u0000') {
18482 continue;
18483 }
18484
18485 /**
18486 * Escaped characters
18487 */
18488
18489 if (value === '\\') {
18490 let next = peek();
18491
18492 if (next === '/' && opts.bash !== true) {
18493 continue;
18494 }
18495
18496 if (next === '.' || next === ';') {
18497 continue;
18498 }
18499
18500 if (!next) {
18501 value += '\\';
18502 push({ type: 'text', value });
18503 continue;
18504 }
18505
18506 // collapse slashes to reduce potential for exploits
18507 let match = /^\\+/.exec(input.slice(state.index + 1));
18508 let slashes = 0;
18509
18510 if (match && match[0].length > 2) {
18511 slashes = match[0].length;
18512 state.index += slashes;
18513 if (slashes % 2 !== 0) {
18514 value += '\\';
18515 }
18516 }
18517
18518 if (opts.unescape === true) {
18519 value = advance() || '';
18520 } else {
18521 value += advance() || '';
18522 }
18523
18524 if (state.brackets === 0) {
18525 push({ type: 'text', value });
18526 continue;
18527 }
18528 }
18529
18530 /**
18531 * If we're inside a regex character class, continue
18532 * until we reach the closing bracket.
18533 */
18534
18535 if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
18536 if (opts.posix !== false && value === ':') {
18537 let inner = prev.value.slice(1);
18538 if (inner.includes('[')) {
18539 prev.posix = true;
18540
18541 if (inner.includes(':')) {
18542 let idx = prev.value.lastIndexOf('[');
18543 let pre = prev.value.slice(0, idx);
18544 let rest = prev.value.slice(idx + 2);
18545 let posix = POSIX_REGEX_SOURCE[rest];
18546 if (posix) {
18547 prev.value = pre + posix;
18548 state.backtrack = true;
18549 advance();
18550
18551 if (!bos.output && tokens.indexOf(prev) === 1) {
18552 bos.output = ONE_CHAR;
18553 }
18554 continue;
18555 }
18556 }
18557 }
18558 }
18559
18560 if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
18561 value = '\\' + value;
18562 }
18563
18564 if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
18565 value = '\\' + value;
18566 }
18567
18568 if (opts.posix === true && value === '!' && prev.value === '[') {
18569 value = '^';
18570 }
18571
18572 prev.value += value;
18573 append({ value });
18574 continue;
18575 }
18576
18577 /**
18578 * If we're inside a quoted string, continue
18579 * until we reach the closing double quote.
18580 */
18581
18582 if (state.quotes === 1 && value !== '"') {
18583 value = utils.escapeRegex(value);
18584 prev.value += value;
18585 append({ value });
18586 continue;
18587 }
18588
18589 /**
18590 * Double quotes
18591 */
18592
18593 if (value === '"') {
18594 state.quotes = state.quotes === 1 ? 0 : 1;
18595 if (opts.keepQuotes === true) {
18596 push({ type: 'text', value });
18597 }
18598 continue;
18599 }
18600
18601 /**
18602 * Parentheses
18603 */
18604
18605 if (value === '(') {
18606 push({ type: 'paren', value });
18607 increment('parens');
18608 continue;
18609 }
18610
18611 if (value === ')') {
18612 if (state.parens === 0 && opts.strictBrackets === true) {
18613 throw new SyntaxError(syntaxError('opening', '('));
18614 }
18615
18616 let extglob = extglobs[extglobs.length - 1];
18617 if (extglob && state.parens === extglob.parens + 1) {
18618 extglobClose(extglobs.pop());
18619 continue;
18620 }
18621
18622 push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
18623 decrement('parens');
18624 continue;
18625 }
18626
18627 /**
18628 * Brackets
18629 */
18630
18631 if (value === '[') {
18632 if (opts.nobracket === true || !input.slice(state.index + 1).includes(']')) {
18633 if (opts.nobracket !== true && opts.strictBrackets === true) {
18634 throw new SyntaxError(syntaxError('closing', ']'));
18635 }
18636
18637 value = '\\' + value;
18638 } else {
18639 increment('brackets');
18640 }
18641
18642 push({ type: 'bracket', value });
18643 continue;
18644 }
18645
18646 if (value === ']') {
18647 if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
18648 push({ type: 'text', value, output: '\\' + value });
18649 continue;
18650 }
18651
18652 if (state.brackets === 0) {
18653 if (opts.strictBrackets === true) {
18654 throw new SyntaxError(syntaxError('opening', '['));
18655 }
18656
18657 push({ type: 'text', value, output: '\\' + value });
18658 continue;
18659 }
18660
18661 decrement('brackets');
18662
18663 let prevValue = prev.value.slice(1);
18664 if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
18665 value = '/' + value;
18666 }
18667
18668 prev.value += value;
18669 append({ value });
18670
18671 // when literal brackets are explicitly disabled
18672 // assume we should match with a regex character class
18673 if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
18674 continue;
18675 }
18676
18677 let escaped = utils.escapeRegex(prev.value);
18678 state.output = state.output.slice(0, -prev.value.length);
18679
18680 // when literal brackets are explicitly enabled
18681 // assume we should escape the brackets to match literal characters
18682 if (opts.literalBrackets === true) {
18683 state.output += escaped;
18684 prev.value = escaped;
18685 continue;
18686 }
18687
18688 // when the user specifies nothing, try to match both
18689 prev.value = `(${capture}${escaped}|${prev.value})`;
18690 state.output += prev.value;
18691 continue;
18692 }
18693
18694 /**
18695 * Braces
18696 */
18697
18698 if (value === '{' && opts.nobrace !== true) {
18699 push({ type: 'brace', value, output: '(' });
18700 increment('braces');
18701 continue;
18702 }
18703
18704 if (value === '}') {
18705 if (opts.nobrace === true || state.braces === 0) {
18706 push({ type: 'text', value, output: '\\' + value });
18707 continue;
18708 }
18709
18710 let output = ')';
18711
18712 if (state.dots === true) {
18713 let arr = tokens.slice();
18714 let range = [];
18715
18716 for (let i = arr.length - 1; i >= 0; i--) {
18717 tokens.pop();
18718 if (arr[i].type === 'brace') {
18719 break;
18720 }
18721 if (arr[i].type !== 'dots') {
18722 range.unshift(arr[i].value);
18723 }
18724 }
18725
18726 output = expandRange(range, opts);
18727 state.backtrack = true;
18728 }
18729
18730 push({ type: 'brace', value, output });
18731 decrement('braces');
18732 continue;
18733 }
18734
18735 /**
18736 * Pipes
18737 */
18738
18739 if (value === '|') {
18740 if (extglobs.length > 0) {
18741 extglobs[extglobs.length - 1].conditions++;
18742 }
18743 push({ type: 'text', value });
18744 continue;
18745 }
18746
18747 /**
18748 * Commas
18749 */
18750
18751 if (value === ',') {
18752 let output = value;
18753
18754 if (state.braces > 0 && stack[stack.length - 1] === 'braces') {
18755 output = '|';
18756 }
18757
18758 push({ type: 'comma', value, output });
18759 continue;
18760 }
18761
18762 /**
18763 * Slashes
18764 */
18765
18766 if (value === '/') {
18767 // if the beginning of the glob is "./", advance the start
18768 // to the current index, and don't add the "./" characters
18769 // to the state. This greatly simplifies lookbehinds when
18770 // checking for BOS characters like "!" and "." (not "./")
18771 if (prev.type === 'dot' && state.index === 1) {
18772 state.start = state.index + 1;
18773 state.consumed = '';
18774 state.output = '';
18775 tokens.pop();
18776 prev = bos; // reset "prev" to the first token
18777 continue;
18778 }
18779
18780 push({ type: 'slash', value, output: SLASH_LITERAL });
18781 continue;
18782 }
18783
18784 /**
18785 * Dots
18786 */
18787
18788 if (value === '.') {
18789 if (state.braces > 0 && prev.type === 'dot') {
18790 if (prev.value === '.') prev.output = DOT_LITERAL;
18791 prev.type = 'dots';
18792 prev.output += value;
18793 prev.value += value;
18794 state.dots = true;
18795 continue;
18796 }
18797
18798 push({ type: 'dot', value, output: DOT_LITERAL });
18799 continue;
18800 }
18801
18802 /**
18803 * Question marks
18804 */
18805
18806 if (value === '?') {
18807 if (prev && prev.type === 'paren') {
18808 let next = peek();
18809 let output = value;
18810
18811 if (next === '<' && !utils.supportsLookbehinds()) {
18812 throw new Error('Node.js v10 or higher is required for regex lookbehinds');
18813 }
18814
18815 if (prev.value === '(' && !/[!=<:]/.test(next) || (next === '<' && !/[!=]/.test(peek(2)))) {
18816 output = '\\' + value;
18817 }
18818
18819 push({ type: 'text', value, output });
18820 continue;
18821 }
18822
18823 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
18824 extglobOpen('qmark', value);
18825 continue;
18826 }
18827
18828 if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
18829 push({ type: 'qmark', value, output: QMARK_NO_DOT });
18830 continue;
18831 }
18832
18833 push({ type: 'qmark', value, output: QMARK });
18834 continue;
18835 }
18836
18837 /**
18838 * Exclamation
18839 */
18840
18841 if (value === '!') {
18842 if (opts.noextglob !== true && peek() === '(') {
18843 if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
18844 extglobOpen('negate', value);
18845 continue;
18846 }
18847 }
18848
18849 if (opts.nonegate !== true && state.index === 0) {
18850 negate(state);
18851 continue;
18852 }
18853 }
18854
18855 /**
18856 * Plus
18857 */
18858
18859 if (value === '+') {
18860 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
18861 extglobOpen('plus', value);
18862 continue;
18863 }
18864
18865 if (prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) {
18866 let output = prev.extglob === true ? '\\' + value : value;
18867 push({ type: 'plus', value, output });
18868 continue;
18869 }
18870
18871 // use regex behavior inside parens
18872 if (state.parens > 0 && opts.regex !== false) {
18873 push({ type: 'plus', value });
18874 continue;
18875 }
18876
18877 push({ type: 'plus', value: PLUS_LITERAL });
18878 continue;
18879 }
18880
18881 /**
18882 * Plain text
18883 */
18884
18885 if (value === '@') {
18886 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
18887 push({ type: 'at', value, output: '' });
18888 continue;
18889 }
18890
18891 push({ type: 'text', value });
18892 continue;
18893 }
18894
18895 /**
18896 * Plain text
18897 */
18898
18899 if (value !== '*') {
18900 if (value === '$' || value === '^') {
18901 value = '\\' + value;
18902 }
18903
18904 let match = REGEX_NON_SPECIAL_CHAR.exec(input.slice(state.index + 1));
18905 if (match) {
18906 value += match[0];
18907 state.index += match[0].length;
18908 }
18909
18910 push({ type: 'text', value });
18911 continue;
18912 }
18913
18914 /**
18915 * Stars
18916 */
18917
18918 if (prev && (prev.type === 'globstar' || prev.star === true)) {
18919 prev.type = 'star';
18920 prev.star = true;
18921 prev.value += value;
18922 prev.output = star;
18923 state.backtrack = true;
18924 state.consumed += value;
18925 continue;
18926 }
18927
18928 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
18929 extglobOpen('star', value);
18930 continue;
18931 }
18932
18933 if (prev.type === 'star') {
18934 if (opts.noglobstar === true) {
18935 state.consumed += value;
18936 continue;
18937 }
18938
18939 let prior = prev.prev;
18940 let before = prior.prev;
18941 let isStart = prior.type === 'slash' || prior.type === 'bos';
18942 let afterStar = before && (before.type === 'star' || before.type === 'globstar');
18943
18944 if (opts.bash === true && (!isStart || (!eos() && peek() !== '/'))) {
18945 push({ type: 'star', value, output: '' });
18946 continue;
18947 }
18948
18949 let isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
18950 let isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
18951 if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
18952 push({ type: 'star', value, output: '' });
18953 continue;
18954 }
18955
18956 // strip consecutive `/**/`
18957 while (input.slice(state.index + 1, state.index + 4) === '/**') {
18958 let after = input[state.index + 4];
18959 if (after && after !== '/') {
18960 break;
18961 }
18962 state.consumed += '/**';
18963 state.index += 3;
18964 }
18965
18966 if (prior.type === 'bos' && eos()) {
18967 prev.type = 'globstar';
18968 prev.value += value;
18969 prev.output = globstar(opts);
18970 state.output = prev.output;
18971 state.consumed += value;
18972 continue;
18973 }
18974
18975 if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
18976 state.output = state.output.slice(0, -(prior.output + prev.output).length);
18977 prior.output = '(?:' + prior.output;
18978
18979 prev.type = 'globstar';
18980 prev.output = globstar(opts) + '|$)';
18981 prev.value += value;
18982
18983 state.output += prior.output + prev.output;
18984 state.consumed += value;
18985 continue;
18986 }
18987
18988 let next = peek();
18989 if (prior.type === 'slash' && prior.prev.type !== 'bos' && next === '/') {
18990 let end = peek(2) !== void 0 ? '|$' : '';
18991
18992 state.output = state.output.slice(0, -(prior.output + prev.output).length);
18993 prior.output = '(?:' + prior.output;
18994
18995 prev.type = 'globstar';
18996 prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
18997 prev.value += value;
18998
18999 state.output += prior.output + prev.output;
19000 state.consumed += value + advance();
19001
19002 push({ type: 'slash', value, output: '' });
19003 continue;
19004 }
19005
19006 if (prior.type === 'bos' && next === '/') {
19007 prev.type = 'globstar';
19008 prev.value += value;
19009 prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
19010 state.output = prev.output;
19011 state.consumed += value + advance();
19012 push({ type: 'slash', value, output: '' });
19013 continue;
19014 }
19015
19016 // remove single star from output
19017 state.output = state.output.slice(0, -prev.output.length);
19018
19019 // reset previous token to globstar
19020 prev.type = 'globstar';
19021 prev.output = globstar(opts);
19022 prev.value += value;
19023
19024 // reset output with globstar
19025 state.output += prev.output;
19026 state.consumed += value;
19027 continue;
19028 }
19029
19030 let token = { type: 'star', value, output: star };
19031
19032 if (opts.bash === true) {
19033 token.output = '.*?';
19034 if (prev.type === 'bos' || prev.type === 'slash') {
19035 token.output = nodot + token.output;
19036 }
19037 push(token);
19038 continue;
19039 }
19040
19041 if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
19042 token.output = value;
19043 push(token);
19044 continue;
19045 }
19046
19047 if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
19048 if (prev.type === 'dot') {
19049 state.output += NO_DOT_SLASH;
19050 prev.output += NO_DOT_SLASH;
19051
19052 } else if (opts.dot === true) {
19053 state.output += NO_DOTS_SLASH;
19054 prev.output += NO_DOTS_SLASH;
19055
19056 } else {
19057 state.output += nodot;
19058 prev.output += nodot;
19059 }
19060
19061 if (peek() !== '*') {
19062 state.output += ONE_CHAR;
19063 prev.output += ONE_CHAR;
19064 }
19065 }
19066
19067 push(token);
19068 }
19069
19070 while (state.brackets > 0) {
19071 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
19072 state.output = utils.escapeLast(state.output, '[');
19073 decrement('brackets');
19074 }
19075
19076 while (state.parens > 0) {
19077 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
19078 state.output = utils.escapeLast(state.output, '(');
19079 decrement('parens');
19080 }
19081
19082 while (state.braces > 0) {
19083 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
19084 state.output = utils.escapeLast(state.output, '{');
19085 decrement('braces');
19086 }
19087
19088 if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
19089 push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
19090 }
19091
19092 // rebuild the output if we had to backtrack at any point
19093 if (state.backtrack === true) {
19094 state.output = '';
19095
19096 for (let token of state.tokens) {
19097 state.output += token.output != null ? token.output : token.value;
19098
19099 if (token.suffix) {
19100 state.output += token.suffix;
19101 }
19102 }
19103 }
19104
19105 return state;
19106};
19107
19108/**
19109 * Fast paths for creating regular expressions for common glob patterns.
19110 * This can significantly speed up processing and has very little downside
19111 * impact when none of the fast paths match.
19112 */
19113
19114parse.fastpaths = (input, options) => {
19115 let opts = { ...options };
19116 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
19117 let len = input.length;
19118 if (len > max) {
19119 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
19120 }
19121
19122 input = REPLACEMENTS[input] || input;
19123 let win32 = utils.isWindows(options);
19124
19125 // create constants based on platform, for windows or posix
19126 const {
19127 DOT_LITERAL,
19128 SLASH_LITERAL,
19129 ONE_CHAR,
19130 DOTS_SLASH,
19131 NO_DOT,
19132 NO_DOTS,
19133 NO_DOTS_SLASH,
19134 STAR,
19135 START_ANCHOR
19136 } = constants.globChars(win32);
19137
19138 let capture = opts.capture ? '' : '?:';
19139 let star = opts.bash === true ? '.*?' : STAR;
19140 let nodot = opts.dot ? NO_DOTS : NO_DOT;
19141 let slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
19142
19143 if (opts.capture) {
19144 star = `(${star})`;
19145 }
19146
19147 const globstar = (opts) => {
19148 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
19149 };
19150
19151 const create = str => {
19152 switch (str) {
19153 case '*':
19154 return `${nodot}${ONE_CHAR}${star}`;
19155
19156 case '.*':
19157 return `${DOT_LITERAL}${ONE_CHAR}${star}`;
19158
19159 case '*.*':
19160 return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
19161
19162 case '*/*':
19163 return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
19164
19165 case '**':
19166 return nodot + globstar(opts);
19167
19168 case '**/*':
19169 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
19170
19171 case '**/*.*':
19172 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
19173
19174 case '**/.*':
19175 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
19176
19177 default: {
19178 let match = /^(.*?)\.(\w+)$/.exec(str);
19179 if (!match) return;
19180
19181 let source = create(match[1], options);
19182 if (!source) return;
19183
19184 return source + DOT_LITERAL + match[2];
19185 }
19186 }
19187 };
19188
19189 let output = create(input);
19190 if (output && opts.strictSlashes !== true) {
19191 output += `${SLASH_LITERAL}?`;
19192 }
19193
19194 return output;
19195};
19196
19197module.exports = parse;
19198
19199
19200/***/ }),
19201/* 87 */
19202/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
19203
19204"use strict";
19205
19206
19207module.exports = __webpack_require__(88);
19208
19209
19210/***/ }),
19211/* 88 */
19212/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
19213
19214"use strict";
19215
19216
19217const path = __webpack_require__(13);
19218const scan = __webpack_require__(89);
19219const parse = __webpack_require__(92);
19220const utils = __webpack_require__(90);
19221const constants = __webpack_require__(91);
19222const isObject = val => val && typeof val === 'object' && !Array.isArray(val);
19223
19224/**
19225 * Creates a matcher function from one or more glob patterns. The
19226 * returned function takes a string to match as its first argument,
19227 * and returns true if the string is a match. The returned matcher
19228 * function also takes a boolean as the second argument that, when true,
19229 * returns an object with additional information.
19230 *
19231 * ```js
19232 * const picomatch = require('picomatch');
19233 * // picomatch(glob[, options]);
19234 *
19235 * const isMatch = picomatch('*.!(*a)');
19236 * console.log(isMatch('a.a')); //=> false
19237 * console.log(isMatch('a.b')); //=> true
19238 * ```
19239 * @name picomatch
19240 * @param {String|Array} `globs` One or more glob patterns.
19241 * @param {Object=} `options`
19242 * @return {Function=} Returns a matcher function.
19243 * @api public
19244 */
19245
19246const picomatch = (glob, options, returnState = false) => {
19247 if (Array.isArray(glob)) {
19248 const fns = glob.map(input => picomatch(input, options, returnState));
19249 const arrayMatcher = str => {
19250 for (const isMatch of fns) {
19251 const state = isMatch(str);
19252 if (state) return state;
19253 }
19254 return false;
19255 };
19256 return arrayMatcher;
19257 }
19258
19259 const isState = isObject(glob) && glob.tokens && glob.input;
19260
19261 if (glob === '' || (typeof glob !== 'string' && !isState)) {
19262 throw new TypeError('Expected pattern to be a non-empty string');
19263 }
19264
19265 const opts = options || {};
19266 const posix = utils.isWindows(options);
19267 const regex = isState
19268 ? picomatch.compileRe(glob, options)
19269 : picomatch.makeRe(glob, options, false, true);
19270
19271 const state = regex.state;
19272 delete regex.state;
19273
19274 let isIgnored = () => false;
19275 if (opts.ignore) {
19276 const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
19277 isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
19278 }
19279
19280 const matcher = (input, returnObject = false) => {
19281 const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
19282 const result = { glob, state, regex, posix, input, output, match, isMatch };
19283
19284 if (typeof opts.onResult === 'function') {
19285 opts.onResult(result);
19286 }
19287
19288 if (isMatch === false) {
19289 result.isMatch = false;
19290 return returnObject ? result : false;
19291 }
19292
19293 if (isIgnored(input)) {
19294 if (typeof opts.onIgnore === 'function') {
19295 opts.onIgnore(result);
19296 }
19297 result.isMatch = false;
19298 return returnObject ? result : false;
19299 }
19300
19301 if (typeof opts.onMatch === 'function') {
19302 opts.onMatch(result);
19303 }
19304 return returnObject ? result : true;
19305 };
19306
19307 if (returnState) {
19308 matcher.state = state;
19309 }
19310
19311 return matcher;
19312};
19313
19314/**
19315 * Test `input` with the given `regex`. This is used by the main
19316 * `picomatch()` function to test the input string.
19317 *
19318 * ```js
19319 * const picomatch = require('picomatch');
19320 * // picomatch.test(input, regex[, options]);
19321 *
19322 * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
19323 * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
19324 * ```
19325 * @param {String} `input` String to test.
19326 * @param {RegExp} `regex`
19327 * @return {Object} Returns an object with matching info.
19328 * @api public
19329 */
19330
19331picomatch.test = (input, regex, options, { glob, posix } = {}) => {
19332 if (typeof input !== 'string') {
19333 throw new TypeError('Expected input to be a string');
19334 }
19335
19336 if (input === '') {
19337 return { isMatch: false, output: '' };
19338 }
19339
19340 const opts = options || {};
19341 const format = opts.format || (posix ? utils.toPosixSlashes : null);
19342 let match = input === glob;
19343 let output = (match && format) ? format(input) : input;
19344
19345 if (match === false) {
19346 output = format ? format(input) : input;
19347 match = output === glob;
19348 }
19349
19350 if (match === false || opts.capture === true) {
19351 if (opts.matchBase === true || opts.basename === true) {
19352 match = picomatch.matchBase(input, regex, options, posix);
19353 } else {
19354 match = regex.exec(output);
19355 }
19356 }
19357
19358 return { isMatch: Boolean(match), match, output };
19359};
19360
19361/**
19362 * Match the basename of a filepath.
19363 *
19364 * ```js
19365 * const picomatch = require('picomatch');
19366 * // picomatch.matchBase(input, glob[, options]);
19367 * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
19368 * ```
19369 * @param {String} `input` String to test.
19370 * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
19371 * @return {Boolean}
19372 * @api public
19373 */
19374
19375picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
19376 const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
19377 return regex.test(path.basename(input));
19378};
19379
19380/**
19381 * Returns true if **any** of the given glob `patterns` match the specified `string`.
19382 *
19383 * ```js
19384 * const picomatch = require('picomatch');
19385 * // picomatch.isMatch(string, patterns[, options]);
19386 *
19387 * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
19388 * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
19389 * ```
19390 * @param {String|Array} str The string to test.
19391 * @param {String|Array} patterns One or more glob patterns to use for matching.
19392 * @param {Object} [options] See available [options](#options).
19393 * @return {Boolean} Returns true if any patterns match `str`
19394 * @api public
19395 */
19396
19397picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
19398
19399/**
19400 * Parse a glob pattern to create the source string for a regular
19401 * expression.
19402 *
19403 * ```js
19404 * const picomatch = require('picomatch');
19405 * const result = picomatch.parse(pattern[, options]);
19406 * ```
19407 * @param {String} `pattern`
19408 * @param {Object} `options`
19409 * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
19410 * @api public
19411 */
19412
19413picomatch.parse = (pattern, options) => {
19414 if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));
19415 return parse(pattern, { ...options, fastpaths: false });
19416};
19417
19418/**
19419 * Scan a glob pattern to separate the pattern into segments.
19420 *
19421 * ```js
19422 * const picomatch = require('picomatch');
19423 * // picomatch.scan(input[, options]);
19424 *
19425 * const result = picomatch.scan('!./foo/*.js');
19426 * console.log(result);
19427 * { prefix: '!./',
19428 * input: '!./foo/*.js',
19429 * start: 3,
19430 * base: 'foo',
19431 * glob: '*.js',
19432 * isBrace: false,
19433 * isBracket: false,
19434 * isGlob: true,
19435 * isExtglob: false,
19436 * isGlobstar: false,
19437 * negated: true }
19438 * ```
19439 * @param {String} `input` Glob pattern to scan.
19440 * @param {Object} `options`
19441 * @return {Object} Returns an object with
19442 * @api public
19443 */
19444
19445picomatch.scan = (input, options) => scan(input, options);
19446
19447/**
19448 * Create a regular expression from a parsed glob pattern.
19449 *
19450 * ```js
19451 * const picomatch = require('picomatch');
19452 * const state = picomatch.parse('*.js');
19453 * // picomatch.compileRe(state[, options]);
19454 *
19455 * console.log(picomatch.compileRe(state));
19456 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
19457 * ```
19458 * @param {String} `state` The object returned from the `.parse` method.
19459 * @param {Object} `options`
19460 * @return {RegExp} Returns a regex created from the given pattern.
19461 * @api public
19462 */
19463
19464picomatch.compileRe = (parsed, options, returnOutput = false, returnState = false) => {
19465 if (returnOutput === true) {
19466 return parsed.output;
19467 }
19468
19469 const opts = options || {};
19470 const prepend = opts.contains ? '' : '^';
19471 const append = opts.contains ? '' : '$';
19472
19473 let source = `${prepend}(?:${parsed.output})${append}`;
19474 if (parsed && parsed.negated === true) {
19475 source = `^(?!${source}).*$`;
19476 }
19477
19478 const regex = picomatch.toRegex(source, options);
19479 if (returnState === true) {
19480 regex.state = parsed;
19481 }
19482
19483 return regex;
19484};
19485
19486picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => {
19487 if (!input || typeof input !== 'string') {
19488 throw new TypeError('Expected a non-empty string');
19489 }
19490
19491 const opts = options || {};
19492 let parsed = { negated: false, fastpaths: true };
19493 let prefix = '';
19494 let output;
19495
19496 if (input.startsWith('./')) {
19497 input = input.slice(2);
19498 prefix = parsed.prefix = './';
19499 }
19500
19501 if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
19502 output = parse.fastpaths(input, options);
19503 }
19504
19505 if (output === undefined) {
19506 parsed = parse(input, options);
19507 parsed.prefix = prefix + (parsed.prefix || '');
19508 } else {
19509 parsed.output = output;
19510 }
19511
19512 return picomatch.compileRe(parsed, options, returnOutput, returnState);
19513};
19514
19515/**
19516 * Create a regular expression from the given regex source string.
19517 *
19518 * ```js
19519 * const picomatch = require('picomatch');
19520 * // picomatch.toRegex(source[, options]);
19521 *
19522 * const { output } = picomatch.parse('*.js');
19523 * console.log(picomatch.toRegex(output));
19524 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
19525 * ```
19526 * @param {String} `source` Regular expression source string.
19527 * @param {Object} `options`
19528 * @return {RegExp}
19529 * @api public
19530 */
19531
19532picomatch.toRegex = (source, options) => {
19533 try {
19534 const opts = options || {};
19535 return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
19536 } catch (err) {
19537 if (options && options.debug === true) throw err;
19538 return /$^/;
19539 }
19540};
19541
19542/**
19543 * Picomatch constants.
19544 * @return {Object}
19545 */
19546
19547picomatch.constants = constants;
19548
19549/**
19550 * Expose "picomatch"
19551 */
19552
19553module.exports = picomatch;
19554
19555
19556/***/ }),
19557/* 89 */
19558/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
19559
19560"use strict";
19561
19562
19563const utils = __webpack_require__(90);
19564const {
19565 CHAR_ASTERISK, /* * */
19566 CHAR_AT, /* @ */
19567 CHAR_BACKWARD_SLASH, /* \ */
19568 CHAR_COMMA, /* , */
19569 CHAR_DOT, /* . */
19570 CHAR_EXCLAMATION_MARK, /* ! */
19571 CHAR_FORWARD_SLASH, /* / */
19572 CHAR_LEFT_CURLY_BRACE, /* { */
19573 CHAR_LEFT_PARENTHESES, /* ( */
19574 CHAR_LEFT_SQUARE_BRACKET, /* [ */
19575 CHAR_PLUS, /* + */
19576 CHAR_QUESTION_MARK, /* ? */
19577 CHAR_RIGHT_CURLY_BRACE, /* } */
19578 CHAR_RIGHT_PARENTHESES, /* ) */
19579 CHAR_RIGHT_SQUARE_BRACKET /* ] */
19580} = __webpack_require__(91);
19581
19582const isPathSeparator = code => {
19583 return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
19584};
19585
19586const depth = token => {
19587 if (token.isPrefix !== true) {
19588 token.depth = token.isGlobstar ? Infinity : 1;
19589 }
19590};
19591
19592/**
19593 * Quickly scans a glob pattern and returns an object with a handful of
19594 * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
19595 * `glob` (the actual pattern), and `negated` (true if the path starts with `!`).
19596 *
19597 * ```js
19598 * const pm = require('picomatch');
19599 * console.log(pm.scan('foo/bar/*.js'));
19600 * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
19601 * ```
19602 * @param {String} `str`
19603 * @param {Object} `options`
19604 * @return {Object} Returns an object with tokens and regex source string.
19605 * @api public
19606 */
19607
19608const scan = (input, options) => {
19609 const opts = options || {};
19610
19611 const length = input.length - 1;
19612 const scanToEnd = opts.parts === true || opts.scanToEnd === true;
19613 const slashes = [];
19614 const tokens = [];
19615 const parts = [];
19616
19617 let str = input;
19618 let index = -1;
19619 let start = 0;
19620 let lastIndex = 0;
19621 let isBrace = false;
19622 let isBracket = false;
19623 let isGlob = false;
19624 let isExtglob = false;
19625 let isGlobstar = false;
19626 let braceEscaped = false;
19627 let backslashes = false;
19628 let negated = false;
19629 let finished = false;
19630 let braces = 0;
19631 let prev;
19632 let code;
19633 let token = { value: '', depth: 0, isGlob: false };
19634
19635 const eos = () => index >= length;
19636 const peek = () => str.charCodeAt(index + 1);
19637 const advance = () => {
19638 prev = code;
19639 return str.charCodeAt(++index);
19640 };
19641
19642 while (index < length) {
19643 code = advance();
19644 let next;
19645
19646 if (code === CHAR_BACKWARD_SLASH) {
19647 backslashes = token.backslashes = true;
19648 code = advance();
19649
19650 if (code === CHAR_LEFT_CURLY_BRACE) {
19651 braceEscaped = true;
19652 }
19653 continue;
19654 }
19655
19656 if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
19657 braces++;
19658
19659 while (eos() !== true && (code = advance())) {
19660 if (code === CHAR_BACKWARD_SLASH) {
19661 backslashes = token.backslashes = true;
19662 advance();
19663 continue;
19664 }
19665
19666 if (code === CHAR_LEFT_CURLY_BRACE) {
19667 braces++;
19668 continue;
19669 }
19670
19671 if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {
19672 isBrace = token.isBrace = true;
19673 isGlob = token.isGlob = true;
19674 finished = true;
19675
19676 if (scanToEnd === true) {
19677 continue;
19678 }
19679
19680 break;
19681 }
19682
19683 if (braceEscaped !== true && code === CHAR_COMMA) {
19684 isBrace = token.isBrace = true;
19685 isGlob = token.isGlob = true;
19686 finished = true;
19687
19688 if (scanToEnd === true) {
19689 continue;
19690 }
19691
19692 break;
19693 }
19694
19695 if (code === CHAR_RIGHT_CURLY_BRACE) {
19696 braces--;
19697
19698 if (braces === 0) {
19699 braceEscaped = false;
19700 isBrace = token.isBrace = true;
19701 finished = true;
19702 break;
19703 }
19704 }
19705 }
19706
19707 if (scanToEnd === true) {
19708 continue;
19709 }
19710
19711 break;
19712 }
19713
19714 if (code === CHAR_FORWARD_SLASH) {
19715 slashes.push(index);
19716 tokens.push(token);
19717 token = { value: '', depth: 0, isGlob: false };
19718
19719 if (finished === true) continue;
19720 if (prev === CHAR_DOT && index === (start + 1)) {
19721 start += 2;
19722 continue;
19723 }
19724
19725 lastIndex = index + 1;
19726 continue;
19727 }
19728
19729 if (opts.noext !== true) {
19730 const isExtglobChar = code === CHAR_PLUS
19731 || code === CHAR_AT
19732 || code === CHAR_ASTERISK
19733 || code === CHAR_QUESTION_MARK
19734 || code === CHAR_EXCLAMATION_MARK;
19735
19736 if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {
19737 isGlob = token.isGlob = true;
19738 isExtglob = token.isExtglob = true;
19739 finished = true;
19740
19741 if (scanToEnd === true) {
19742 while (eos() !== true && (code = advance())) {
19743 if (code === CHAR_BACKWARD_SLASH) {
19744 backslashes = token.backslashes = true;
19745 code = advance();
19746 continue;
19747 }
19748
19749 if (code === CHAR_RIGHT_PARENTHESES) {
19750 isGlob = token.isGlob = true;
19751 finished = true;
19752 break;
19753 }
19754 }
19755 continue;
19756 }
19757 break;
19758 }
19759 }
19760
19761 if (code === CHAR_ASTERISK) {
19762 if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;
19763 isGlob = token.isGlob = true;
19764 finished = true;
19765
19766 if (scanToEnd === true) {
19767 continue;
19768 }
19769 break;
19770 }
19771
19772 if (code === CHAR_QUESTION_MARK) {
19773 isGlob = token.isGlob = true;
19774 finished = true;
19775
19776 if (scanToEnd === true) {
19777 continue;
19778 }
19779 break;
19780 }
19781
19782 if (code === CHAR_LEFT_SQUARE_BRACKET) {
19783 while (eos() !== true && (next = advance())) {
19784 if (next === CHAR_BACKWARD_SLASH) {
19785 backslashes = token.backslashes = true;
19786 advance();
19787 continue;
19788 }
19789
19790 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
19791 isBracket = token.isBracket = true;
19792 isGlob = token.isGlob = true;
19793 finished = true;
19794
19795 if (scanToEnd === true) {
19796 continue;
19797 }
19798 break;
19799 }
19800 }
19801 }
19802
19803 if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
19804 negated = token.negated = true;
19805 start++;
19806 continue;
19807 }
19808
19809 if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
19810 isGlob = token.isGlob = true;
19811
19812 if (scanToEnd === true) {
19813 while (eos() !== true && (code = advance())) {
19814 if (code === CHAR_LEFT_PARENTHESES) {
19815 backslashes = token.backslashes = true;
19816 code = advance();
19817 continue;
19818 }
19819
19820 if (code === CHAR_RIGHT_PARENTHESES) {
19821 finished = true;
19822 break;
19823 }
19824 }
19825 continue;
19826 }
19827 break;
19828 }
19829
19830 if (isGlob === true) {
19831 finished = true;
19832
19833 if (scanToEnd === true) {
19834 continue;
19835 }
19836
19837 break;
19838 }
19839 }
19840
19841 if (opts.noext === true) {
19842 isExtglob = false;
19843 isGlob = false;
19844 }
19845
19846 let base = str;
19847 let prefix = '';
19848 let glob = '';
19849
19850 if (start > 0) {
19851 prefix = str.slice(0, start);
19852 str = str.slice(start);
19853 lastIndex -= start;
19854 }
19855
19856 if (base && isGlob === true && lastIndex > 0) {
19857 base = str.slice(0, lastIndex);
19858 glob = str.slice(lastIndex);
19859 } else if (isGlob === true) {
19860 base = '';
19861 glob = str;
19862 } else {
19863 base = str;
19864 }
19865
19866 if (base && base !== '' && base !== '/' && base !== str) {
19867 if (isPathSeparator(base.charCodeAt(base.length - 1))) {
19868 base = base.slice(0, -1);
19869 }
19870 }
19871
19872 if (opts.unescape === true) {
19873 if (glob) glob = utils.removeBackslashes(glob);
19874
19875 if (base && backslashes === true) {
19876 base = utils.removeBackslashes(base);
19877 }
19878 }
19879
19880 const state = {
19881 prefix,
19882 input,
19883 start,
19884 base,
19885 glob,
19886 isBrace,
19887 isBracket,
19888 isGlob,
19889 isExtglob,
19890 isGlobstar,
19891 negated
19892 };
19893
19894 if (opts.tokens === true) {
19895 state.maxDepth = 0;
19896 if (!isPathSeparator(code)) {
19897 tokens.push(token);
19898 }
19899 state.tokens = tokens;
19900 }
19901
19902 if (opts.parts === true || opts.tokens === true) {
19903 let prevIndex;
19904
19905 for (let idx = 0; idx < slashes.length; idx++) {
19906 const n = prevIndex ? prevIndex + 1 : start;
19907 const i = slashes[idx];
19908 const value = input.slice(n, i);
19909 if (opts.tokens) {
19910 if (idx === 0 && start !== 0) {
19911 tokens[idx].isPrefix = true;
19912 tokens[idx].value = prefix;
19913 } else {
19914 tokens[idx].value = value;
19915 }
19916 depth(tokens[idx]);
19917 state.maxDepth += tokens[idx].depth;
19918 }
19919 if (idx !== 0 || value !== '') {
19920 parts.push(value);
19921 }
19922 prevIndex = i;
19923 }
19924
19925 if (prevIndex && prevIndex + 1 < input.length) {
19926 const value = input.slice(prevIndex + 1);
19927 parts.push(value);
19928
19929 if (opts.tokens) {
19930 tokens[tokens.length - 1].value = value;
19931 depth(tokens[tokens.length - 1]);
19932 state.maxDepth += tokens[tokens.length - 1].depth;
19933 }
19934 }
19935
19936 state.slashes = slashes;
19937 state.parts = parts;
19938 }
19939
19940 return state;
19941};
19942
19943module.exports = scan;
19944
19945
19946/***/ }),
19947/* 90 */
19948/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
19949
19950"use strict";
19951
19952
19953const path = __webpack_require__(13);
19954const win32 = process.platform === 'win32';
19955const {
19956 REGEX_BACKSLASH,
19957 REGEX_REMOVE_BACKSLASH,
19958 REGEX_SPECIAL_CHARS,
19959 REGEX_SPECIAL_CHARS_GLOBAL
19960} = __webpack_require__(91);
19961
19962exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
19963exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
19964exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
19965exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
19966exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
19967
19968exports.removeBackslashes = str => {
19969 return str.replace(REGEX_REMOVE_BACKSLASH, match => {
19970 return match === '\\' ? '' : match;
19971 });
19972};
19973
19974exports.supportsLookbehinds = () => {
19975 const segs = process.version.slice(1).split('.').map(Number);
19976 if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {
19977 return true;
19978 }
19979 return false;
19980};
19981
19982exports.isWindows = options => {
19983 if (options && typeof options.windows === 'boolean') {
19984 return options.windows;
19985 }
19986 return win32 === true || path.sep === '\\';
19987};
19988
19989exports.escapeLast = (input, char, lastIdx) => {
19990 const idx = input.lastIndexOf(char, lastIdx);
19991 if (idx === -1) return input;
19992 if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
19993 return `${input.slice(0, idx)}\\${input.slice(idx)}`;
19994};
19995
19996exports.removePrefix = (input, state = {}) => {
19997 let output = input;
19998 if (output.startsWith('./')) {
19999 output = output.slice(2);
20000 state.prefix = './';
20001 }
20002 return output;
20003};
20004
20005exports.wrapOutput = (input, state = {}, options = {}) => {
20006 const prepend = options.contains ? '' : '^';
20007 const append = options.contains ? '' : '$';
20008
20009 let output = `${prepend}(?:${input})${append}`;
20010 if (state.negated === true) {
20011 output = `(?:^(?!${output}).*$)`;
20012 }
20013 return output;
20014};
20015
20016
20017/***/ }),
20018/* 91 */
20019/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
20020
20021"use strict";
20022
20023
20024const path = __webpack_require__(13);
20025const WIN_SLASH = '\\\\/';
20026const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
20027
20028/**
20029 * Posix glob regex
20030 */
20031
20032const DOT_LITERAL = '\\.';
20033const PLUS_LITERAL = '\\+';
20034const QMARK_LITERAL = '\\?';
20035const SLASH_LITERAL = '\\/';
20036const ONE_CHAR = '(?=.)';
20037const QMARK = '[^/]';
20038const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
20039const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
20040const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
20041const NO_DOT = `(?!${DOT_LITERAL})`;
20042const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
20043const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
20044const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
20045const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
20046const STAR = `${QMARK}*?`;
20047
20048const POSIX_CHARS = {
20049 DOT_LITERAL,
20050 PLUS_LITERAL,
20051 QMARK_LITERAL,
20052 SLASH_LITERAL,
20053 ONE_CHAR,
20054 QMARK,
20055 END_ANCHOR,
20056 DOTS_SLASH,
20057 NO_DOT,
20058 NO_DOTS,
20059 NO_DOT_SLASH,
20060 NO_DOTS_SLASH,
20061 QMARK_NO_DOT,
20062 STAR,
20063 START_ANCHOR
20064};
20065
20066/**
20067 * Windows glob regex
20068 */
20069
20070const WINDOWS_CHARS = {
20071 ...POSIX_CHARS,
20072
20073 SLASH_LITERAL: `[${WIN_SLASH}]`,
20074 QMARK: WIN_NO_SLASH,
20075 STAR: `${WIN_NO_SLASH}*?`,
20076 DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
20077 NO_DOT: `(?!${DOT_LITERAL})`,
20078 NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
20079 NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
20080 NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
20081 QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
20082 START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
20083 END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
20084};
20085
20086/**
20087 * POSIX Bracket Regex
20088 */
20089
20090const POSIX_REGEX_SOURCE = {
20091 alnum: 'a-zA-Z0-9',
20092 alpha: 'a-zA-Z',
20093 ascii: '\\x00-\\x7F',
20094 blank: ' \\t',
20095 cntrl: '\\x00-\\x1F\\x7F',
20096 digit: '0-9',
20097 graph: '\\x21-\\x7E',
20098 lower: 'a-z',
20099 print: '\\x20-\\x7E ',
20100 punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
20101 space: ' \\t\\r\\n\\v\\f',
20102 upper: 'A-Z',
20103 word: 'A-Za-z0-9_',
20104 xdigit: 'A-Fa-f0-9'
20105};
20106
20107module.exports = {
20108 MAX_LENGTH: 1024 * 64,
20109 POSIX_REGEX_SOURCE,
20110
20111 // regular expressions
20112 REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
20113 REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
20114 REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
20115 REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
20116 REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
20117 REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
20118
20119 // Replace globs with equivalent patterns to reduce parsing time.
20120 REPLACEMENTS: {
20121 '***': '*',
20122 '**/**': '**',
20123 '**/**/**': '**'
20124 },
20125
20126 // Digits
20127 CHAR_0: 48, /* 0 */
20128 CHAR_9: 57, /* 9 */
20129
20130 // Alphabet chars.
20131 CHAR_UPPERCASE_A: 65, /* A */
20132 CHAR_LOWERCASE_A: 97, /* a */
20133 CHAR_UPPERCASE_Z: 90, /* Z */
20134 CHAR_LOWERCASE_Z: 122, /* z */
20135
20136 CHAR_LEFT_PARENTHESES: 40, /* ( */
20137 CHAR_RIGHT_PARENTHESES: 41, /* ) */
20138
20139 CHAR_ASTERISK: 42, /* * */
20140
20141 // Non-alphabetic chars.
20142 CHAR_AMPERSAND: 38, /* & */
20143 CHAR_AT: 64, /* @ */
20144 CHAR_BACKWARD_SLASH: 92, /* \ */
20145 CHAR_CARRIAGE_RETURN: 13, /* \r */
20146 CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
20147 CHAR_COLON: 58, /* : */
20148 CHAR_COMMA: 44, /* , */
20149 CHAR_DOT: 46, /* . */
20150 CHAR_DOUBLE_QUOTE: 34, /* " */
20151 CHAR_EQUAL: 61, /* = */
20152 CHAR_EXCLAMATION_MARK: 33, /* ! */
20153 CHAR_FORM_FEED: 12, /* \f */
20154 CHAR_FORWARD_SLASH: 47, /* / */
20155 CHAR_GRAVE_ACCENT: 96, /* ` */
20156 CHAR_HASH: 35, /* # */
20157 CHAR_HYPHEN_MINUS: 45, /* - */
20158 CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
20159 CHAR_LEFT_CURLY_BRACE: 123, /* { */
20160 CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
20161 CHAR_LINE_FEED: 10, /* \n */
20162 CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
20163 CHAR_PERCENT: 37, /* % */
20164 CHAR_PLUS: 43, /* + */
20165 CHAR_QUESTION_MARK: 63, /* ? */
20166 CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
20167 CHAR_RIGHT_CURLY_BRACE: 125, /* } */
20168 CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
20169 CHAR_SEMICOLON: 59, /* ; */
20170 CHAR_SINGLE_QUOTE: 39, /* ' */
20171 CHAR_SPACE: 32, /* */
20172 CHAR_TAB: 9, /* \t */
20173 CHAR_UNDERSCORE: 95, /* _ */
20174 CHAR_VERTICAL_LINE: 124, /* | */
20175 CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
20176
20177 SEP: path.sep,
20178
20179 /**
20180 * Create EXTGLOB_CHARS
20181 */
20182
20183 extglobChars(chars) {
20184 return {
20185 '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
20186 '?': { type: 'qmark', open: '(?:', close: ')?' },
20187 '+': { type: 'plus', open: '(?:', close: ')+' },
20188 '*': { type: 'star', open: '(?:', close: ')*' },
20189 '@': { type: 'at', open: '(?:', close: ')' }
20190 };
20191 },
20192
20193 /**
20194 * Create GLOB_CHARS
20195 */
20196
20197 globChars(win32) {
20198 return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
20199 }
20200};
20201
20202
20203/***/ }),
20204/* 92 */
20205/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
20206
20207"use strict";
20208
20209
20210const constants = __webpack_require__(91);
20211const utils = __webpack_require__(90);
20212
20213/**
20214 * Constants
20215 */
20216
20217const {
20218 MAX_LENGTH,
20219 POSIX_REGEX_SOURCE,
20220 REGEX_NON_SPECIAL_CHARS,
20221 REGEX_SPECIAL_CHARS_BACKREF,
20222 REPLACEMENTS
20223} = constants;
20224
20225/**
20226 * Helpers
20227 */
20228
20229const expandRange = (args, options) => {
20230 if (typeof options.expandRange === 'function') {
20231 return options.expandRange(...args, options);
20232 }
20233
20234 args.sort();
20235 const value = `[${args.join('-')}]`;
20236
20237 try {
20238 /* eslint-disable-next-line no-new */
20239 new RegExp(value);
20240 } catch (ex) {
20241 return args.map(v => utils.escapeRegex(v)).join('..');
20242 }
20243
20244 return value;
20245};
20246
20247/**
20248 * Create the message for a syntax error
20249 */
20250
20251const syntaxError = (type, char) => {
20252 return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
20253};
20254
20255/**
20256 * Parse the given input string.
20257 * @param {String} input
20258 * @param {Object} options
20259 * @return {Object}
20260 */
20261
20262const parse = (input, options) => {
20263 if (typeof input !== 'string') {
20264 throw new TypeError('Expected a string');
20265 }
20266
20267 input = REPLACEMENTS[input] || input;
20268
20269 const opts = { ...options };
20270 const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
20271
20272 let len = input.length;
20273 if (len > max) {
20274 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
20275 }
20276
20277 const bos = { type: 'bos', value: '', output: opts.prepend || '' };
20278 const tokens = [bos];
20279
20280 const capture = opts.capture ? '' : '?:';
20281 const win32 = utils.isWindows(options);
20282
20283 // create constants based on platform, for windows or posix
20284 const PLATFORM_CHARS = constants.globChars(win32);
20285 const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
20286
20287 const {
20288 DOT_LITERAL,
20289 PLUS_LITERAL,
20290 SLASH_LITERAL,
20291 ONE_CHAR,
20292 DOTS_SLASH,
20293 NO_DOT,
20294 NO_DOT_SLASH,
20295 NO_DOTS_SLASH,
20296 QMARK,
20297 QMARK_NO_DOT,
20298 STAR,
20299 START_ANCHOR
20300 } = PLATFORM_CHARS;
20301
20302 const globstar = (opts) => {
20303 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
20304 };
20305
20306 const nodot = opts.dot ? '' : NO_DOT;
20307 const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
20308 let star = opts.bash === true ? globstar(opts) : STAR;
20309
20310 if (opts.capture) {
20311 star = `(${star})`;
20312 }
20313
20314 // minimatch options support
20315 if (typeof opts.noext === 'boolean') {
20316 opts.noextglob = opts.noext;
20317 }
20318
20319 const state = {
20320 input,
20321 index: -1,
20322 start: 0,
20323 dot: opts.dot === true,
20324 consumed: '',
20325 output: '',
20326 prefix: '',
20327 backtrack: false,
20328 negated: false,
20329 brackets: 0,
20330 braces: 0,
20331 parens: 0,
20332 quotes: 0,
20333 globstar: false,
20334 tokens
20335 };
20336
20337 input = utils.removePrefix(input, state);
20338 len = input.length;
20339
20340 const extglobs = [];
20341 const braces = [];
20342 const stack = [];
20343 let prev = bos;
20344 let value;
20345
20346 /**
20347 * Tokenizing helpers
20348 */
20349
20350 const eos = () => state.index === len - 1;
20351 const peek = state.peek = (n = 1) => input[state.index + n];
20352 const advance = state.advance = () => input[++state.index];
20353 const remaining = () => input.slice(state.index + 1);
20354 const consume = (value = '', num = 0) => {
20355 state.consumed += value;
20356 state.index += num;
20357 };
20358 const append = token => {
20359 state.output += token.output != null ? token.output : token.value;
20360 consume(token.value);
20361 };
20362
20363 const negate = () => {
20364 let count = 1;
20365
20366 while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {
20367 advance();
20368 state.start++;
20369 count++;
20370 }
20371
20372 if (count % 2 === 0) {
20373 return false;
20374 }
20375
20376 state.negated = true;
20377 state.start++;
20378 return true;
20379 };
20380
20381 const increment = type => {
20382 state[type]++;
20383 stack.push(type);
20384 };
20385
20386 const decrement = type => {
20387 state[type]--;
20388 stack.pop();
20389 };
20390
20391 /**
20392 * Push tokens onto the tokens array. This helper speeds up
20393 * tokenizing by 1) helping us avoid backtracking as much as possible,
20394 * and 2) helping us avoid creating extra tokens when consecutive
20395 * characters are plain text. This improves performance and simplifies
20396 * lookbehinds.
20397 */
20398
20399 const push = tok => {
20400 if (prev.type === 'globstar') {
20401 const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
20402 const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));
20403
20404 if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
20405 state.output = state.output.slice(0, -prev.output.length);
20406 prev.type = 'star';
20407 prev.value = '*';
20408 prev.output = star;
20409 state.output += prev.output;
20410 }
20411 }
20412
20413 if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) {
20414 extglobs[extglobs.length - 1].inner += tok.value;
20415 }
20416
20417 if (tok.value || tok.output) append(tok);
20418 if (prev && prev.type === 'text' && tok.type === 'text') {
20419 prev.value += tok.value;
20420 prev.output = (prev.output || '') + tok.value;
20421 return;
20422 }
20423
20424 tok.prev = prev;
20425 tokens.push(tok);
20426 prev = tok;
20427 };
20428
20429 const extglobOpen = (type, value) => {
20430 const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
20431
20432 token.prev = prev;
20433 token.parens = state.parens;
20434 token.output = state.output;
20435 const output = (opts.capture ? '(' : '') + token.open;
20436
20437 increment('parens');
20438 push({ type, value, output: state.output ? '' : ONE_CHAR });
20439 push({ type: 'paren', extglob: true, value: advance(), output });
20440 extglobs.push(token);
20441 };
20442
20443 const extglobClose = token => {
20444 let output = token.close + (opts.capture ? ')' : '');
20445
20446 if (token.type === 'negate') {
20447 let extglobStar = star;
20448
20449 if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
20450 extglobStar = globstar(opts);
20451 }
20452
20453 if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) {
20454 output = token.close = `)$))${extglobStar}`;
20455 }
20456
20457 if (token.prev.type === 'bos' && eos()) {
20458 state.negatedExtglob = true;
20459 }
20460 }
20461
20462 push({ type: 'paren', extglob: true, value, output });
20463 decrement('parens');
20464 };
20465
20466 /**
20467 * Fast paths
20468 */
20469
20470 if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
20471 let backslashes = false;
20472
20473 let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
20474 if (first === '\\') {
20475 backslashes = true;
20476 return m;
20477 }
20478
20479 if (first === '?') {
20480 if (esc) {
20481 return esc + first + (rest ? QMARK.repeat(rest.length) : '');
20482 }
20483 if (index === 0) {
20484 return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
20485 }
20486 return QMARK.repeat(chars.length);
20487 }
20488
20489 if (first === '.') {
20490 return DOT_LITERAL.repeat(chars.length);
20491 }
20492
20493 if (first === '*') {
20494 if (esc) {
20495 return esc + first + (rest ? star : '');
20496 }
20497 return star;
20498 }
20499 return esc ? m : `\\${m}`;
20500 });
20501
20502 if (backslashes === true) {
20503 if (opts.unescape === true) {
20504 output = output.replace(/\\/g, '');
20505 } else {
20506 output = output.replace(/\\+/g, m => {
20507 return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
20508 });
20509 }
20510 }
20511
20512 if (output === input && opts.contains === true) {
20513 state.output = input;
20514 return state;
20515 }
20516
20517 state.output = utils.wrapOutput(output, state, options);
20518 return state;
20519 }
20520
20521 /**
20522 * Tokenize input until we reach end-of-string
20523 */
20524
20525 while (!eos()) {
20526 value = advance();
20527
20528 if (value === '\u0000') {
20529 continue;
20530 }
20531
20532 /**
20533 * Escaped characters
20534 */
20535
20536 if (value === '\\') {
20537 const next = peek();
20538
20539 if (next === '/' && opts.bash !== true) {
20540 continue;
20541 }
20542
20543 if (next === '.' || next === ';') {
20544 continue;
20545 }
20546
20547 if (!next) {
20548 value += '\\';
20549 push({ type: 'text', value });
20550 continue;
20551 }
20552
20553 // collapse slashes to reduce potential for exploits
20554 const match = /^\\+/.exec(remaining());
20555 let slashes = 0;
20556
20557 if (match && match[0].length > 2) {
20558 slashes = match[0].length;
20559 state.index += slashes;
20560 if (slashes % 2 !== 0) {
20561 value += '\\';
20562 }
20563 }
20564
20565 if (opts.unescape === true) {
20566 value = advance() || '';
20567 } else {
20568 value += advance() || '';
20569 }
20570
20571 if (state.brackets === 0) {
20572 push({ type: 'text', value });
20573 continue;
20574 }
20575 }
20576
20577 /**
20578 * If we're inside a regex character class, continue
20579 * until we reach the closing bracket.
20580 */
20581
20582 if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
20583 if (opts.posix !== false && value === ':') {
20584 const inner = prev.value.slice(1);
20585 if (inner.includes('[')) {
20586 prev.posix = true;
20587
20588 if (inner.includes(':')) {
20589 const idx = prev.value.lastIndexOf('[');
20590 const pre = prev.value.slice(0, idx);
20591 const rest = prev.value.slice(idx + 2);
20592 const posix = POSIX_REGEX_SOURCE[rest];
20593 if (posix) {
20594 prev.value = pre + posix;
20595 state.backtrack = true;
20596 advance();
20597
20598 if (!bos.output && tokens.indexOf(prev) === 1) {
20599 bos.output = ONE_CHAR;
20600 }
20601 continue;
20602 }
20603 }
20604 }
20605 }
20606
20607 if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
20608 value = `\\${value}`;
20609 }
20610
20611 if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
20612 value = `\\${value}`;
20613 }
20614
20615 if (opts.posix === true && value === '!' && prev.value === '[') {
20616 value = '^';
20617 }
20618
20619 prev.value += value;
20620 append({ value });
20621 continue;
20622 }
20623
20624 /**
20625 * If we're inside a quoted string, continue
20626 * until we reach the closing double quote.
20627 */
20628
20629 if (state.quotes === 1 && value !== '"') {
20630 value = utils.escapeRegex(value);
20631 prev.value += value;
20632 append({ value });
20633 continue;
20634 }
20635
20636 /**
20637 * Double quotes
20638 */
20639
20640 if (value === '"') {
20641 state.quotes = state.quotes === 1 ? 0 : 1;
20642 if (opts.keepQuotes === true) {
20643 push({ type: 'text', value });
20644 }
20645 continue;
20646 }
20647
20648 /**
20649 * Parentheses
20650 */
20651
20652 if (value === '(') {
20653 increment('parens');
20654 push({ type: 'paren', value });
20655 continue;
20656 }
20657
20658 if (value === ')') {
20659 if (state.parens === 0 && opts.strictBrackets === true) {
20660 throw new SyntaxError(syntaxError('opening', '('));
20661 }
20662
20663 const extglob = extglobs[extglobs.length - 1];
20664 if (extglob && state.parens === extglob.parens + 1) {
20665 extglobClose(extglobs.pop());
20666 continue;
20667 }
20668
20669 push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
20670 decrement('parens');
20671 continue;
20672 }
20673
20674 /**
20675 * Square brackets
20676 */
20677
20678 if (value === '[') {
20679 if (opts.nobracket === true || !remaining().includes(']')) {
20680 if (opts.nobracket !== true && opts.strictBrackets === true) {
20681 throw new SyntaxError(syntaxError('closing', ']'));
20682 }
20683
20684 value = `\\${value}`;
20685 } else {
20686 increment('brackets');
20687 }
20688
20689 push({ type: 'bracket', value });
20690 continue;
20691 }
20692
20693 if (value === ']') {
20694 if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
20695 push({ type: 'text', value, output: `\\${value}` });
20696 continue;
20697 }
20698
20699 if (state.brackets === 0) {
20700 if (opts.strictBrackets === true) {
20701 throw new SyntaxError(syntaxError('opening', '['));
20702 }
20703
20704 push({ type: 'text', value, output: `\\${value}` });
20705 continue;
20706 }
20707
20708 decrement('brackets');
20709
20710 const prevValue = prev.value.slice(1);
20711 if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
20712 value = `/${value}`;
20713 }
20714
20715 prev.value += value;
20716 append({ value });
20717
20718 // when literal brackets are explicitly disabled
20719 // assume we should match with a regex character class
20720 if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
20721 continue;
20722 }
20723
20724 const escaped = utils.escapeRegex(prev.value);
20725 state.output = state.output.slice(0, -prev.value.length);
20726
20727 // when literal brackets are explicitly enabled
20728 // assume we should escape the brackets to match literal characters
20729 if (opts.literalBrackets === true) {
20730 state.output += escaped;
20731 prev.value = escaped;
20732 continue;
20733 }
20734
20735 // when the user specifies nothing, try to match both
20736 prev.value = `(${capture}${escaped}|${prev.value})`;
20737 state.output += prev.value;
20738 continue;
20739 }
20740
20741 /**
20742 * Braces
20743 */
20744
20745 if (value === '{' && opts.nobrace !== true) {
20746 increment('braces');
20747
20748 const open = {
20749 type: 'brace',
20750 value,
20751 output: '(',
20752 outputIndex: state.output.length,
20753 tokensIndex: state.tokens.length
20754 };
20755
20756 braces.push(open);
20757 push(open);
20758 continue;
20759 }
20760
20761 if (value === '}') {
20762 const brace = braces[braces.length - 1];
20763
20764 if (opts.nobrace === true || !brace) {
20765 push({ type: 'text', value, output: value });
20766 continue;
20767 }
20768
20769 let output = ')';
20770
20771 if (brace.dots === true) {
20772 const arr = tokens.slice();
20773 const range = [];
20774
20775 for (let i = arr.length - 1; i >= 0; i--) {
20776 tokens.pop();
20777 if (arr[i].type === 'brace') {
20778 break;
20779 }
20780 if (arr[i].type !== 'dots') {
20781 range.unshift(arr[i].value);
20782 }
20783 }
20784
20785 output = expandRange(range, opts);
20786 state.backtrack = true;
20787 }
20788
20789 if (brace.comma !== true && brace.dots !== true) {
20790 const out = state.output.slice(0, brace.outputIndex);
20791 const toks = state.tokens.slice(brace.tokensIndex);
20792 brace.value = brace.output = '\\{';
20793 value = output = '\\}';
20794 state.output = out;
20795 for (const t of toks) {
20796 state.output += (t.output || t.value);
20797 }
20798 }
20799
20800 push({ type: 'brace', value, output });
20801 decrement('braces');
20802 braces.pop();
20803 continue;
20804 }
20805
20806 /**
20807 * Pipes
20808 */
20809
20810 if (value === '|') {
20811 if (extglobs.length > 0) {
20812 extglobs[extglobs.length - 1].conditions++;
20813 }
20814 push({ type: 'text', value });
20815 continue;
20816 }
20817
20818 /**
20819 * Commas
20820 */
20821
20822 if (value === ',') {
20823 let output = value;
20824
20825 const brace = braces[braces.length - 1];
20826 if (brace && stack[stack.length - 1] === 'braces') {
20827 brace.comma = true;
20828 output = '|';
20829 }
20830
20831 push({ type: 'comma', value, output });
20832 continue;
20833 }
20834
20835 /**
20836 * Slashes
20837 */
20838
20839 if (value === '/') {
20840 // if the beginning of the glob is "./", advance the start
20841 // to the current index, and don't add the "./" characters
20842 // to the state. This greatly simplifies lookbehinds when
20843 // checking for BOS characters like "!" and "." (not "./")
20844 if (prev.type === 'dot' && state.index === state.start + 1) {
20845 state.start = state.index + 1;
20846 state.consumed = '';
20847 state.output = '';
20848 tokens.pop();
20849 prev = bos; // reset "prev" to the first token
20850 continue;
20851 }
20852
20853 push({ type: 'slash', value, output: SLASH_LITERAL });
20854 continue;
20855 }
20856
20857 /**
20858 * Dots
20859 */
20860
20861 if (value === '.') {
20862 if (state.braces > 0 && prev.type === 'dot') {
20863 if (prev.value === '.') prev.output = DOT_LITERAL;
20864 const brace = braces[braces.length - 1];
20865 prev.type = 'dots';
20866 prev.output += value;
20867 prev.value += value;
20868 brace.dots = true;
20869 continue;
20870 }
20871
20872 if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {
20873 push({ type: 'text', value, output: DOT_LITERAL });
20874 continue;
20875 }
20876
20877 push({ type: 'dot', value, output: DOT_LITERAL });
20878 continue;
20879 }
20880
20881 /**
20882 * Question marks
20883 */
20884
20885 if (value === '?') {
20886 const isGroup = prev && prev.value === '(';
20887 if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
20888 extglobOpen('qmark', value);
20889 continue;
20890 }
20891
20892 if (prev && prev.type === 'paren') {
20893 const next = peek();
20894 let output = value;
20895
20896 if (next === '<' && !utils.supportsLookbehinds()) {
20897 throw new Error('Node.js v10 or higher is required for regex lookbehinds');
20898 }
20899
20900 if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) {
20901 output = `\\${value}`;
20902 }
20903
20904 push({ type: 'text', value, output });
20905 continue;
20906 }
20907
20908 if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
20909 push({ type: 'qmark', value, output: QMARK_NO_DOT });
20910 continue;
20911 }
20912
20913 push({ type: 'qmark', value, output: QMARK });
20914 continue;
20915 }
20916
20917 /**
20918 * Exclamation
20919 */
20920
20921 if (value === '!') {
20922 if (opts.noextglob !== true && peek() === '(') {
20923 if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
20924 extglobOpen('negate', value);
20925 continue;
20926 }
20927 }
20928
20929 if (opts.nonegate !== true && state.index === 0) {
20930 negate();
20931 continue;
20932 }
20933 }
20934
20935 /**
20936 * Plus
20937 */
20938
20939 if (value === '+') {
20940 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
20941 extglobOpen('plus', value);
20942 continue;
20943 }
20944
20945 if ((prev && prev.value === '(') || opts.regex === false) {
20946 push({ type: 'plus', value, output: PLUS_LITERAL });
20947 continue;
20948 }
20949
20950 if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {
20951 push({ type: 'plus', value });
20952 continue;
20953 }
20954
20955 push({ type: 'plus', value: PLUS_LITERAL });
20956 continue;
20957 }
20958
20959 /**
20960 * Plain text
20961 */
20962
20963 if (value === '@') {
20964 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
20965 push({ type: 'at', extglob: true, value, output: '' });
20966 continue;
20967 }
20968
20969 push({ type: 'text', value });
20970 continue;
20971 }
20972
20973 /**
20974 * Plain text
20975 */
20976
20977 if (value !== '*') {
20978 if (value === '$' || value === '^') {
20979 value = `\\${value}`;
20980 }
20981
20982 const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
20983 if (match) {
20984 value += match[0];
20985 state.index += match[0].length;
20986 }
20987
20988 push({ type: 'text', value });
20989 continue;
20990 }
20991
20992 /**
20993 * Stars
20994 */
20995
20996 if (prev && (prev.type === 'globstar' || prev.star === true)) {
20997 prev.type = 'star';
20998 prev.star = true;
20999 prev.value += value;
21000 prev.output = star;
21001 state.backtrack = true;
21002 state.globstar = true;
21003 consume(value);
21004 continue;
21005 }
21006
21007 let rest = remaining();
21008 if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
21009 extglobOpen('star', value);
21010 continue;
21011 }
21012
21013 if (prev.type === 'star') {
21014 if (opts.noglobstar === true) {
21015 consume(value);
21016 continue;
21017 }
21018
21019 const prior = prev.prev;
21020 const before = prior.prev;
21021 const isStart = prior.type === 'slash' || prior.type === 'bos';
21022 const afterStar = before && (before.type === 'star' || before.type === 'globstar');
21023
21024 if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {
21025 push({ type: 'star', value, output: '' });
21026 continue;
21027 }
21028
21029 const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
21030 const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
21031 if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
21032 push({ type: 'star', value, output: '' });
21033 continue;
21034 }
21035
21036 // strip consecutive `/**/`
21037 while (rest.slice(0, 3) === '/**') {
21038 const after = input[state.index + 4];
21039 if (after && after !== '/') {
21040 break;
21041 }
21042 rest = rest.slice(3);
21043 consume('/**', 3);
21044 }
21045
21046 if (prior.type === 'bos' && eos()) {
21047 prev.type = 'globstar';
21048 prev.value += value;
21049 prev.output = globstar(opts);
21050 state.output = prev.output;
21051 state.globstar = true;
21052 consume(value);
21053 continue;
21054 }
21055
21056 if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
21057 state.output = state.output.slice(0, -(prior.output + prev.output).length);
21058 prior.output = `(?:${prior.output}`;
21059
21060 prev.type = 'globstar';
21061 prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');
21062 prev.value += value;
21063 state.globstar = true;
21064 state.output += prior.output + prev.output;
21065 consume(value);
21066 continue;
21067 }
21068
21069 if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {
21070 const end = rest[1] !== void 0 ? '|$' : '';
21071
21072 state.output = state.output.slice(0, -(prior.output + prev.output).length);
21073 prior.output = `(?:${prior.output}`;
21074
21075 prev.type = 'globstar';
21076 prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
21077 prev.value += value;
21078
21079 state.output += prior.output + prev.output;
21080 state.globstar = true;
21081
21082 consume(value + advance());
21083
21084 push({ type: 'slash', value: '/', output: '' });
21085 continue;
21086 }
21087
21088 if (prior.type === 'bos' && rest[0] === '/') {
21089 prev.type = 'globstar';
21090 prev.value += value;
21091 prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
21092 state.output = prev.output;
21093 state.globstar = true;
21094 consume(value + advance());
21095 push({ type: 'slash', value: '/', output: '' });
21096 continue;
21097 }
21098
21099 // remove single star from output
21100 state.output = state.output.slice(0, -prev.output.length);
21101
21102 // reset previous token to globstar
21103 prev.type = 'globstar';
21104 prev.output = globstar(opts);
21105 prev.value += value;
21106
21107 // reset output with globstar
21108 state.output += prev.output;
21109 state.globstar = true;
21110 consume(value);
21111 continue;
21112 }
21113
21114 const token = { type: 'star', value, output: star };
21115
21116 if (opts.bash === true) {
21117 token.output = '.*?';
21118 if (prev.type === 'bos' || prev.type === 'slash') {
21119 token.output = nodot + token.output;
21120 }
21121 push(token);
21122 continue;
21123 }
21124
21125 if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
21126 token.output = value;
21127 push(token);
21128 continue;
21129 }
21130
21131 if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
21132 if (prev.type === 'dot') {
21133 state.output += NO_DOT_SLASH;
21134 prev.output += NO_DOT_SLASH;
21135
21136 } else if (opts.dot === true) {
21137 state.output += NO_DOTS_SLASH;
21138 prev.output += NO_DOTS_SLASH;
21139
21140 } else {
21141 state.output += nodot;
21142 prev.output += nodot;
21143 }
21144
21145 if (peek() !== '*') {
21146 state.output += ONE_CHAR;
21147 prev.output += ONE_CHAR;
21148 }
21149 }
21150
21151 push(token);
21152 }
21153
21154 while (state.brackets > 0) {
21155 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
21156 state.output = utils.escapeLast(state.output, '[');
21157 decrement('brackets');
21158 }
21159
21160 while (state.parens > 0) {
21161 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
21162 state.output = utils.escapeLast(state.output, '(');
21163 decrement('parens');
21164 }
21165
21166 while (state.braces > 0) {
21167 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
21168 state.output = utils.escapeLast(state.output, '{');
21169 decrement('braces');
21170 }
21171
21172 if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
21173 push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
21174 }
21175
21176 // rebuild the output if we had to backtrack at any point
21177 if (state.backtrack === true) {
21178 state.output = '';
21179
21180 for (const token of state.tokens) {
21181 state.output += token.output != null ? token.output : token.value;
21182
21183 if (token.suffix) {
21184 state.output += token.suffix;
21185 }
21186 }
21187 }
21188
21189 return state;
21190};
21191
21192/**
21193 * Fast paths for creating regular expressions for common glob patterns.
21194 * This can significantly speed up processing and has very little downside
21195 * impact when none of the fast paths match.
21196 */
21197
21198parse.fastpaths = (input, options) => {
21199 const opts = { ...options };
21200 const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
21201 const len = input.length;
21202 if (len > max) {
21203 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
21204 }
21205
21206 input = REPLACEMENTS[input] || input;
21207 const win32 = utils.isWindows(options);
21208
21209 // create constants based on platform, for windows or posix
21210 const {
21211 DOT_LITERAL,
21212 SLASH_LITERAL,
21213 ONE_CHAR,
21214 DOTS_SLASH,
21215 NO_DOT,
21216 NO_DOTS,
21217 NO_DOTS_SLASH,
21218 STAR,
21219 START_ANCHOR
21220 } = constants.globChars(win32);
21221
21222 const nodot = opts.dot ? NO_DOTS : NO_DOT;
21223 const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
21224 const capture = opts.capture ? '' : '?:';
21225 const state = { negated: false, prefix: '' };
21226 let star = opts.bash === true ? '.*?' : STAR;
21227
21228 if (opts.capture) {
21229 star = `(${star})`;
21230 }
21231
21232 const globstar = (opts) => {
21233 if (opts.noglobstar === true) return star;
21234 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
21235 };
21236
21237 const create = str => {
21238 switch (str) {
21239 case '*':
21240 return `${nodot}${ONE_CHAR}${star}`;
21241
21242 case '.*':
21243 return `${DOT_LITERAL}${ONE_CHAR}${star}`;
21244
21245 case '*.*':
21246 return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
21247
21248 case '*/*':
21249 return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
21250
21251 case '**':
21252 return nodot + globstar(opts);
21253
21254 case '**/*':
21255 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
21256
21257 case '**/*.*':
21258 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
21259
21260 case '**/.*':
21261 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
21262
21263 default: {
21264 const match = /^(.*?)\.(\w+)$/.exec(str);
21265 if (!match) return;
21266
21267 const source = create(match[1]);
21268 if (!source) return;
21269
21270 return source + DOT_LITERAL + match[2];
21271 }
21272 }
21273 };
21274
21275 const output = utils.removePrefix(input, state);
21276 let source = create(output);
21277
21278 if (source && opts.strictSlashes !== true) {
21279 source += `${SLASH_LITERAL}?`;
21280 }
21281
21282 return source;
21283};
21284
21285module.exports = parse;
21286
21287
21288/***/ }),
21289/* 93 */
21290/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
21291
21292"use strict";
21293
21294Object.defineProperty(exports, "__esModule", ({ value: true }));
21295exports.merge = void 0;
21296const merge2 = __webpack_require__(94);
21297function merge(streams) {
21298 const mergedStream = merge2(streams);
21299 streams.forEach((stream) => {
21300 stream.once('error', (error) => mergedStream.emit('error', error));
21301 });
21302 mergedStream.once('close', () => propagateCloseEventToSources(streams));
21303 mergedStream.once('end', () => propagateCloseEventToSources(streams));
21304 return mergedStream;
21305}
21306exports.merge = merge;
21307function propagateCloseEventToSources(streams) {
21308 streams.forEach((stream) => stream.emit('close'));
21309}
21310
21311
21312/***/ }),
21313/* 94 */
21314/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
21315
21316"use strict";
21317
21318/*
21319 * merge2
21320 * https://github.com/teambition/merge2
21321 *
21322 * Copyright (c) 2014-2016 Teambition
21323 * Licensed under the MIT license.
21324 */
21325const Stream = __webpack_require__(95)
21326const PassThrough = Stream.PassThrough
21327const slice = Array.prototype.slice
21328
21329module.exports = merge2
21330
21331function merge2 () {
21332 const streamsQueue = []
21333 let merging = false
21334 const args = slice.call(arguments)
21335 let options = args[args.length - 1]
21336
21337 if (options && !Array.isArray(options) && options.pipe == null) args.pop()
21338 else options = {}
21339
21340 const doEnd = options.end !== false
21341 if (options.objectMode == null) options.objectMode = true
21342 if (options.highWaterMark == null) options.highWaterMark = 64 * 1024
21343 const mergedStream = PassThrough(options)
21344
21345 function addStream () {
21346 for (let i = 0, len = arguments.length; i < len; i++) {
21347 streamsQueue.push(pauseStreams(arguments[i], options))
21348 }
21349 mergeStream()
21350 return this
21351 }
21352
21353 function mergeStream () {
21354 if (merging) return
21355 merging = true
21356
21357 let streams = streamsQueue.shift()
21358 if (!streams) {
21359 process.nextTick(endStream)
21360 return
21361 }
21362 if (!Array.isArray(streams)) streams = [streams]
21363
21364 let pipesCount = streams.length + 1
21365
21366 function next () {
21367 if (--pipesCount > 0) return
21368 merging = false
21369 mergeStream()
21370 }
21371
21372 function pipe (stream) {
21373 function onend () {
21374 stream.removeListener('merge2UnpipeEnd', onend)
21375 stream.removeListener('end', onend)
21376 next()
21377 }
21378 // skip ended stream
21379 if (stream._readableState.endEmitted) return next()
21380
21381 stream.on('merge2UnpipeEnd', onend)
21382 stream.on('end', onend)
21383 stream.pipe(mergedStream, { end: false })
21384 // compatible for old stream
21385 stream.resume()
21386 }
21387
21388 for (let i = 0; i < streams.length; i++) pipe(streams[i])
21389
21390 next()
21391 }
21392
21393 function endStream () {
21394 merging = false
21395 // emit 'queueDrain' when all streams merged.
21396 mergedStream.emit('queueDrain')
21397 return doEnd && mergedStream.end()
21398 }
21399
21400 mergedStream.setMaxListeners(0)
21401 mergedStream.add = addStream
21402 mergedStream.on('unpipe', function (stream) {
21403 stream.emit('merge2UnpipeEnd')
21404 })
21405
21406 if (args.length) addStream.apply(null, args)
21407 return mergedStream
21408}
21409
21410// check and pause streams for pipe.
21411function pauseStreams (streams, options) {
21412 if (!Array.isArray(streams)) {
21413 // Backwards-compat with old-style streams
21414 if (!streams._readableState && streams.pipe) streams = streams.pipe(PassThrough(options))
21415 if (!streams._readableState || !streams.pause || !streams.pipe) {
21416 throw new Error('Only readable stream can be merged.')
21417 }
21418 streams.pause()
21419 } else {
21420 for (let i = 0, len = streams.length; i < len; i++) streams[i] = pauseStreams(streams[i], options)
21421 }
21422 return streams
21423}
21424
21425
21426/***/ }),
21427/* 95 */
21428/***/ ((module) => {
21429
21430"use strict";
21431module.exports = require("stream");;
21432
21433/***/ }),
21434/* 96 */
21435/***/ ((__unused_webpack_module, exports) => {
21436
21437"use strict";
21438
21439Object.defineProperty(exports, "__esModule", ({ value: true }));
21440exports.isEmpty = exports.isString = void 0;
21441function isString(input) {
21442 return typeof input === 'string';
21443}
21444exports.isString = isString;
21445function isEmpty(input) {
21446 return input === '';
21447}
21448exports.isEmpty = isEmpty;
21449
21450
21451/***/ }),
21452/* 97 */
21453/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
21454
21455"use strict";
21456
21457Object.defineProperty(exports, "__esModule", ({ value: true }));
21458const stream_1 = __webpack_require__(98);
21459const provider_1 = __webpack_require__(125);
21460class ProviderAsync extends provider_1.default {
21461 constructor() {
21462 super(...arguments);
21463 this._reader = new stream_1.default(this._settings);
21464 }
21465 read(task) {
21466 const root = this._getRootDirectory(task);
21467 const options = this._getReaderOptions(task);
21468 const entries = [];
21469 return new Promise((resolve, reject) => {
21470 const stream = this.api(root, task, options);
21471 stream.once('error', reject);
21472 stream.on('data', (entry) => entries.push(options.transform(entry)));
21473 stream.once('end', () => resolve(entries));
21474 });
21475 }
21476 api(root, task, options) {
21477 if (task.dynamic) {
21478 return this._reader.dynamic(root, options);
21479 }
21480 return this._reader.static(task.patterns, options);
21481 }
21482}
21483exports.default = ProviderAsync;
21484
21485
21486/***/ }),
21487/* 98 */
21488/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
21489
21490"use strict";
21491
21492Object.defineProperty(exports, "__esModule", ({ value: true }));
21493const stream_1 = __webpack_require__(95);
21494const fsStat = __webpack_require__(99);
21495const fsWalk = __webpack_require__(104);
21496const reader_1 = __webpack_require__(124);
21497class ReaderStream extends reader_1.default {
21498 constructor() {
21499 super(...arguments);
21500 this._walkStream = fsWalk.walkStream;
21501 this._stat = fsStat.stat;
21502 }
21503 dynamic(root, options) {
21504 return this._walkStream(root, options);
21505 }
21506 static(patterns, options) {
21507 const filepaths = patterns.map(this._getFullEntryPath, this);
21508 const stream = new stream_1.PassThrough({ objectMode: true });
21509 stream._write = (index, _enc, done) => {
21510 return this._getEntry(filepaths[index], patterns[index], options)
21511 .then((entry) => {
21512 if (entry !== null && options.entryFilter(entry)) {
21513 stream.push(entry);
21514 }
21515 if (index === filepaths.length - 1) {
21516 stream.end();
21517 }
21518 done();
21519 })
21520 .catch(done);
21521 };
21522 for (let i = 0; i < filepaths.length; i++) {
21523 stream.write(i);
21524 }
21525 return stream;
21526 }
21527 _getEntry(filepath, pattern, options) {
21528 return this._getStat(filepath)
21529 .then((stats) => this._makeEntry(stats, pattern))
21530 .catch((error) => {
21531 if (options.errorFilter(error)) {
21532 return null;
21533 }
21534 throw error;
21535 });
21536 }
21537 _getStat(filepath) {
21538 return new Promise((resolve, reject) => {
21539 this._stat(filepath, this._fsStatSettings, (error, stats) => {
21540 return error === null ? resolve(stats) : reject(error);
21541 });
21542 });
21543 }
21544}
21545exports.default = ReaderStream;
21546
21547
21548/***/ }),
21549/* 99 */
21550/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
21551
21552"use strict";
21553
21554Object.defineProperty(exports, "__esModule", ({ value: true }));
21555const async = __webpack_require__(100);
21556const sync = __webpack_require__(101);
21557const settings_1 = __webpack_require__(102);
21558exports.Settings = settings_1.default;
21559function stat(path, optionsOrSettingsOrCallback, callback) {
21560 if (typeof optionsOrSettingsOrCallback === 'function') {
21561 return async.read(path, getSettings(), optionsOrSettingsOrCallback);
21562 }
21563 async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
21564}
21565exports.stat = stat;
21566function statSync(path, optionsOrSettings) {
21567 const settings = getSettings(optionsOrSettings);
21568 return sync.read(path, settings);
21569}
21570exports.statSync = statSync;
21571function getSettings(settingsOrOptions = {}) {
21572 if (settingsOrOptions instanceof settings_1.default) {
21573 return settingsOrOptions;
21574 }
21575 return new settings_1.default(settingsOrOptions);
21576}
21577
21578
21579/***/ }),
21580/* 100 */
21581/***/ ((__unused_webpack_module, exports) => {
21582
21583"use strict";
21584
21585Object.defineProperty(exports, "__esModule", ({ value: true }));
21586function read(path, settings, callback) {
21587 settings.fs.lstat(path, (lstatError, lstat) => {
21588 if (lstatError !== null) {
21589 return callFailureCallback(callback, lstatError);
21590 }
21591 if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
21592 return callSuccessCallback(callback, lstat);
21593 }
21594 settings.fs.stat(path, (statError, stat) => {
21595 if (statError !== null) {
21596 if (settings.throwErrorOnBrokenSymbolicLink) {
21597 return callFailureCallback(callback, statError);
21598 }
21599 return callSuccessCallback(callback, lstat);
21600 }
21601 if (settings.markSymbolicLink) {
21602 stat.isSymbolicLink = () => true;
21603 }
21604 callSuccessCallback(callback, stat);
21605 });
21606 });
21607}
21608exports.read = read;
21609function callFailureCallback(callback, error) {
21610 callback(error);
21611}
21612function callSuccessCallback(callback, result) {
21613 callback(null, result);
21614}
21615
21616
21617/***/ }),
21618/* 101 */
21619/***/ ((__unused_webpack_module, exports) => {
21620
21621"use strict";
21622
21623Object.defineProperty(exports, "__esModule", ({ value: true }));
21624function read(path, settings) {
21625 const lstat = settings.fs.lstatSync(path);
21626 if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
21627 return lstat;
21628 }
21629 try {
21630 const stat = settings.fs.statSync(path);
21631 if (settings.markSymbolicLink) {
21632 stat.isSymbolicLink = () => true;
21633 }
21634 return stat;
21635 }
21636 catch (error) {
21637 if (!settings.throwErrorOnBrokenSymbolicLink) {
21638 return lstat;
21639 }
21640 throw error;
21641 }
21642}
21643exports.read = read;
21644
21645
21646/***/ }),
21647/* 102 */
21648/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
21649
21650"use strict";
21651
21652Object.defineProperty(exports, "__esModule", ({ value: true }));
21653const fs = __webpack_require__(103);
21654class Settings {
21655 constructor(_options = {}) {
21656 this._options = _options;
21657 this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);
21658 this.fs = fs.createFileSystemAdapter(this._options.fs);
21659 this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);
21660 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
21661 }
21662 _getValue(option, value) {
21663 return option === undefined ? value : option;
21664 }
21665}
21666exports.default = Settings;
21667
21668
21669/***/ }),
21670/* 103 */
21671/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
21672
21673"use strict";
21674
21675Object.defineProperty(exports, "__esModule", ({ value: true }));
21676const fs = __webpack_require__(40);
21677exports.FILE_SYSTEM_ADAPTER = {
21678 lstat: fs.lstat,
21679 stat: fs.stat,
21680 lstatSync: fs.lstatSync,
21681 statSync: fs.statSync
21682};
21683function createFileSystemAdapter(fsMethods) {
21684 if (fsMethods === undefined) {
21685 return exports.FILE_SYSTEM_ADAPTER;
21686 }
21687 return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
21688}
21689exports.createFileSystemAdapter = createFileSystemAdapter;
21690
21691
21692/***/ }),
21693/* 104 */
21694/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
21695
21696"use strict";
21697
21698Object.defineProperty(exports, "__esModule", ({ value: true }));
21699const async_1 = __webpack_require__(105);
21700const stream_1 = __webpack_require__(120);
21701const sync_1 = __webpack_require__(121);
21702const settings_1 = __webpack_require__(123);
21703exports.Settings = settings_1.default;
21704function walk(directory, optionsOrSettingsOrCallback, callback) {
21705 if (typeof optionsOrSettingsOrCallback === 'function') {
21706 return new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);
21707 }
21708 new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);
21709}
21710exports.walk = walk;
21711function walkSync(directory, optionsOrSettings) {
21712 const settings = getSettings(optionsOrSettings);
21713 const provider = new sync_1.default(directory, settings);
21714 return provider.read();
21715}
21716exports.walkSync = walkSync;
21717function walkStream(directory, optionsOrSettings) {
21718 const settings = getSettings(optionsOrSettings);
21719 const provider = new stream_1.default(directory, settings);
21720 return provider.read();
21721}
21722exports.walkStream = walkStream;
21723function getSettings(settingsOrOptions = {}) {
21724 if (settingsOrOptions instanceof settings_1.default) {
21725 return settingsOrOptions;
21726 }
21727 return new settings_1.default(settingsOrOptions);
21728}
21729
21730
21731/***/ }),
21732/* 105 */
21733/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
21734
21735"use strict";
21736
21737Object.defineProperty(exports, "__esModule", ({ value: true }));
21738const async_1 = __webpack_require__(106);
21739class AsyncProvider {
21740 constructor(_root, _settings) {
21741 this._root = _root;
21742 this._settings = _settings;
21743 this._reader = new async_1.default(this._root, this._settings);
21744 this._storage = new Set();
21745 }
21746 read(callback) {
21747 this._reader.onError((error) => {
21748 callFailureCallback(callback, error);
21749 });
21750 this._reader.onEntry((entry) => {
21751 this._storage.add(entry);
21752 });
21753 this._reader.onEnd(() => {
21754 callSuccessCallback(callback, [...this._storage]);
21755 });
21756 this._reader.read();
21757 }
21758}
21759exports.default = AsyncProvider;
21760function callFailureCallback(callback, error) {
21761 callback(error);
21762}
21763function callSuccessCallback(callback, entries) {
21764 callback(null, entries);
21765}
21766
21767
21768/***/ }),
21769/* 106 */
21770/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
21771
21772"use strict";
21773
21774Object.defineProperty(exports, "__esModule", ({ value: true }));
21775const events_1 = __webpack_require__(51);
21776const fsScandir = __webpack_require__(107);
21777const fastq = __webpack_require__(116);
21778const common = __webpack_require__(118);
21779const reader_1 = __webpack_require__(119);
21780class AsyncReader extends reader_1.default {
21781 constructor(_root, _settings) {
21782 super(_root, _settings);
21783 this._settings = _settings;
21784 this._scandir = fsScandir.scandir;
21785 this._emitter = new events_1.EventEmitter();
21786 this._queue = fastq(this._worker.bind(this), this._settings.concurrency);
21787 this._isFatalError = false;
21788 this._isDestroyed = false;
21789 this._queue.drain = () => {
21790 if (!this._isFatalError) {
21791 this._emitter.emit('end');
21792 }
21793 };
21794 }
21795 read() {
21796 this._isFatalError = false;
21797 this._isDestroyed = false;
21798 setImmediate(() => {
21799 this._pushToQueue(this._root, this._settings.basePath);
21800 });
21801 return this._emitter;
21802 }
21803 destroy() {
21804 if (this._isDestroyed) {
21805 throw new Error('The reader is already destroyed');
21806 }
21807 this._isDestroyed = true;
21808 this._queue.killAndDrain();
21809 }
21810 onEntry(callback) {
21811 this._emitter.on('entry', callback);
21812 }
21813 onError(callback) {
21814 this._emitter.once('error', callback);
21815 }
21816 onEnd(callback) {
21817 this._emitter.once('end', callback);
21818 }
21819 _pushToQueue(directory, base) {
21820 const queueItem = { directory, base };
21821 this._queue.push(queueItem, (error) => {
21822 if (error !== null) {
21823 this._handleError(error);
21824 }
21825 });
21826 }
21827 _worker(item, done) {
21828 this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {
21829 if (error !== null) {
21830 return done(error, undefined);
21831 }
21832 for (const entry of entries) {
21833 this._handleEntry(entry, item.base);
21834 }
21835 done(null, undefined);
21836 });
21837 }
21838 _handleError(error) {
21839 if (!common.isFatalError(this._settings, error)) {
21840 return;
21841 }
21842 this._isFatalError = true;
21843 this._isDestroyed = true;
21844 this._emitter.emit('error', error);
21845 }
21846 _handleEntry(entry, base) {
21847 if (this._isDestroyed || this._isFatalError) {
21848 return;
21849 }
21850 const fullpath = entry.path;
21851 if (base !== undefined) {
21852 entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
21853 }
21854 if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
21855 this._emitEntry(entry);
21856 }
21857 if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
21858 this._pushToQueue(fullpath, entry.path);
21859 }
21860 }
21861 _emitEntry(entry) {
21862 this._emitter.emit('entry', entry);
21863 }
21864}
21865exports.default = AsyncReader;
21866
21867
21868/***/ }),
21869/* 107 */
21870/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
21871
21872"use strict";
21873
21874Object.defineProperty(exports, "__esModule", ({ value: true }));
21875const async = __webpack_require__(108);
21876const sync = __webpack_require__(113);
21877const settings_1 = __webpack_require__(114);
21878exports.Settings = settings_1.default;
21879function scandir(path, optionsOrSettingsOrCallback, callback) {
21880 if (typeof optionsOrSettingsOrCallback === 'function') {
21881 return async.read(path, getSettings(), optionsOrSettingsOrCallback);
21882 }
21883 async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
21884}
21885exports.scandir = scandir;
21886function scandirSync(path, optionsOrSettings) {
21887 const settings = getSettings(optionsOrSettings);
21888 return sync.read(path, settings);
21889}
21890exports.scandirSync = scandirSync;
21891function getSettings(settingsOrOptions = {}) {
21892 if (settingsOrOptions instanceof settings_1.default) {
21893 return settingsOrOptions;
21894 }
21895 return new settings_1.default(settingsOrOptions);
21896}
21897
21898
21899/***/ }),
21900/* 108 */
21901/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
21902
21903"use strict";
21904
21905Object.defineProperty(exports, "__esModule", ({ value: true }));
21906const fsStat = __webpack_require__(99);
21907const rpl = __webpack_require__(109);
21908const constants_1 = __webpack_require__(110);
21909const utils = __webpack_require__(111);
21910function read(directory, settings, callback) {
21911 if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
21912 return readdirWithFileTypes(directory, settings, callback);
21913 }
21914 return readdir(directory, settings, callback);
21915}
21916exports.read = read;
21917function readdirWithFileTypes(directory, settings, callback) {
21918 settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {
21919 if (readdirError !== null) {
21920 return callFailureCallback(callback, readdirError);
21921 }
21922 const entries = dirents.map((dirent) => ({
21923 dirent,
21924 name: dirent.name,
21925 path: `${directory}${settings.pathSegmentSeparator}${dirent.name}`
21926 }));
21927 if (!settings.followSymbolicLinks) {
21928 return callSuccessCallback(callback, entries);
21929 }
21930 const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));
21931 rpl(tasks, (rplError, rplEntries) => {
21932 if (rplError !== null) {
21933 return callFailureCallback(callback, rplError);
21934 }
21935 callSuccessCallback(callback, rplEntries);
21936 });
21937 });
21938}
21939exports.readdirWithFileTypes = readdirWithFileTypes;
21940function makeRplTaskEntry(entry, settings) {
21941 return (done) => {
21942 if (!entry.dirent.isSymbolicLink()) {
21943 return done(null, entry);
21944 }
21945 settings.fs.stat(entry.path, (statError, stats) => {
21946 if (statError !== null) {
21947 if (settings.throwErrorOnBrokenSymbolicLink) {
21948 return done(statError);
21949 }
21950 return done(null, entry);
21951 }
21952 entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
21953 return done(null, entry);
21954 });
21955 };
21956}
21957function readdir(directory, settings, callback) {
21958 settings.fs.readdir(directory, (readdirError, names) => {
21959 if (readdirError !== null) {
21960 return callFailureCallback(callback, readdirError);
21961 }
21962 const filepaths = names.map((name) => `${directory}${settings.pathSegmentSeparator}${name}`);
21963 const tasks = filepaths.map((filepath) => {
21964 return (done) => fsStat.stat(filepath, settings.fsStatSettings, done);
21965 });
21966 rpl(tasks, (rplError, results) => {
21967 if (rplError !== null) {
21968 return callFailureCallback(callback, rplError);
21969 }
21970 const entries = [];
21971 names.forEach((name, index) => {
21972 const stats = results[index];
21973 const entry = {
21974 name,
21975 path: filepaths[index],
21976 dirent: utils.fs.createDirentFromStats(name, stats)
21977 };
21978 if (settings.stats) {
21979 entry.stats = stats;
21980 }
21981 entries.push(entry);
21982 });
21983 callSuccessCallback(callback, entries);
21984 });
21985 });
21986}
21987exports.readdir = readdir;
21988function callFailureCallback(callback, error) {
21989 callback(error);
21990}
21991function callSuccessCallback(callback, result) {
21992 callback(null, result);
21993}
21994
21995
21996/***/ }),
21997/* 109 */
21998/***/ ((module) => {
21999
22000module.exports = runParallel
22001
22002function runParallel (tasks, cb) {
22003 var results, pending, keys
22004 var isSync = true
22005
22006 if (Array.isArray(tasks)) {
22007 results = []
22008 pending = tasks.length
22009 } else {
22010 keys = Object.keys(tasks)
22011 results = {}
22012 pending = keys.length
22013 }
22014
22015 function done (err) {
22016 function end () {
22017 if (cb) cb(err, results)
22018 cb = null
22019 }
22020 if (isSync) process.nextTick(end)
22021 else end()
22022 }
22023
22024 function each (i, err, result) {
22025 results[i] = result
22026 if (--pending === 0 || err) {
22027 done(err)
22028 }
22029 }
22030
22031 if (!pending) {
22032 // empty
22033 done(null)
22034 } else if (keys) {
22035 // object
22036 keys.forEach(function (key) {
22037 tasks[key](function (err, result) { each(key, err, result) })
22038 })
22039 } else {
22040 // array
22041 tasks.forEach(function (task, i) {
22042 task(function (err, result) { each(i, err, result) })
22043 })
22044 }
22045
22046 isSync = false
22047}
22048
22049
22050/***/ }),
22051/* 110 */
22052/***/ ((__unused_webpack_module, exports) => {
22053
22054"use strict";
22055
22056Object.defineProperty(exports, "__esModule", ({ value: true }));
22057const NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');
22058const MAJOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);
22059const MINOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);
22060const SUPPORTED_MAJOR_VERSION = 10;
22061const SUPPORTED_MINOR_VERSION = 10;
22062const IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;
22063const IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;
22064/**
22065 * IS `true` for Node.js 10.10 and greater.
22066 */
22067exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;
22068
22069
22070/***/ }),
22071/* 111 */
22072/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22073
22074"use strict";
22075
22076Object.defineProperty(exports, "__esModule", ({ value: true }));
22077const fs = __webpack_require__(112);
22078exports.fs = fs;
22079
22080
22081/***/ }),
22082/* 112 */
22083/***/ ((__unused_webpack_module, exports) => {
22084
22085"use strict";
22086
22087Object.defineProperty(exports, "__esModule", ({ value: true }));
22088class DirentFromStats {
22089 constructor(name, stats) {
22090 this.name = name;
22091 this.isBlockDevice = stats.isBlockDevice.bind(stats);
22092 this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
22093 this.isDirectory = stats.isDirectory.bind(stats);
22094 this.isFIFO = stats.isFIFO.bind(stats);
22095 this.isFile = stats.isFile.bind(stats);
22096 this.isSocket = stats.isSocket.bind(stats);
22097 this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
22098 }
22099}
22100function createDirentFromStats(name, stats) {
22101 return new DirentFromStats(name, stats);
22102}
22103exports.createDirentFromStats = createDirentFromStats;
22104
22105
22106/***/ }),
22107/* 113 */
22108/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22109
22110"use strict";
22111
22112Object.defineProperty(exports, "__esModule", ({ value: true }));
22113const fsStat = __webpack_require__(99);
22114const constants_1 = __webpack_require__(110);
22115const utils = __webpack_require__(111);
22116function read(directory, settings) {
22117 if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
22118 return readdirWithFileTypes(directory, settings);
22119 }
22120 return readdir(directory, settings);
22121}
22122exports.read = read;
22123function readdirWithFileTypes(directory, settings) {
22124 const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });
22125 return dirents.map((dirent) => {
22126 const entry = {
22127 dirent,
22128 name: dirent.name,
22129 path: `${directory}${settings.pathSegmentSeparator}${dirent.name}`
22130 };
22131 if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {
22132 try {
22133 const stats = settings.fs.statSync(entry.path);
22134 entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
22135 }
22136 catch (error) {
22137 if (settings.throwErrorOnBrokenSymbolicLink) {
22138 throw error;
22139 }
22140 }
22141 }
22142 return entry;
22143 });
22144}
22145exports.readdirWithFileTypes = readdirWithFileTypes;
22146function readdir(directory, settings) {
22147 const names = settings.fs.readdirSync(directory);
22148 return names.map((name) => {
22149 const entryPath = `${directory}${settings.pathSegmentSeparator}${name}`;
22150 const stats = fsStat.statSync(entryPath, settings.fsStatSettings);
22151 const entry = {
22152 name,
22153 path: entryPath,
22154 dirent: utils.fs.createDirentFromStats(name, stats)
22155 };
22156 if (settings.stats) {
22157 entry.stats = stats;
22158 }
22159 return entry;
22160 });
22161}
22162exports.readdir = readdir;
22163
22164
22165/***/ }),
22166/* 114 */
22167/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22168
22169"use strict";
22170
22171Object.defineProperty(exports, "__esModule", ({ value: true }));
22172const path = __webpack_require__(13);
22173const fsStat = __webpack_require__(99);
22174const fs = __webpack_require__(115);
22175class Settings {
22176 constructor(_options = {}) {
22177 this._options = _options;
22178 this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
22179 this.fs = fs.createFileSystemAdapter(this._options.fs);
22180 this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
22181 this.stats = this._getValue(this._options.stats, false);
22182 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
22183 this.fsStatSettings = new fsStat.Settings({
22184 followSymbolicLink: this.followSymbolicLinks,
22185 fs: this.fs,
22186 throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink
22187 });
22188 }
22189 _getValue(option, value) {
22190 return option === undefined ? value : option;
22191 }
22192}
22193exports.default = Settings;
22194
22195
22196/***/ }),
22197/* 115 */
22198/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22199
22200"use strict";
22201
22202Object.defineProperty(exports, "__esModule", ({ value: true }));
22203const fs = __webpack_require__(40);
22204exports.FILE_SYSTEM_ADAPTER = {
22205 lstat: fs.lstat,
22206 stat: fs.stat,
22207 lstatSync: fs.lstatSync,
22208 statSync: fs.statSync,
22209 readdir: fs.readdir,
22210 readdirSync: fs.readdirSync
22211};
22212function createFileSystemAdapter(fsMethods) {
22213 if (fsMethods === undefined) {
22214 return exports.FILE_SYSTEM_ADAPTER;
22215 }
22216 return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
22217}
22218exports.createFileSystemAdapter = createFileSystemAdapter;
22219
22220
22221/***/ }),
22222/* 116 */
22223/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
22224
22225"use strict";
22226
22227
22228var reusify = __webpack_require__(117)
22229
22230function fastqueue (context, worker, concurrency) {
22231 if (typeof context === 'function') {
22232 concurrency = worker
22233 worker = context
22234 context = null
22235 }
22236
22237 var cache = reusify(Task)
22238 var queueHead = null
22239 var queueTail = null
22240 var _running = 0
22241
22242 var self = {
22243 push: push,
22244 drain: noop,
22245 saturated: noop,
22246 pause: pause,
22247 paused: false,
22248 concurrency: concurrency,
22249 running: running,
22250 resume: resume,
22251 idle: idle,
22252 length: length,
22253 unshift: unshift,
22254 empty: noop,
22255 kill: kill,
22256 killAndDrain: killAndDrain
22257 }
22258
22259 return self
22260
22261 function running () {
22262 return _running
22263 }
22264
22265 function pause () {
22266 self.paused = true
22267 }
22268
22269 function length () {
22270 var current = queueHead
22271 var counter = 0
22272
22273 while (current) {
22274 current = current.next
22275 counter++
22276 }
22277
22278 return counter
22279 }
22280
22281 function resume () {
22282 if (!self.paused) return
22283 self.paused = false
22284 for (var i = 0; i < self.concurrency; i++) {
22285 _running++
22286 release()
22287 }
22288 }
22289
22290 function idle () {
22291 return _running === 0 && self.length() === 0
22292 }
22293
22294 function push (value, done) {
22295 var current = cache.get()
22296
22297 current.context = context
22298 current.release = release
22299 current.value = value
22300 current.callback = done || noop
22301
22302 if (_running === self.concurrency || self.paused) {
22303 if (queueTail) {
22304 queueTail.next = current
22305 queueTail = current
22306 } else {
22307 queueHead = current
22308 queueTail = current
22309 self.saturated()
22310 }
22311 } else {
22312 _running++
22313 worker.call(context, current.value, current.worked)
22314 }
22315 }
22316
22317 function unshift (value, done) {
22318 var current = cache.get()
22319
22320 current.context = context
22321 current.release = release
22322 current.value = value
22323 current.callback = done || noop
22324
22325 if (_running === self.concurrency || self.paused) {
22326 if (queueHead) {
22327 current.next = queueHead
22328 queueHead = current
22329 } else {
22330 queueHead = current
22331 queueTail = current
22332 self.saturated()
22333 }
22334 } else {
22335 _running++
22336 worker.call(context, current.value, current.worked)
22337 }
22338 }
22339
22340 function release (holder) {
22341 if (holder) {
22342 cache.release(holder)
22343 }
22344 var next = queueHead
22345 if (next) {
22346 if (!self.paused) {
22347 if (queueTail === queueHead) {
22348 queueTail = null
22349 }
22350 queueHead = next.next
22351 next.next = null
22352 worker.call(context, next.value, next.worked)
22353 if (queueTail === null) {
22354 self.empty()
22355 }
22356 } else {
22357 _running--
22358 }
22359 } else if (--_running === 0) {
22360 self.drain()
22361 }
22362 }
22363
22364 function kill () {
22365 queueHead = null
22366 queueTail = null
22367 self.drain = noop
22368 }
22369
22370 function killAndDrain () {
22371 queueHead = null
22372 queueTail = null
22373 self.drain()
22374 self.drain = noop
22375 }
22376}
22377
22378function noop () {}
22379
22380function Task () {
22381 this.value = null
22382 this.callback = noop
22383 this.next = null
22384 this.release = noop
22385 this.context = null
22386
22387 var self = this
22388
22389 this.worked = function worked (err, result) {
22390 var callback = self.callback
22391 self.value = null
22392 self.callback = noop
22393 callback.call(self.context, err, result)
22394 self.release(self)
22395 }
22396}
22397
22398module.exports = fastqueue
22399
22400
22401/***/ }),
22402/* 117 */
22403/***/ ((module) => {
22404
22405"use strict";
22406
22407
22408function reusify (Constructor) {
22409 var head = new Constructor()
22410 var tail = head
22411
22412 function get () {
22413 var current = head
22414
22415 if (current.next) {
22416 head = current.next
22417 } else {
22418 head = new Constructor()
22419 tail = head
22420 }
22421
22422 current.next = null
22423
22424 return current
22425 }
22426
22427 function release (obj) {
22428 tail.next = obj
22429 tail = obj
22430 }
22431
22432 return {
22433 get: get,
22434 release: release
22435 }
22436}
22437
22438module.exports = reusify
22439
22440
22441/***/ }),
22442/* 118 */
22443/***/ ((__unused_webpack_module, exports) => {
22444
22445"use strict";
22446
22447Object.defineProperty(exports, "__esModule", ({ value: true }));
22448function isFatalError(settings, error) {
22449 if (settings.errorFilter === null) {
22450 return true;
22451 }
22452 return !settings.errorFilter(error);
22453}
22454exports.isFatalError = isFatalError;
22455function isAppliedFilter(filter, value) {
22456 return filter === null || filter(value);
22457}
22458exports.isAppliedFilter = isAppliedFilter;
22459function replacePathSegmentSeparator(filepath, separator) {
22460 return filepath.split(/[\\/]/).join(separator);
22461}
22462exports.replacePathSegmentSeparator = replacePathSegmentSeparator;
22463function joinPathSegments(a, b, separator) {
22464 if (a === '') {
22465 return b;
22466 }
22467 return a + separator + b;
22468}
22469exports.joinPathSegments = joinPathSegments;
22470
22471
22472/***/ }),
22473/* 119 */
22474/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22475
22476"use strict";
22477
22478Object.defineProperty(exports, "__esModule", ({ value: true }));
22479const common = __webpack_require__(118);
22480class Reader {
22481 constructor(_root, _settings) {
22482 this._root = _root;
22483 this._settings = _settings;
22484 this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);
22485 }
22486}
22487exports.default = Reader;
22488
22489
22490/***/ }),
22491/* 120 */
22492/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22493
22494"use strict";
22495
22496Object.defineProperty(exports, "__esModule", ({ value: true }));
22497const stream_1 = __webpack_require__(95);
22498const async_1 = __webpack_require__(106);
22499class StreamProvider {
22500 constructor(_root, _settings) {
22501 this._root = _root;
22502 this._settings = _settings;
22503 this._reader = new async_1.default(this._root, this._settings);
22504 this._stream = new stream_1.Readable({
22505 objectMode: true,
22506 read: () => { },
22507 destroy: this._reader.destroy.bind(this._reader)
22508 });
22509 }
22510 read() {
22511 this._reader.onError((error) => {
22512 this._stream.emit('error', error);
22513 });
22514 this._reader.onEntry((entry) => {
22515 this._stream.push(entry);
22516 });
22517 this._reader.onEnd(() => {
22518 this._stream.push(null);
22519 });
22520 this._reader.read();
22521 return this._stream;
22522 }
22523}
22524exports.default = StreamProvider;
22525
22526
22527/***/ }),
22528/* 121 */
22529/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22530
22531"use strict";
22532
22533Object.defineProperty(exports, "__esModule", ({ value: true }));
22534const sync_1 = __webpack_require__(122);
22535class SyncProvider {
22536 constructor(_root, _settings) {
22537 this._root = _root;
22538 this._settings = _settings;
22539 this._reader = new sync_1.default(this._root, this._settings);
22540 }
22541 read() {
22542 return this._reader.read();
22543 }
22544}
22545exports.default = SyncProvider;
22546
22547
22548/***/ }),
22549/* 122 */
22550/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22551
22552"use strict";
22553
22554Object.defineProperty(exports, "__esModule", ({ value: true }));
22555const fsScandir = __webpack_require__(107);
22556const common = __webpack_require__(118);
22557const reader_1 = __webpack_require__(119);
22558class SyncReader extends reader_1.default {
22559 constructor() {
22560 super(...arguments);
22561 this._scandir = fsScandir.scandirSync;
22562 this._storage = new Set();
22563 this._queue = new Set();
22564 }
22565 read() {
22566 this._pushToQueue(this._root, this._settings.basePath);
22567 this._handleQueue();
22568 return [...this._storage];
22569 }
22570 _pushToQueue(directory, base) {
22571 this._queue.add({ directory, base });
22572 }
22573 _handleQueue() {
22574 for (const item of this._queue.values()) {
22575 this._handleDirectory(item.directory, item.base);
22576 }
22577 }
22578 _handleDirectory(directory, base) {
22579 try {
22580 const entries = this._scandir(directory, this._settings.fsScandirSettings);
22581 for (const entry of entries) {
22582 this._handleEntry(entry, base);
22583 }
22584 }
22585 catch (error) {
22586 this._handleError(error);
22587 }
22588 }
22589 _handleError(error) {
22590 if (!common.isFatalError(this._settings, error)) {
22591 return;
22592 }
22593 throw error;
22594 }
22595 _handleEntry(entry, base) {
22596 const fullpath = entry.path;
22597 if (base !== undefined) {
22598 entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
22599 }
22600 if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
22601 this._pushToStorage(entry);
22602 }
22603 if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
22604 this._pushToQueue(fullpath, entry.path);
22605 }
22606 }
22607 _pushToStorage(entry) {
22608 this._storage.add(entry);
22609 }
22610}
22611exports.default = SyncReader;
22612
22613
22614/***/ }),
22615/* 123 */
22616/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22617
22618"use strict";
22619
22620Object.defineProperty(exports, "__esModule", ({ value: true }));
22621const path = __webpack_require__(13);
22622const fsScandir = __webpack_require__(107);
22623class Settings {
22624 constructor(_options = {}) {
22625 this._options = _options;
22626 this.basePath = this._getValue(this._options.basePath, undefined);
22627 this.concurrency = this._getValue(this._options.concurrency, Infinity);
22628 this.deepFilter = this._getValue(this._options.deepFilter, null);
22629 this.entryFilter = this._getValue(this._options.entryFilter, null);
22630 this.errorFilter = this._getValue(this._options.errorFilter, null);
22631 this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
22632 this.fsScandirSettings = new fsScandir.Settings({
22633 followSymbolicLinks: this._options.followSymbolicLinks,
22634 fs: this._options.fs,
22635 pathSegmentSeparator: this._options.pathSegmentSeparator,
22636 stats: this._options.stats,
22637 throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink
22638 });
22639 }
22640 _getValue(option, value) {
22641 return option === undefined ? value : option;
22642 }
22643}
22644exports.default = Settings;
22645
22646
22647/***/ }),
22648/* 124 */
22649/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22650
22651"use strict";
22652
22653Object.defineProperty(exports, "__esModule", ({ value: true }));
22654const path = __webpack_require__(13);
22655const fsStat = __webpack_require__(99);
22656const utils = __webpack_require__(61);
22657class Reader {
22658 constructor(_settings) {
22659 this._settings = _settings;
22660 this._fsStatSettings = new fsStat.Settings({
22661 followSymbolicLink: this._settings.followSymbolicLinks,
22662 fs: this._settings.fs,
22663 throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks
22664 });
22665 }
22666 _getFullEntryPath(filepath) {
22667 return path.resolve(this._settings.cwd, filepath);
22668 }
22669 _makeEntry(stats, pattern) {
22670 const entry = {
22671 name: pattern,
22672 path: pattern,
22673 dirent: utils.fs.createDirentFromStats(pattern, stats)
22674 };
22675 if (this._settings.stats) {
22676 entry.stats = stats;
22677 }
22678 return entry;
22679 }
22680 _isFatalError(error) {
22681 return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;
22682 }
22683}
22684exports.default = Reader;
22685
22686
22687/***/ }),
22688/* 125 */
22689/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22690
22691"use strict";
22692
22693Object.defineProperty(exports, "__esModule", ({ value: true }));
22694const path = __webpack_require__(13);
22695const deep_1 = __webpack_require__(126);
22696const entry_1 = __webpack_require__(129);
22697const error_1 = __webpack_require__(130);
22698const entry_2 = __webpack_require__(131);
22699class Provider {
22700 constructor(_settings) {
22701 this._settings = _settings;
22702 this.errorFilter = new error_1.default(this._settings);
22703 this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());
22704 this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());
22705 this.entryTransformer = new entry_2.default(this._settings);
22706 }
22707 _getRootDirectory(task) {
22708 return path.resolve(this._settings.cwd, task.base);
22709 }
22710 _getReaderOptions(task) {
22711 const basePath = task.base === '.' ? '' : task.base;
22712 return {
22713 basePath,
22714 pathSegmentSeparator: '/',
22715 concurrency: this._settings.concurrency,
22716 deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),
22717 entryFilter: this.entryFilter.getFilter(task.positive, task.negative),
22718 errorFilter: this.errorFilter.getFilter(),
22719 followSymbolicLinks: this._settings.followSymbolicLinks,
22720 fs: this._settings.fs,
22721 stats: this._settings.stats,
22722 throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,
22723 transform: this.entryTransformer.getTransformer()
22724 };
22725 }
22726 _getMicromatchOptions() {
22727 return {
22728 dot: this._settings.dot,
22729 matchBase: this._settings.baseNameMatch,
22730 nobrace: !this._settings.braceExpansion,
22731 nocase: !this._settings.caseSensitiveMatch,
22732 noext: !this._settings.extglob,
22733 noglobstar: !this._settings.globstar,
22734 posix: true,
22735 strictSlashes: false
22736 };
22737 }
22738}
22739exports.default = Provider;
22740
22741
22742/***/ }),
22743/* 126 */
22744/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22745
22746"use strict";
22747
22748Object.defineProperty(exports, "__esModule", ({ value: true }));
22749const utils = __webpack_require__(61);
22750const partial_1 = __webpack_require__(127);
22751class DeepFilter {
22752 constructor(_settings, _micromatchOptions) {
22753 this._settings = _settings;
22754 this._micromatchOptions = _micromatchOptions;
22755 }
22756 getFilter(basePath, positive, negative) {
22757 const matcher = this._getMatcher(positive);
22758 const negativeRe = this._getNegativePatternsRe(negative);
22759 return (entry) => this._filter(basePath, entry, matcher, negativeRe);
22760 }
22761 _getMatcher(patterns) {
22762 return new partial_1.default(patterns, this._settings, this._micromatchOptions);
22763 }
22764 _getNegativePatternsRe(patterns) {
22765 const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);
22766 return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);
22767 }
22768 _filter(basePath, entry, matcher, negativeRe) {
22769 if (this._isSkippedByDeep(basePath, entry.path)) {
22770 return false;
22771 }
22772 if (this._isSkippedSymbolicLink(entry)) {
22773 return false;
22774 }
22775 const filepath = utils.path.removeLeadingDotSegment(entry.path);
22776 if (this._isSkippedByPositivePatterns(filepath, matcher)) {
22777 return false;
22778 }
22779 return this._isSkippedByNegativePatterns(filepath, negativeRe);
22780 }
22781 _isSkippedByDeep(basePath, entryPath) {
22782 /**
22783 * Avoid unnecessary depth calculations when it doesn't matter.
22784 */
22785 if (this._settings.deep === Infinity) {
22786 return false;
22787 }
22788 return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;
22789 }
22790 _getEntryLevel(basePath, entryPath) {
22791 const entryPathDepth = entryPath.split('/').length;
22792 if (basePath === '') {
22793 return entryPathDepth;
22794 }
22795 const basePathDepth = basePath.split('/').length;
22796 return entryPathDepth - basePathDepth;
22797 }
22798 _isSkippedSymbolicLink(entry) {
22799 return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();
22800 }
22801 _isSkippedByPositivePatterns(entryPath, matcher) {
22802 return !this._settings.baseNameMatch && !matcher.match(entryPath);
22803 }
22804 _isSkippedByNegativePatterns(entryPath, patternsRe) {
22805 return !utils.pattern.matchAny(entryPath, patternsRe);
22806 }
22807}
22808exports.default = DeepFilter;
22809
22810
22811/***/ }),
22812/* 127 */
22813/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22814
22815"use strict";
22816
22817Object.defineProperty(exports, "__esModule", ({ value: true }));
22818const matcher_1 = __webpack_require__(128);
22819class PartialMatcher extends matcher_1.default {
22820 match(filepath) {
22821 const parts = filepath.split('/');
22822 const levels = parts.length;
22823 const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);
22824 for (const pattern of patterns) {
22825 const section = pattern.sections[0];
22826 /**
22827 * In this case, the pattern has a globstar and we must read all directories unconditionally,
22828 * but only if the level has reached the end of the first group.
22829 *
22830 * fixtures/{a,b}/**
22831 * ^ true/false ^ always true
22832 */
22833 if (!pattern.complete && levels > section.length) {
22834 return true;
22835 }
22836 const match = parts.every((part, index) => {
22837 const segment = pattern.segments[index];
22838 if (segment.dynamic && segment.patternRe.test(part)) {
22839 return true;
22840 }
22841 if (!segment.dynamic && segment.pattern === part) {
22842 return true;
22843 }
22844 return false;
22845 });
22846 if (match) {
22847 return true;
22848 }
22849 }
22850 return false;
22851 }
22852}
22853exports.default = PartialMatcher;
22854
22855
22856/***/ }),
22857/* 128 */
22858/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22859
22860"use strict";
22861
22862Object.defineProperty(exports, "__esModule", ({ value: true }));
22863const utils = __webpack_require__(61);
22864class Matcher {
22865 constructor(_patterns, _settings, _micromatchOptions) {
22866 this._patterns = _patterns;
22867 this._settings = _settings;
22868 this._micromatchOptions = _micromatchOptions;
22869 this._storage = [];
22870 this._fillStorage();
22871 }
22872 _fillStorage() {
22873 /**
22874 * The original pattern may include `{,*,**,a/*}`, which will lead to problems with matching (unresolved level).
22875 * So, before expand patterns with brace expansion into separated patterns.
22876 */
22877 const patterns = utils.pattern.expandPatternsWithBraceExpansion(this._patterns);
22878 for (const pattern of patterns) {
22879 const segments = this._getPatternSegments(pattern);
22880 const sections = this._splitSegmentsIntoSections(segments);
22881 this._storage.push({
22882 complete: sections.length <= 1,
22883 pattern,
22884 segments,
22885 sections
22886 });
22887 }
22888 }
22889 _getPatternSegments(pattern) {
22890 const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);
22891 return parts.map((part) => {
22892 const dynamic = utils.pattern.isDynamicPattern(part, this._settings);
22893 if (!dynamic) {
22894 return {
22895 dynamic: false,
22896 pattern: part
22897 };
22898 }
22899 return {
22900 dynamic: true,
22901 pattern: part,
22902 patternRe: utils.pattern.makeRe(part, this._micromatchOptions)
22903 };
22904 });
22905 }
22906 _splitSegmentsIntoSections(segments) {
22907 return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));
22908 }
22909}
22910exports.default = Matcher;
22911
22912
22913/***/ }),
22914/* 129 */
22915/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22916
22917"use strict";
22918
22919Object.defineProperty(exports, "__esModule", ({ value: true }));
22920const utils = __webpack_require__(61);
22921class EntryFilter {
22922 constructor(_settings, _micromatchOptions) {
22923 this._settings = _settings;
22924 this._micromatchOptions = _micromatchOptions;
22925 this.index = new Map();
22926 }
22927 getFilter(positive, negative) {
22928 const positiveRe = utils.pattern.convertPatternsToRe(positive, this._micromatchOptions);
22929 const negativeRe = utils.pattern.convertPatternsToRe(negative, this._micromatchOptions);
22930 return (entry) => this._filter(entry, positiveRe, negativeRe);
22931 }
22932 _filter(entry, positiveRe, negativeRe) {
22933 if (this._settings.unique && this._isDuplicateEntry(entry)) {
22934 return false;
22935 }
22936 if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {
22937 return false;
22938 }
22939 if (this._isSkippedByAbsoluteNegativePatterns(entry.path, negativeRe)) {
22940 return false;
22941 }
22942 const filepath = this._settings.baseNameMatch ? entry.name : entry.path;
22943 const isMatched = this._isMatchToPatterns(filepath, positiveRe) && !this._isMatchToPatterns(entry.path, negativeRe);
22944 if (this._settings.unique && isMatched) {
22945 this._createIndexRecord(entry);
22946 }
22947 return isMatched;
22948 }
22949 _isDuplicateEntry(entry) {
22950 return this.index.has(entry.path);
22951 }
22952 _createIndexRecord(entry) {
22953 this.index.set(entry.path, undefined);
22954 }
22955 _onlyFileFilter(entry) {
22956 return this._settings.onlyFiles && !entry.dirent.isFile();
22957 }
22958 _onlyDirectoryFilter(entry) {
22959 return this._settings.onlyDirectories && !entry.dirent.isDirectory();
22960 }
22961 _isSkippedByAbsoluteNegativePatterns(entryPath, patternsRe) {
22962 if (!this._settings.absolute) {
22963 return false;
22964 }
22965 const fullpath = utils.path.makeAbsolute(this._settings.cwd, entryPath);
22966 return utils.pattern.matchAny(fullpath, patternsRe);
22967 }
22968 _isMatchToPatterns(entryPath, patternsRe) {
22969 const filepath = utils.path.removeLeadingDotSegment(entryPath);
22970 return utils.pattern.matchAny(filepath, patternsRe);
22971 }
22972}
22973exports.default = EntryFilter;
22974
22975
22976/***/ }),
22977/* 130 */
22978/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
22979
22980"use strict";
22981
22982Object.defineProperty(exports, "__esModule", ({ value: true }));
22983const utils = __webpack_require__(61);
22984class ErrorFilter {
22985 constructor(_settings) {
22986 this._settings = _settings;
22987 }
22988 getFilter() {
22989 return (error) => this._isNonFatalError(error);
22990 }
22991 _isNonFatalError(error) {
22992 return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;
22993 }
22994}
22995exports.default = ErrorFilter;
22996
22997
22998/***/ }),
22999/* 131 */
23000/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23001
23002"use strict";
23003
23004Object.defineProperty(exports, "__esModule", ({ value: true }));
23005const utils = __webpack_require__(61);
23006class EntryTransformer {
23007 constructor(_settings) {
23008 this._settings = _settings;
23009 }
23010 getTransformer() {
23011 return (entry) => this._transform(entry);
23012 }
23013 _transform(entry) {
23014 let filepath = entry.path;
23015 if (this._settings.absolute) {
23016 filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);
23017 filepath = utils.path.unixify(filepath);
23018 }
23019 if (this._settings.markDirectories && entry.dirent.isDirectory()) {
23020 filepath += '/';
23021 }
23022 if (!this._settings.objectMode) {
23023 return filepath;
23024 }
23025 return Object.assign(Object.assign({}, entry), { path: filepath });
23026 }
23027}
23028exports.default = EntryTransformer;
23029
23030
23031/***/ }),
23032/* 132 */
23033/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23034
23035"use strict";
23036
23037Object.defineProperty(exports, "__esModule", ({ value: true }));
23038const stream_1 = __webpack_require__(95);
23039const stream_2 = __webpack_require__(98);
23040const provider_1 = __webpack_require__(125);
23041class ProviderStream extends provider_1.default {
23042 constructor() {
23043 super(...arguments);
23044 this._reader = new stream_2.default(this._settings);
23045 }
23046 read(task) {
23047 const root = this._getRootDirectory(task);
23048 const options = this._getReaderOptions(task);
23049 const source = this.api(root, task, options);
23050 const destination = new stream_1.Readable({ objectMode: true, read: () => { } });
23051 source
23052 .once('error', (error) => destination.emit('error', error))
23053 .on('data', (entry) => destination.emit('data', options.transform(entry)))
23054 .once('end', () => destination.emit('end'));
23055 destination
23056 .once('close', () => source.destroy());
23057 return destination;
23058 }
23059 api(root, task, options) {
23060 if (task.dynamic) {
23061 return this._reader.dynamic(root, options);
23062 }
23063 return this._reader.static(task.patterns, options);
23064 }
23065}
23066exports.default = ProviderStream;
23067
23068
23069/***/ }),
23070/* 133 */
23071/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23072
23073"use strict";
23074
23075Object.defineProperty(exports, "__esModule", ({ value: true }));
23076const sync_1 = __webpack_require__(134);
23077const provider_1 = __webpack_require__(125);
23078class ProviderSync extends provider_1.default {
23079 constructor() {
23080 super(...arguments);
23081 this._reader = new sync_1.default(this._settings);
23082 }
23083 read(task) {
23084 const root = this._getRootDirectory(task);
23085 const options = this._getReaderOptions(task);
23086 const entries = this.api(root, task, options);
23087 return entries.map(options.transform);
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 = ProviderSync;
23097
23098
23099/***/ }),
23100/* 134 */
23101/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23102
23103"use strict";
23104
23105Object.defineProperty(exports, "__esModule", ({ value: true }));
23106const fsStat = __webpack_require__(99);
23107const fsWalk = __webpack_require__(104);
23108const reader_1 = __webpack_require__(124);
23109class ReaderSync extends reader_1.default {
23110 constructor() {
23111 super(...arguments);
23112 this._walkSync = fsWalk.walkSync;
23113 this._statSync = fsStat.statSync;
23114 }
23115 dynamic(root, options) {
23116 return this._walkSync(root, options);
23117 }
23118 static(patterns, options) {
23119 const entries = [];
23120 for (const pattern of patterns) {
23121 const filepath = this._getFullEntryPath(pattern);
23122 const entry = this._getEntry(filepath, pattern, options);
23123 if (entry === null || !options.entryFilter(entry)) {
23124 continue;
23125 }
23126 entries.push(entry);
23127 }
23128 return entries;
23129 }
23130 _getEntry(filepath, pattern, options) {
23131 try {
23132 const stats = this._getStat(filepath);
23133 return this._makeEntry(stats, pattern);
23134 }
23135 catch (error) {
23136 if (options.errorFilter(error)) {
23137 return null;
23138 }
23139 throw error;
23140 }
23141 }
23142 _getStat(filepath) {
23143 return this._statSync(filepath, this._fsStatSettings);
23144 }
23145}
23146exports.default = ReaderSync;
23147
23148
23149/***/ }),
23150/* 135 */
23151/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23152
23153"use strict";
23154
23155Object.defineProperty(exports, "__esModule", ({ value: true }));
23156exports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
23157const fs = __webpack_require__(40);
23158const os = __webpack_require__(14);
23159const CPU_COUNT = os.cpus().length;
23160exports.DEFAULT_FILE_SYSTEM_ADAPTER = {
23161 lstat: fs.lstat,
23162 lstatSync: fs.lstatSync,
23163 stat: fs.stat,
23164 statSync: fs.statSync,
23165 readdir: fs.readdir,
23166 readdirSync: fs.readdirSync
23167};
23168class Settings {
23169 constructor(_options = {}) {
23170 this._options = _options;
23171 this.absolute = this._getValue(this._options.absolute, false);
23172 this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);
23173 this.braceExpansion = this._getValue(this._options.braceExpansion, true);
23174 this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);
23175 this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);
23176 this.cwd = this._getValue(this._options.cwd, process.cwd());
23177 this.deep = this._getValue(this._options.deep, Infinity);
23178 this.dot = this._getValue(this._options.dot, false);
23179 this.extglob = this._getValue(this._options.extglob, true);
23180 this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);
23181 this.fs = this._getFileSystemMethods(this._options.fs);
23182 this.globstar = this._getValue(this._options.globstar, true);
23183 this.ignore = this._getValue(this._options.ignore, []);
23184 this.markDirectories = this._getValue(this._options.markDirectories, false);
23185 this.objectMode = this._getValue(this._options.objectMode, false);
23186 this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);
23187 this.onlyFiles = this._getValue(this._options.onlyFiles, true);
23188 this.stats = this._getValue(this._options.stats, false);
23189 this.suppressErrors = this._getValue(this._options.suppressErrors, false);
23190 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);
23191 this.unique = this._getValue(this._options.unique, true);
23192 if (this.onlyDirectories) {
23193 this.onlyFiles = false;
23194 }
23195 if (this.stats) {
23196 this.objectMode = true;
23197 }
23198 }
23199 _getValue(option, value) {
23200 return option === undefined ? value : option;
23201 }
23202 _getFileSystemMethods(methods = {}) {
23203 return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);
23204 }
23205}
23206exports.default = Settings;
23207
23208
23209/***/ }),
23210/* 136 */
23211/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23212
23213"use strict";
23214
23215Object.defineProperty(exports, "__esModule", ({ value: true }));
23216var connection_1 = __webpack_require__(137);
23217function default_1(name) {
23218 return {
23219 log: function (message) {
23220 connection_1.connection.console.log(name + ": " + message);
23221 },
23222 info: function (message) {
23223 connection_1.connection.console.info(name + ": " + message);
23224 },
23225 warn: function (message) {
23226 connection_1.connection.console.warn(name + ": " + message);
23227 },
23228 error: function (message) {
23229 connection_1.connection.console.error(name + ": " + message);
23230 },
23231 };
23232}
23233exports.default = default_1;
23234
23235
23236/***/ }),
23237/* 137 */
23238/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23239
23240"use strict";
23241
23242Object.defineProperty(exports, "__esModule", ({ value: true }));
23243exports.connection = void 0;
23244var vscode_languageserver_1 = __webpack_require__(2);
23245// create connection by command argv
23246exports.connection = vscode_languageserver_1.createConnection();
23247
23248
23249/***/ }),
23250/* 138 */
23251/***/ ((module) => {
23252
23253"use strict";
23254module.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()`\"]}}}");
23255
23256/***/ }),
23257/* 139 */
23258/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
23259
23260"use strict";
23261
23262var __importDefault = (this && this.__importDefault) || function (mod) {
23263 return (mod && mod.__esModule) ? mod : { "default": mod };
23264};
23265Object.defineProperty(exports, "__esModule", ({ value: true }));
23266exports.getProvider = exports.useProvider = void 0;
23267var fuzzy_1 = __importDefault(__webpack_require__(140));
23268var providers = [];
23269function useProvider(p) {
23270 providers.push(p);
23271}
23272exports.useProvider = useProvider;
23273function getProvider() {
23274 return providers.reduce(function (pre, next) {
23275 return function (line, uri, position, word, invalidLength, items) {
23276 // 200 items is enough
23277 if (items.length > 200) {
23278 return items.slice(0, 200);
23279 }
23280 var newItems = next(line, uri, position)
23281 .filter(function (item) { return fuzzy_1.default(item.label, word) >= invalidLength; });
23282 return pre(line, uri, position, word, invalidLength, items.concat(newItems));
23283 };
23284 }, function (_line, _uri, _position, _word, _invalidLength, items) { return items; });
23285}
23286exports.getProvider = getProvider;
23287
23288
23289/***/ }),
23290/* 140 */
23291/***/ ((__unused_webpack_module, exports) => {
23292
23293"use strict";
23294
23295Object.defineProperty(exports, "__esModule", ({ value: true }));
23296function fuzzy(origin, query) {
23297 var score = 0;
23298 for (var qIdx = 0, oIdx = 0; qIdx < query.length && oIdx < origin.length; qIdx++) {
23299 var qc = query.charAt(qIdx).toLowerCase();
23300 for (; oIdx < origin.length; oIdx++) {
23301 var oc = origin.charAt(oIdx).toLowerCase();
23302 if (qc === oc) {
23303 score++;
23304 oIdx++;
23305 break;
23306 }
23307 }
23308 }
23309 return score;
23310}
23311exports.default = fuzzy;
23312
23313
23314/***/ }),
23315/* 141 */
23316/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23317
23318"use strict";
23319
23320Object.defineProperty(exports, "__esModule", ({ value: true }));
23321var patterns_1 = __webpack_require__(53);
23322var util_1 = __webpack_require__(46);
23323var builtin_1 = __webpack_require__(58);
23324var provider_1 = __webpack_require__(139);
23325function provider(line) {
23326 if (util_1.isSomeMatchPattern(patterns_1.builtinVariablePattern, line)) {
23327 return builtin_1.builtinDocs.getPredefinedVimVariables();
23328 }
23329 return [];
23330}
23331provider_1.useProvider(provider);
23332
23333
23334/***/ }),
23335/* 142 */
23336/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23337
23338"use strict";
23339
23340Object.defineProperty(exports, "__esModule", ({ value: true }));
23341var patterns_1 = __webpack_require__(53);
23342var builtin_1 = __webpack_require__(58);
23343var provider_1 = __webpack_require__(139);
23344function provider(line) {
23345 if (patterns_1.colorschemePattern.test(line)) {
23346 return builtin_1.builtinDocs.getColorschemes();
23347 }
23348 return [];
23349}
23350provider_1.useProvider(provider);
23351
23352
23353/***/ }),
23354/* 143 */
23355/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
23356
23357"use strict";
23358
23359var __importDefault = (this && this.__importDefault) || function (mod) {
23360 return (mod && mod.__esModule) ? mod : { "default": mod };
23361};
23362Object.defineProperty(exports, "__esModule", ({ value: true }));
23363var patterns_1 = __webpack_require__(53);
23364var util_1 = __webpack_require__(46);
23365var builtin_1 = __webpack_require__(58);
23366var config_1 = __importDefault(__webpack_require__(54));
23367var snippets_1 = __webpack_require__(144);
23368var provider_1 = __webpack_require__(139);
23369function provider(line) {
23370 if (util_1.isSomeMatchPattern(patterns_1.commandPattern, line)) {
23371 // only return snippets when snippetSupport is true
23372 if (config_1.default.snippetSupport) {
23373 return builtin_1.builtinDocs.getVimCommands().concat(snippets_1.commandSnippets);
23374 }
23375 return builtin_1.builtinDocs.getVimCommands();
23376 }
23377 return [];
23378}
23379provider_1.useProvider(provider);
23380
23381
23382/***/ }),
23383/* 144 */
23384/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
23385
23386"use strict";
23387
23388var __assign = (this && this.__assign) || function () {
23389 __assign = Object.assign || function(t) {
23390 for (var s, i = 1, n = arguments.length; i < n; i++) {
23391 s = arguments[i];
23392 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
23393 t[p] = s[p];
23394 }
23395 return t;
23396 };
23397 return __assign.apply(this, arguments);
23398};
23399Object.defineProperty(exports, "__esModule", ({ value: true }));
23400exports.commandSnippets = void 0;
23401var vscode_languageserver_1 = __webpack_require__(2);
23402var util_1 = __webpack_require__(46);
23403exports.commandSnippets = [
23404 {
23405 label: "func",
23406 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23407 insertText: [
23408 "function ${1:Name}(${2}) ${3:abort}",
23409 "\t${0}",
23410 "endfunction",
23411 ].join("\n"),
23412 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23413 },
23414 {
23415 label: "tryc",
23416 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23417 insertText: [
23418 "try",
23419 "\t${1}",
23420 "catch /.*/",
23421 "\t${0}",
23422 "endtry",
23423 ].join("\n"),
23424 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23425 },
23426 {
23427 label: "tryf",
23428 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23429 insertText: [
23430 "try",
23431 "\t${1}",
23432 "finally",
23433 "\t${0}",
23434 "endtry",
23435 ].join("\n"),
23436 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23437 },
23438 {
23439 label: "trycf",
23440 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23441 insertText: [
23442 "try",
23443 "\t${1}",
23444 "catch /.*/",
23445 "\t${2}",
23446 "finally",
23447 "\t${0}",
23448 "endtry",
23449 ].join("\n"),
23450 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23451 },
23452 {
23453 label: "aug",
23454 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23455 insertText: [
23456 "augroup ${1:Start}",
23457 "\tautocmd!",
23458 "\t${0}",
23459 "augroup END",
23460 ].join("\n"),
23461 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23462 },
23463 {
23464 label: "aut",
23465 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23466 insertText: [
23467 "autocmd ${1:group-event} ${2:pat} ${3:once} ${4:nested} ${5:cmd}",
23468 ].join("\n"),
23469 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23470 },
23471 {
23472 label: "if",
23473 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23474 insertText: [
23475 "if ${1:condition}",
23476 "\t${0}",
23477 "endif",
23478 ].join("\n"),
23479 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23480 },
23481 {
23482 label: "cmd",
23483 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23484 insertText: [
23485 "command! ${1:attr} ${2:cmd} ${3:rep} ${0}",
23486 ].join("\n"),
23487 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23488 },
23489 {
23490 label: "hi",
23491 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23492 insertText: [
23493 "highlight ${1:default} ${2:group-name} ${3:args} ${0}",
23494 ].join("\n"),
23495 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23496 },
23497].map(function (item) { return (__assign(__assign({}, item), { documentation: util_1.markupSnippets(item.insertText) })); });
23498
23499
23500/***/ }),
23501/* 145 */
23502/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
23503
23504"use strict";
23505
23506var __assign = (this && this.__assign) || function () {
23507 __assign = Object.assign || function(t) {
23508 for (var s, i = 1, n = arguments.length; i < n; i++) {
23509 s = arguments[i];
23510 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
23511 t[p] = s[p];
23512 }
23513 return t;
23514 };
23515 return __assign.apply(this, arguments);
23516};
23517Object.defineProperty(exports, "__esModule", ({ value: true }));
23518var patterns_1 = __webpack_require__(53);
23519var builtin_1 = __webpack_require__(58);
23520var provider_1 = __webpack_require__(139);
23521function provider(line) {
23522 if (patterns_1.expandPattern[0].test(line)) {
23523 return builtin_1.builtinDocs.getExpandKeywords().map(function (item) {
23524 return __assign(__assign({}, item), { insertText: item.insertText.slice(1) });
23525 });
23526 }
23527 else if (patterns_1.expandPattern[1].test(line)) {
23528 return builtin_1.builtinDocs.getExpandKeywords();
23529 }
23530 return [];
23531}
23532provider_1.useProvider(provider);
23533
23534
23535/***/ }),
23536/* 146 */
23537/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
23538
23539"use strict";
23540
23541var __assign = (this && this.__assign) || function () {
23542 __assign = Object.assign || function(t) {
23543 for (var s, i = 1, n = arguments.length; i < n; i++) {
23544 s = arguments[i];
23545 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
23546 t[p] = s[p];
23547 }
23548 return t;
23549 };
23550 return __assign.apply(this, arguments);
23551};
23552var __importDefault = (this && this.__importDefault) || function (mod) {
23553 return (mod && mod.__esModule) ? mod : { "default": mod };
23554};
23555Object.defineProperty(exports, "__esModule", ({ value: true }));
23556var patterns_1 = __webpack_require__(53);
23557var util_1 = __webpack_require__(46);
23558var builtin_1 = __webpack_require__(58);
23559var config_1 = __importDefault(__webpack_require__(54));
23560var workspaces_1 = __webpack_require__(147);
23561var provider_1 = __webpack_require__(139);
23562function provider(line, uri, position) {
23563 if (/\b(g:|s:|<SID>)\w*$/.test(line)) {
23564 var list = [];
23565 if (/\bg:\w*$/.test(line)) {
23566 list = workspaces_1.workspace.getFunctionItems(uri)
23567 .filter(function (item) { return /^g:/.test(item.label); });
23568 }
23569 else if (/\b(s:|<SID>)\w*$/i.test(line)) {
23570 list = workspaces_1.workspace.getFunctionItems(uri)
23571 .filter(function (item) { return /^s:/.test(item.label); });
23572 }
23573 return list.map(function (item) { return (__assign(__assign({}, item), { insertText: !/:/.test(config_1.default.iskeyword) ? item.insertText.slice(2) : item.insertText })); });
23574 }
23575 else if (/\B:\w*$/.test(line)) {
23576 return workspaces_1.workspace.getFunctionItems(uri)
23577 .filter(function (item) { return /:/.test(item.label); })
23578 .map(function (item) {
23579 var m = line.match(/:[^:]*$/);
23580 return __assign(__assign({}, item), {
23581 // delete the `:` symbol
23582 textEdit: {
23583 range: {
23584 start: {
23585 line: position.line,
23586 character: line.length - m[0].length,
23587 },
23588 end: {
23589 line: position.line,
23590 character: line.length - m[0].length + 1,
23591 },
23592 },
23593 newText: item.insertText,
23594 } });
23595 });
23596 }
23597 else if (util_1.isSomeMatchPattern(patterns_1.notFunctionPattern, line)) {
23598 return [];
23599 }
23600 return workspaces_1.workspace.getFunctionItems(uri)
23601 .filter(function (item) {
23602 return !builtin_1.builtinDocs.isBuiltinFunction(item.label);
23603 })
23604 .concat(builtin_1.builtinDocs.getBuiltinVimFunctions());
23605}
23606provider_1.useProvider(provider);
23607
23608
23609/***/ }),
23610/* 147 */
23611/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
23612
23613"use strict";
23614
23615var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
23616 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23617 return new (P || (P = Promise))(function (resolve, reject) {
23618 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
23619 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
23620 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23621 step((generator = generator.apply(thisArg, _arguments || [])).next());
23622 });
23623};
23624var __generator = (this && this.__generator) || function (thisArg, body) {
23625 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23626 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
23627 function verb(n) { return function (v) { return step([n, v]); }; }
23628 function step(op) {
23629 if (f) throw new TypeError("Generator is already executing.");
23630 while (_) try {
23631 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;
23632 if (y = 0, t) op = [op[0] & 2, t.value];
23633 switch (op[0]) {
23634 case 0: case 1: t = op; break;
23635 case 4: _.label++; return { value: op[1], done: false };
23636 case 5: _.label++; y = op[1]; op = [0]; continue;
23637 case 7: op = _.ops.pop(); _.trys.pop(); continue;
23638 default:
23639 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
23640 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
23641 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
23642 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
23643 if (t[2]) _.ops.pop();
23644 _.trys.pop(); continue;
23645 }
23646 op = body.call(thisArg, _);
23647 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
23648 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
23649 }
23650};
23651var __importDefault = (this && this.__importDefault) || function (mod) {
23652 return (mod && mod.__esModule) ? mod : { "default": mod };
23653};
23654Object.defineProperty(exports, "__esModule", ({ value: true }));
23655exports.workspace = exports.Workspace = void 0;
23656var vscode_uri_1 = __webpack_require__(148);
23657var vscode_languageserver_1 = __webpack_require__(2);
23658var util_1 = __webpack_require__(46);
23659var buffer_1 = __webpack_require__(149);
23660var config_1 = __importDefault(__webpack_require__(54));
23661// import logger from '../common/logger';
23662// const log = logger('workspace')
23663var Workspace = /** @class */ (function () {
23664 function Workspace() {
23665 this.buffers = {};
23666 }
23667 Workspace.prototype.isExistsBuffer = function (uri) {
23668 if (this.buffers[uri]) {
23669 return true;
23670 }
23671 return false;
23672 };
23673 Workspace.prototype.updateBuffer = function (uri, node) {
23674 return __awaiter(this, void 0, void 0, function () {
23675 var projectRoot;
23676 return __generator(this, function (_a) {
23677 switch (_a.label) {
23678 case 0:
23679 if (!node) {
23680 return [2 /*return*/];
23681 }
23682 if (!this.buffers[uri]) return [3 /*break*/, 1];
23683 this.buffers[uri].updateBufferByNode(node);
23684 return [3 /*break*/, 3];
23685 case 1: return [4 /*yield*/, util_1.findProjectRoot(vscode_uri_1.URI.parse(uri).fsPath, config_1.default.indexes.projectRootPatterns)];
23686 case 2:
23687 projectRoot = _a.sent();
23688 if (config_1.default.vimruntime.trim() !== '' && projectRoot.indexOf(config_1.default.vimruntime) === 0) {
23689 projectRoot = config_1.default.vimruntime;
23690 }
23691 this.buffers[uri] = new buffer_1.Buffer(uri, projectRoot, node);
23692 _a.label = 3;
23693 case 3: return [2 /*return*/];
23694 }
23695 });
23696 });
23697 };
23698 Workspace.prototype.getBufferByUri = function (uri) {
23699 return this.buffers[uri];
23700 };
23701 Workspace.prototype.getFunctionItems = function (uri) {
23702 return this.getScriptFunctionItems(uri).concat(this.getGlobalFunctionItems(uri));
23703 };
23704 Workspace.prototype.getIdentifierItems = function (uri, line) {
23705 return this.getLocalIdentifierItems(uri, line)
23706 .concat(this.getGlobalIdentifierItems(uri));
23707 };
23708 Workspace.prototype.getLocations = function (name, uri, position, locationType) {
23709 var isFunArg = false;
23710 var res = [];
23711 if (/^((g|b):\w+(\.\w+)*|\w+(#\w+)+)$/.test(name)) {
23712 res = this.getGlobalLocation(name, uri, position, locationType);
23713 }
23714 else if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
23715 // get function args references first
23716 res = this.getFunArgLocation(name, uri, position, locationType);
23717 if (res.length) {
23718 isFunArg = true;
23719 }
23720 else {
23721 res = this.getLocalLocation(name, uri, position, locationType);
23722 if (!res.length) {
23723 res = this.getGlobalLocation(name, uri, position, locationType);
23724 }
23725 }
23726 }
23727 else if (/^((s:|<SID>)\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23728 var names = [name];
23729 if (/^<SID>/.test(name)) {
23730 names.push(name.replace(/^<SID>/, "s:"));
23731 }
23732 else {
23733 names.push(name.replace(/^s:/, "<SID>"));
23734 }
23735 res = this.getScriptLocation(names, uri, position, locationType);
23736 }
23737 else if (/^(l:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23738 res = this.getLocalLocation(name, uri, position, locationType);
23739 }
23740 else if (/^(a:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23741 res = this.getAIdentifierLocation(name, uri, position, locationType);
23742 }
23743 if (res.length) {
23744 res = res.sort(function (a, b) {
23745 if (a.range.start.line === b.range.start.line) {
23746 return a.range.start.character - b.range.start.character;
23747 }
23748 return a.range.start.line - b.range.start.line;
23749 });
23750 }
23751 return {
23752 isFunArg: isFunArg,
23753 locations: res,
23754 };
23755 };
23756 Workspace.prototype.getLocationsByUri = function (name, uri, position, locationType) {
23757 var isFunArg = false;
23758 var res = [];
23759 if (/^((g|b):\w+(\.\w+)*|\w+(#\w+)+)$/.test(name) && this.buffers[uri]) {
23760 res = this.getGlobalLocationByUri(name, uri, position, locationType);
23761 }
23762 else if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23763 // get function args references first
23764 res = this.getFunArgLocation(name, uri, position, locationType);
23765 if (res.length) {
23766 isFunArg = true;
23767 }
23768 else {
23769 res = this.getLocalLocation(name, uri, position, locationType);
23770 if (!res.length) {
23771 res = this.getGlobalLocationByUri(name, uri, position, locationType);
23772 }
23773 }
23774 }
23775 else if (/^((s:|<SID>)\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23776 var names = [name];
23777 if (/^<SID>/.test(name)) {
23778 names.push(name.replace(/^<SID>/, "s:"));
23779 }
23780 else {
23781 names.push(name.replace(/^s:/, "<SID>"));
23782 }
23783 res = this.getScriptLocation(names, uri, position, locationType);
23784 }
23785 else if (/^(l:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23786 res = this.getLocalLocation(name, uri, position, locationType);
23787 }
23788 else if (/^(a:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23789 res = this.getAIdentifierLocation(name, uri, position, locationType);
23790 }
23791 if (res.length) {
23792 res = res.sort(function (a, b) {
23793 if (a.range.start.line === b.range.start.line) {
23794 return a.range.start.character - b.range.start.character;
23795 }
23796 return a.range.start.line - b.range.start.line;
23797 });
23798 }
23799 return {
23800 isFunArg: isFunArg,
23801 locations: res,
23802 };
23803 };
23804 Workspace.prototype.filterDuplicate = function (items) {
23805 var tmp = {};
23806 return items.reduce(function (res, next) {
23807 if (!tmp[next.label]) {
23808 tmp[next.label] = true;
23809 res.push(next);
23810 }
23811 return res;
23812 }, []);
23813 };
23814 Workspace.prototype.getGlobalFunctionItems = function (uri) {
23815 var buf = this.buffers[uri];
23816 if (!buf) {
23817 return [];
23818 }
23819 var buffers = config_1.default.suggest.fromRuntimepath
23820 ? Object.values(this.buffers)
23821 : Object.values(this.buffers).filter(function (b) {
23822 if (config_1.default.suggest.fromVimruntime && b.isBelongToWorkdir(config_1.default.vimruntime)) {
23823 return true;
23824 }
23825 return b.isBelongToWorkdir(buf.getProjectRoot());
23826 });
23827 return this.filterDuplicate(buffers.reduce(function (res, cur) {
23828 return res.concat(cur.getGlobalFunctionItems());
23829 }, []));
23830 };
23831 Workspace.prototype.getScriptFunctionItems = function (uri) {
23832 if (!this.buffers[uri]) {
23833 return [];
23834 }
23835 return this.buffers[uri].getScriptFunctionItems();
23836 };
23837 Workspace.prototype.getGlobalIdentifierItems = function (uri) {
23838 var buf = this.buffers[uri];
23839 if (!buf) {
23840 return [];
23841 }
23842 var buffers = config_1.default.suggest.fromRuntimepath
23843 ? Object.values(this.buffers)
23844 : Object.values(this.buffers).filter(function (b) {
23845 if (config_1.default.suggest.fromVimruntime && b.isBelongToWorkdir(config_1.default.vimruntime)) {
23846 return true;
23847 }
23848 return b.isBelongToWorkdir(buf.getProjectRoot());
23849 });
23850 return this.filterDuplicate(buffers.reduce(function (res, cur) {
23851 return res
23852 .concat(cur.getGlobalIdentifierItems())
23853 .concat(cur.getEnvItems());
23854 }, []));
23855 };
23856 Workspace.prototype.getLocalIdentifierItems = function (uri, line) {
23857 if (!this.buffers[uri]) {
23858 return [];
23859 }
23860 var buf = this.buffers[uri];
23861 return buf.getFunctionLocalIdentifierItems(line)
23862 .concat(buf.getLocalIdentifierItems());
23863 };
23864 Workspace.prototype.getLocation = function (uri, item) {
23865 return {
23866 uri: uri,
23867 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)),
23868 };
23869 };
23870 Workspace.prototype.getGlobalLocation = function (name,
23871 // tslint:disable-next-line: variable-name
23872 _uri,
23873 // tslint:disable-next-line: variable-name
23874 position, locationType) {
23875 var _this = this;
23876 return Object.keys(this.buffers).reduce(function (pre, uri) {
23877 return pre.concat(_this.getGlobalLocationByUri(name, uri, position, locationType));
23878 }, []);
23879 };
23880 Workspace.prototype.getGlobalLocationByUri = function (name,
23881 // tslint:disable-next-line: variable-name
23882 uri,
23883 // tslint:disable-next-line: variable-name
23884 _position, locationType) {
23885 var _this = this;
23886 var res = [];
23887 var tmp = [];
23888 var list = [];
23889 var globalFunctions = locationType === "definition"
23890 ? this.buffers[uri].getGlobalFunctions()
23891 : this.buffers[uri].getGlobalFunctionRefs();
23892 Object.keys(globalFunctions).forEach(function (fname) {
23893 if (fname === name) {
23894 res = res.concat(globalFunctions[fname].map(function (item) { return _this.getLocation(uri, item); }));
23895 }
23896 });
23897 var identifiers = locationType === "definition"
23898 ? this.buffers[uri].getGlobalIdentifiers()
23899 : this.buffers[uri].getGlobalIdentifierRefs();
23900 Object.keys(identifiers).forEach(function (fname) {
23901 if (fname === name) {
23902 tmp = tmp.concat(identifiers[fname].map(function (item) { return _this.getLocation(uri, item); }));
23903 }
23904 });
23905 // filter function local variables
23906 if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
23907 var glFunctions = this.buffers[uri].getGlobalFunctions();
23908 var scriptFunctions = this.buffers[uri].getScriptFunctions();
23909 var funList_1 = Object.values(glFunctions).concat(Object.values(scriptFunctions)).reduce(function (aur, fs) { return aur.concat(fs); }, []);
23910 tmp.forEach(function (l) {
23911 if (!funList_1.some(function (fun) {
23912 return fun.startLine - 1 < l.range.start.line && l.range.start.line < fun.endLine - 1;
23913 })) {
23914 list.push(l);
23915 }
23916 });
23917 }
23918 else {
23919 list = tmp;
23920 }
23921 res = res.concat(list);
23922 return res;
23923 };
23924 Workspace.prototype.getScriptLocation = function (names, uri,
23925 // tslint:disable-next-line: variable-name
23926 _position, locationType) {
23927 var _this = this;
23928 var res = [];
23929 if (!this.buffers[uri]) {
23930 return res;
23931 }
23932 var functions = locationType === "definition"
23933 ? this.buffers[uri].getScriptFunctions()
23934 : this.buffers[uri].getScriptFunctionRefs();
23935 Object.keys(functions).forEach(function (fname) {
23936 var idx = names.indexOf(fname);
23937 if (idx !== -1) {
23938 res = res.concat(functions[names[idx]].map(function (item) { return _this.getLocation(uri, item); }));
23939 }
23940 });
23941 var identifiers = locationType === "definition"
23942 ? this.buffers[uri].getLocalIdentifiers()
23943 : this.buffers[uri].getLocalIdentifierRefs();
23944 Object.keys(identifiers).forEach(function (fname) {
23945 var idx = names.indexOf(fname);
23946 if (idx !== -1) {
23947 res = res.concat(identifiers[names[idx]].map(function (item) { return _this.getLocation(uri, item); }));
23948 }
23949 });
23950 return res;
23951 };
23952 Workspace.prototype.getLocalLocation = function (name, uri, position, locationType) {
23953 var _this = this;
23954 var list = [];
23955 if (!this.buffers[uri]) {
23956 return list;
23957 }
23958 var vimLineNum = position.line + 1;
23959 var startLine = -1;
23960 var endLine = -1;
23961 // get function args completion items
23962 []
23963 .concat(Object
23964 .values(this.buffers[uri].getGlobalFunctions())
23965 .reduce(function (res, next) { return res.concat(next); }, []))
23966 .concat(Object
23967 .values(this.buffers[uri].getScriptFunctions())
23968 .reduce(function (res, next) { return res.concat(next); }, []))
23969 .forEach(function (fun) {
23970 if (fun.startLine < vimLineNum && vimLineNum < fun.endLine) {
23971 startLine = fun.startLine;
23972 endLine = fun.endLine;
23973 }
23974 });
23975 if (startLine !== -1 && endLine !== -1) {
23976 var globalVariables_1 = locationType === "definition"
23977 ? this.buffers[uri].getGlobalIdentifiers()
23978 : this.buffers[uri].getGlobalIdentifierRefs();
23979 Object.keys(globalVariables_1).some(function (key) {
23980 if (key === name) {
23981 globalVariables_1[key].forEach(function (item) {
23982 if (startLine < item.startLine && item.startLine < endLine) {
23983 list.push(_this.getLocation(uri, item));
23984 }
23985 });
23986 return true;
23987 }
23988 return false;
23989 });
23990 var localVariables_1 = locationType === "definition"
23991 ? this.buffers[uri].getLocalIdentifiers()
23992 : this.buffers[uri].getLocalIdentifierRefs();
23993 Object.keys(localVariables_1).some(function (key) {
23994 if (key === name) {
23995 localVariables_1[key].forEach(function (item) {
23996 if (startLine < item.startLine && item.startLine < endLine) {
23997 list.push(_this.getLocation(uri, item));
23998 }
23999 });
24000 return true;
24001 }
24002 return false;
24003 });
24004 }
24005 return list;
24006 };
24007 Workspace.prototype.getAIdentifierLocation = function (name, uri, position, locationType) {
24008 var res = [];
24009 if (!this.buffers[uri]) {
24010 return res;
24011 }
24012 if (locationType === "definition") {
24013 var flist_1 = [];
24014 var globalFunctions_1 = this.buffers[uri].getGlobalFunctions();
24015 Object.keys(globalFunctions_1).forEach(function (fname) {
24016 globalFunctions_1[fname].forEach(function (item) {
24017 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
24018 flist_1.push(item);
24019 }
24020 });
24021 });
24022 var scriptFunctions_1 = this.buffers[uri].getScriptFunctions();
24023 Object.keys(scriptFunctions_1).forEach(function (fname) {
24024 scriptFunctions_1[fname].forEach(function (item) {
24025 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
24026 flist_1.push(item);
24027 }
24028 });
24029 });
24030 if (flist_1.length) {
24031 var n_1 = name.slice(2);
24032 return flist_1.filter(function (item) { return item.args && item.args.some(function (m) { return m.value === n_1; }); })
24033 .map(function (item) {
24034 var startLine = item.startLine - 1;
24035 var startCol = item.startCol - 1;
24036 var endCol = item.startCol - 1;
24037 item.args.some(function (arg) {
24038 if (arg.value === n_1) {
24039 startCol = arg.pos.col - 1;
24040 endCol = startCol + n_1.length;
24041 return true;
24042 }
24043 return false;
24044 });
24045 return {
24046 uri: uri,
24047 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(startLine, startCol), vscode_languageserver_1.Position.create(startLine, endCol)),
24048 };
24049 });
24050 }
24051 }
24052 else {
24053 var flist_2 = [];
24054 var globalFunctions_2 = this.buffers[uri].getGlobalFunctions();
24055 Object.keys(globalFunctions_2).forEach(function (fname) {
24056 globalFunctions_2[fname].forEach(function (item) {
24057 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
24058 flist_2.push(item);
24059 }
24060 });
24061 });
24062 var scriptFunctions_2 = this.buffers[uri].getScriptFunctions();
24063 Object.keys(scriptFunctions_2).forEach(function (fname) {
24064 scriptFunctions_2[fname].forEach(function (item) {
24065 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
24066 flist_2.push(item);
24067 }
24068 });
24069 });
24070 if (flist_2.length) {
24071 var identifiers_1 = this.buffers[uri].getLocalIdentifierRefs();
24072 Object.keys(identifiers_1).forEach(function (key) {
24073 if (key === name) {
24074 identifiers_1[name].forEach(function (item) {
24075 flist_2.forEach(function (fitem) {
24076 if (fitem.startLine < item.startLine && item.startLine < fitem.endLine) {
24077 res.push({
24078 uri: uri,
24079 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)),
24080 });
24081 }
24082 });
24083 });
24084 }
24085 });
24086 }
24087 }
24088 return res;
24089 };
24090 Workspace.prototype.getFunArgLocation = function (name, uri, position, locationType) {
24091 var res = [];
24092 if (!this.buffers[uri]) {
24093 return res;
24094 }
24095 if (locationType === "references") {
24096 var globalFunctions = this.buffers[uri].getGlobalFunctions();
24097 var scriptFunctions = this.buffers[uri].getScriptFunctions();
24098 var startLine_1 = -1;
24099 var endLine_1 = -1;
24100 Object.values(globalFunctions).forEach(function (fitems) {
24101 fitems.forEach(function (fitem) {
24102 fitem.args.forEach(function (arg) {
24103 var pos = arg.pos;
24104 if (pos) {
24105 if (pos.lnum === position.line + 1 && arg.value === name) {
24106 startLine_1 = fitem.startLine;
24107 endLine_1 = fitem.endLine;
24108 }
24109 }
24110 });
24111 });
24112 });
24113 if (startLine_1 === -1 && endLine_1 === -1) {
24114 Object.values(scriptFunctions).forEach(function (fitems) {
24115 fitems.forEach(function (fitem) {
24116 fitem.args.forEach(function (arg) {
24117 var pos = arg.pos;
24118 if (pos) {
24119 if (pos.lnum === position.line + 1 && arg.value === name) {
24120 startLine_1 = fitem.startLine;
24121 endLine_1 = fitem.endLine;
24122 }
24123 }
24124 });
24125 });
24126 });
24127 }
24128 if (startLine_1 !== -1 && endLine_1 !== -1) {
24129 var identifiers_2 = this.buffers[uri].getLocalIdentifierRefs();
24130 Object.keys(identifiers_2).forEach(function (key) {
24131 if (key === "a:" + name) {
24132 identifiers_2[key].forEach(function (item) {
24133 if (startLine_1 < item.startLine && item.startLine < endLine_1) {
24134 res.push({
24135 uri: uri,
24136 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)),
24137 });
24138 }
24139 });
24140 }
24141 });
24142 }
24143 }
24144 else {
24145 var flist_3 = [];
24146 var globalFunctions_3 = this.buffers[uri].getGlobalFunctions();
24147 Object.keys(globalFunctions_3).forEach(function (fname) {
24148 globalFunctions_3[fname].forEach(function (item) {
24149 if (item.startLine - 1 === position.line && position.character > item.startCol - 1) {
24150 flist_3.push(item);
24151 }
24152 });
24153 });
24154 var scriptFunctions_3 = this.buffers[uri].getScriptFunctions();
24155 Object.keys(scriptFunctions_3).forEach(function (fname) {
24156 scriptFunctions_3[fname].forEach(function (item) {
24157 if (item.startLine - 1 === position.line && position.character > item.startCol - 1) {
24158 flist_3.push(item);
24159 }
24160 });
24161 });
24162 if (flist_3.length) {
24163 return flist_3.filter(function (item) { return item.args && item.args.some(function (n) { return n.value === name; }); })
24164 .map(function (item) {
24165 var startLine = item.startLine - 1;
24166 var startCol = item.startCol - 1;
24167 var endCol = item.startCol - 1;
24168 item.args.some(function (arg) {
24169 if (arg.value === name) {
24170 startCol = arg.pos.col - 1;
24171 endCol = startCol + name.length;
24172 return true;
24173 }
24174 return false;
24175 });
24176 return {
24177 uri: uri,
24178 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(startLine, startCol), vscode_languageserver_1.Position.create(startLine, endCol)),
24179 };
24180 });
24181 }
24182 }
24183 return res;
24184 };
24185 return Workspace;
24186}());
24187exports.Workspace = Workspace;
24188exports.workspace = new Workspace();
24189
24190
24191/***/ }),
24192/* 148 */
24193/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
24194
24195"use strict";
24196__webpack_require__.r(__webpack_exports__);
24197/* harmony export */ __webpack_require__.d(__webpack_exports__, {
24198/* harmony export */ "URI": () => /* binding */ URI,
24199/* harmony export */ "uriToFsPath": () => /* binding */ uriToFsPath
24200/* harmony export */ });
24201/*---------------------------------------------------------------------------------------------
24202 * Copyright (c) Microsoft Corporation. All rights reserved.
24203 * Licensed under the MIT License. See License.txt in the project root for license information.
24204 *--------------------------------------------------------------------------------------------*/
24205
24206var __extends = (undefined && undefined.__extends) || (function () {
24207 var extendStatics = function (d, b) {
24208 extendStatics = Object.setPrototypeOf ||
24209 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
24210 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
24211 return extendStatics(d, b);
24212 };
24213 return function (d, b) {
24214 extendStatics(d, b);
24215 function __() { this.constructor = d; }
24216 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
24217 };
24218})();
24219var _a;
24220var isWindows;
24221if (typeof process === 'object') {
24222 isWindows = process.platform === 'win32';
24223}
24224else if (typeof navigator === 'object') {
24225 var userAgent = navigator.userAgent;
24226 isWindows = userAgent.indexOf('Windows') >= 0;
24227}
24228function isHighSurrogate(charCode) {
24229 return (0xD800 <= charCode && charCode <= 0xDBFF);
24230}
24231function isLowSurrogate(charCode) {
24232 return (0xDC00 <= charCode && charCode <= 0xDFFF);
24233}
24234function isLowerAsciiHex(code) {
24235 return code >= 97 /* a */ && code <= 102 /* f */;
24236}
24237function isLowerAsciiLetter(code) {
24238 return code >= 97 /* a */ && code <= 122 /* z */;
24239}
24240function isUpperAsciiLetter(code) {
24241 return code >= 65 /* A */ && code <= 90 /* Z */;
24242}
24243function isAsciiLetter(code) {
24244 return isLowerAsciiLetter(code) || isUpperAsciiLetter(code);
24245}
24246//#endregion
24247var _schemePattern = /^\w[\w\d+.-]*$/;
24248var _singleSlashStart = /^\//;
24249var _doubleSlashStart = /^\/\//;
24250function _validateUri(ret, _strict) {
24251 // scheme, must be set
24252 if (!ret.scheme && _strict) {
24253 throw new Error("[UriError]: Scheme is missing: {scheme: \"\", authority: \"" + ret.authority + "\", path: \"" + ret.path + "\", query: \"" + ret.query + "\", fragment: \"" + ret.fragment + "\"}");
24254 }
24255 // scheme, https://tools.ietf.org/html/rfc3986#section-3.1
24256 // ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
24257 if (ret.scheme && !_schemePattern.test(ret.scheme)) {
24258 throw new Error('[UriError]: Scheme contains illegal characters.');
24259 }
24260 // path, http://tools.ietf.org/html/rfc3986#section-3.3
24261 // If a URI contains an authority component, then the path component
24262 // must either be empty or begin with a slash ("/") character. If a URI
24263 // does not contain an authority component, then the path cannot begin
24264 // with two slash characters ("//").
24265 if (ret.path) {
24266 if (ret.authority) {
24267 if (!_singleSlashStart.test(ret.path)) {
24268 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');
24269 }
24270 }
24271 else {
24272 if (_doubleSlashStart.test(ret.path)) {
24273 throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")');
24274 }
24275 }
24276 }
24277}
24278// for a while we allowed uris *without* schemes and this is the migration
24279// for them, e.g. an uri without scheme and without strict-mode warns and falls
24280// back to the file-scheme. that should cause the least carnage and still be a
24281// clear warning
24282function _schemeFix(scheme, _strict) {
24283 if (!scheme && !_strict) {
24284 return 'file';
24285 }
24286 return scheme;
24287}
24288// implements a bit of https://tools.ietf.org/html/rfc3986#section-5
24289function _referenceResolution(scheme, path) {
24290 // the slash-character is our 'default base' as we don't
24291 // support constructing URIs relative to other URIs. This
24292 // also means that we alter and potentially break paths.
24293 // see https://tools.ietf.org/html/rfc3986#section-5.1.4
24294 switch (scheme) {
24295 case 'https':
24296 case 'http':
24297 case 'file':
24298 if (!path) {
24299 path = _slash;
24300 }
24301 else if (path[0] !== _slash) {
24302 path = _slash + path;
24303 }
24304 break;
24305 }
24306 return path;
24307}
24308var _empty = '';
24309var _slash = '/';
24310var _regexp = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
24311/**
24312 * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.
24313 * This class is a simple parser which creates the basic component parts
24314 * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation
24315 * and encoding.
24316 *
24317 * ```txt
24318 * foo://example.com:8042/over/there?name=ferret#nose
24319 * \_/ \______________/\_________/ \_________/ \__/
24320 * | | | | |
24321 * scheme authority path query fragment
24322 * | _____________________|__
24323 * / \ / \
24324 * urn:example:animal:ferret:nose
24325 * ```
24326 */
24327var URI = /** @class */ (function () {
24328 /**
24329 * @internal
24330 */
24331 function URI(schemeOrData, authority, path, query, fragment, _strict) {
24332 if (_strict === void 0) { _strict = false; }
24333 if (typeof schemeOrData === 'object') {
24334 this.scheme = schemeOrData.scheme || _empty;
24335 this.authority = schemeOrData.authority || _empty;
24336 this.path = schemeOrData.path || _empty;
24337 this.query = schemeOrData.query || _empty;
24338 this.fragment = schemeOrData.fragment || _empty;
24339 // no validation because it's this URI
24340 // that creates uri components.
24341 // _validateUri(this);
24342 }
24343 else {
24344 this.scheme = _schemeFix(schemeOrData, _strict);
24345 this.authority = authority || _empty;
24346 this.path = _referenceResolution(this.scheme, path || _empty);
24347 this.query = query || _empty;
24348 this.fragment = fragment || _empty;
24349 _validateUri(this, _strict);
24350 }
24351 }
24352 URI.isUri = function (thing) {
24353 if (thing instanceof URI) {
24354 return true;
24355 }
24356 if (!thing) {
24357 return false;
24358 }
24359 return typeof thing.authority === 'string'
24360 && typeof thing.fragment === 'string'
24361 && typeof thing.path === 'string'
24362 && typeof thing.query === 'string'
24363 && typeof thing.scheme === 'string'
24364 && typeof thing.fsPath === 'function'
24365 && typeof thing.with === 'function'
24366 && typeof thing.toString === 'function';
24367 };
24368 Object.defineProperty(URI.prototype, "fsPath", {
24369 // ---- filesystem path -----------------------
24370 /**
24371 * Returns a string representing the corresponding file system path of this URI.
24372 * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the
24373 * platform specific path separator.
24374 *
24375 * * Will *not* validate the path for invalid characters and semantics.
24376 * * Will *not* look at the scheme of this URI.
24377 * * The result shall *not* be used for display purposes but for accessing a file on disk.
24378 *
24379 *
24380 * The *difference* to `URI#path` is the use of the platform specific separator and the handling
24381 * of UNC paths. See the below sample of a file-uri with an authority (UNC path).
24382 *
24383 * ```ts
24384 const u = URI.parse('file://server/c$/folder/file.txt')
24385 u.authority === 'server'
24386 u.path === '/shares/c$/file.txt'
24387 u.fsPath === '\\server\c$\folder\file.txt'
24388 ```
24389 *
24390 * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,
24391 * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working
24392 * with URIs that represent files on disk (`file` scheme).
24393 */
24394 get: function () {
24395 // if (this.scheme !== 'file') {
24396 // console.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);
24397 // }
24398 return uriToFsPath(this, false);
24399 },
24400 enumerable: true,
24401 configurable: true
24402 });
24403 // ---- modify to new -------------------------
24404 URI.prototype.with = function (change) {
24405 if (!change) {
24406 return this;
24407 }
24408 var scheme = change.scheme, authority = change.authority, path = change.path, query = change.query, fragment = change.fragment;
24409 if (scheme === undefined) {
24410 scheme = this.scheme;
24411 }
24412 else if (scheme === null) {
24413 scheme = _empty;
24414 }
24415 if (authority === undefined) {
24416 authority = this.authority;
24417 }
24418 else if (authority === null) {
24419 authority = _empty;
24420 }
24421 if (path === undefined) {
24422 path = this.path;
24423 }
24424 else if (path === null) {
24425 path = _empty;
24426 }
24427 if (query === undefined) {
24428 query = this.query;
24429 }
24430 else if (query === null) {
24431 query = _empty;
24432 }
24433 if (fragment === undefined) {
24434 fragment = this.fragment;
24435 }
24436 else if (fragment === null) {
24437 fragment = _empty;
24438 }
24439 if (scheme === this.scheme
24440 && authority === this.authority
24441 && path === this.path
24442 && query === this.query
24443 && fragment === this.fragment) {
24444 return this;
24445 }
24446 return new _URI(scheme, authority, path, query, fragment);
24447 };
24448 // ---- parse & validate ------------------------
24449 /**
24450 * Creates a new URI from a string, e.g. `http://www.msft.com/some/path`,
24451 * `file:///usr/home`, or `scheme:with/path`.
24452 *
24453 * @param value A string which represents an URI (see `URI#toString`).
24454 */
24455 URI.parse = function (value, _strict) {
24456 if (_strict === void 0) { _strict = false; }
24457 var match = _regexp.exec(value);
24458 if (!match) {
24459 return new _URI(_empty, _empty, _empty, _empty, _empty);
24460 }
24461 return new _URI(match[2] || _empty, percentDecode(match[4] || _empty), percentDecode(match[5] || _empty), percentDecode(match[7] || _empty), percentDecode(match[9] || _empty), _strict);
24462 };
24463 /**
24464 * Creates a new URI from a file system path, e.g. `c:\my\files`,
24465 * `/usr/home`, or `\\server\share\some\path`.
24466 *
24467 * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument
24468 * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**
24469 * `URI.parse('file://' + path)` because the path might contain characters that are
24470 * interpreted (# and ?). See the following sample:
24471 * ```ts
24472 const good = URI.file('/coding/c#/project1');
24473 good.scheme === 'file';
24474 good.path === '/coding/c#/project1';
24475 good.fragment === '';
24476 const bad = URI.parse('file://' + '/coding/c#/project1');
24477 bad.scheme === 'file';
24478 bad.path === '/coding/c'; // path is now broken
24479 bad.fragment === '/project1';
24480 ```
24481 *
24482 * @param path A file system path (see `URI#fsPath`)
24483 */
24484 URI.file = function (path) {
24485 var authority = _empty;
24486 // normalize to fwd-slashes on windows,
24487 // on other systems bwd-slashes are valid
24488 // filename character, eg /f\oo/ba\r.txt
24489 if (isWindows) {
24490 path = path.replace(/\\/g, _slash);
24491 }
24492 // check for authority as used in UNC shares
24493 // or use the path as given
24494 if (path[0] === _slash && path[1] === _slash) {
24495 var idx = path.indexOf(_slash, 2);
24496 if (idx === -1) {
24497 authority = path.substring(2);
24498 path = _slash;
24499 }
24500 else {
24501 authority = path.substring(2, idx);
24502 path = path.substring(idx) || _slash;
24503 }
24504 }
24505 return new _URI('file', authority, path, _empty, _empty);
24506 };
24507 URI.from = function (components) {
24508 return new _URI(components.scheme, components.authority, components.path, components.query, components.fragment);
24509 };
24510 // /**
24511 // * Join a URI path with path fragments and normalizes the resulting path.
24512 // *
24513 // * @param uri The input URI.
24514 // * @param pathFragment The path fragment to add to the URI path.
24515 // * @returns The resulting URI.
24516 // */
24517 // static joinPath(uri: URI, ...pathFragment: string[]): URI {
24518 // if (!uri.path) {
24519 // throw new Error(`[UriError]: cannot call joinPaths on URI without path`);
24520 // }
24521 // let newPath: string;
24522 // if (isWindows && uri.scheme === 'file') {
24523 // newPath = URI.file(paths.win32.join(uriToFsPath(uri, true), ...pathFragment)).path;
24524 // } else {
24525 // newPath = paths.posix.join(uri.path, ...pathFragment);
24526 // }
24527 // return uri.with({ path: newPath });
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// eslint-disable-next-line @typescript-eslint/class-name-casing
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 = uriToFsPath(this, false);
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 uriToFsPath(uri, keepDriveLetterCasing) {
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 if (!keepDriveLetterCasing) {
24734 // windows drive letter: file:///c:/far/boo
24735 value = uri.path[1].toLowerCase() + uri.path.substr(2);
24736 }
24737 else {
24738 value = uri.path.substr(1);
24739 }
24740 }
24741 else {
24742 // other path
24743 value = uri.path;
24744 }
24745 if (isWindows) {
24746 value = value.replace(/\//g, '\\');
24747 }
24748 return value;
24749}
24750/**
24751 * Create the external version of a uri
24752 */
24753function _asFormatted(uri, skipEncoding) {
24754 var encoder = !skipEncoding
24755 ? encodeURIComponentFast
24756 : encodeURIComponentMinimal;
24757 var res = '';
24758 var scheme = uri.scheme, authority = uri.authority, path = uri.path, query = uri.query, fragment = uri.fragment;
24759 if (scheme) {
24760 res += scheme;
24761 res += ':';
24762 }
24763 if (authority || scheme === 'file') {
24764 res += _slash;
24765 res += _slash;
24766 }
24767 if (authority) {
24768 var idx = authority.indexOf('@');
24769 if (idx !== -1) {
24770 // <user>@<auth>
24771 var userinfo = authority.substr(0, idx);
24772 authority = authority.substr(idx + 1);
24773 idx = userinfo.indexOf(':');
24774 if (idx === -1) {
24775 res += encoder(userinfo, false);
24776 }
24777 else {
24778 // <user>:<pass>@<auth>
24779 res += encoder(userinfo.substr(0, idx), false);
24780 res += ':';
24781 res += encoder(userinfo.substr(idx + 1), false);
24782 }
24783 res += '@';
24784 }
24785 authority = authority.toLowerCase();
24786 idx = authority.indexOf(':');
24787 if (idx === -1) {
24788 res += encoder(authority, false);
24789 }
24790 else {
24791 // <auth>:<port>
24792 res += encoder(authority.substr(0, idx), false);
24793 res += authority.substr(idx);
24794 }
24795 }
24796 if (path) {
24797 // lower-case windows drive letters in /C:/fff or C:/fff
24798 if (path.length >= 3 && path.charCodeAt(0) === 47 /* Slash */ && path.charCodeAt(2) === 58 /* Colon */) {
24799 var code = path.charCodeAt(1);
24800 if (code >= 65 /* A */ && code <= 90 /* Z */) {
24801 path = "/" + String.fromCharCode(code + 32) + ":" + path.substr(3); // "/c:".length === 3
24802 }
24803 }
24804 else if (path.length >= 2 && path.charCodeAt(1) === 58 /* Colon */) {
24805 var code = path.charCodeAt(0);
24806 if (code >= 65 /* A */ && code <= 90 /* Z */) {
24807 path = String.fromCharCode(code + 32) + ":" + path.substr(2); // "/c:".length === 3
24808 }
24809 }
24810 // encode the rest of the path
24811 res += encoder(path, true);
24812 }
24813 if (query) {
24814 res += '?';
24815 res += encoder(query, false);
24816 }
24817 if (fragment) {
24818 res += '#';
24819 res += !skipEncoding ? encodeURIComponentFast(fragment, false) : fragment;
24820 }
24821 return res;
24822}
24823// --- decode
24824function decodeURIComponentGraceful(str) {
24825 try {
24826 return decodeURIComponent(str);
24827 }
24828 catch (_a) {
24829 if (str.length > 3) {
24830 return str.substr(0, 3) + decodeURIComponentGraceful(str.substr(3));
24831 }
24832 else {
24833 return str;
24834 }
24835 }
24836}
24837var _rEncodedAsHex = /(%[0-9A-Za-z][0-9A-Za-z])+/g;
24838function percentDecode(str) {
24839 if (!str.match(_rEncodedAsHex)) {
24840 return str;
24841 }
24842 return str.replace(_rEncodedAsHex, function (match) { return decodeURIComponentGraceful(match); });
24843}
24844
24845
24846/***/ }),
24847/* 149 */
24848/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
24849
24850"use strict";
24851
24852var __importDefault = (this && this.__importDefault) || function (mod) {
24853 return (mod && mod.__esModule) ? mod : { "default": mod };
24854};
24855Object.defineProperty(exports, "__esModule", ({ value: true }));
24856exports.Buffer = void 0;
24857var vscode_languageserver_1 = __webpack_require__(2);
24858var constant_1 = __webpack_require__(44);
24859var logger_1 = __importDefault(__webpack_require__(136));
24860var log = logger_1.default("buffer");
24861var NODE_TOPLEVEL = 1;
24862var NODE_EXCMD = 3;
24863var NODE_FUNCTION = 4;
24864var NODE_DELFUNCTION = 6;
24865var NODE_RETURN = 7;
24866var NODE_EXCALL = 8;
24867var NODE_LET = 9;
24868var NODE_UNLET = 10;
24869var NODE_LOCKVAR = 11;
24870var NODE_UNLOCKVAR = 12;
24871var NODE_IF = 13;
24872var NODE_ELSEIF = 14;
24873var NODE_ELSE = 15;
24874var NODE_WHILE = 17;
24875var NODE_FOR = 19;
24876var NODE_TRY = 23;
24877var NODE_CATCH = 24;
24878var NODE_FINALLY = 25;
24879var NODE_THROW = 27;
24880var NODE_ECHO = 28;
24881var NODE_ECHON = 29;
24882var NODE_ECHOMSG = 31;
24883var NODE_ECHOERR = 32;
24884var NODE_EXECUTE = 33;
24885var NODE_TERNARY = 34;
24886var NODE_OR = 35;
24887var NODE_AND = 36;
24888var NODE_EQUAL = 37;
24889var NODE_EQUALCI = 38;
24890var NODE_EQUALCS = 39;
24891var NODE_NEQUAL = 40;
24892var NODE_NEQUALCI = 41;
24893var NODE_NEQUALCS = 42;
24894var NODE_GREATER = 43;
24895var NODE_GREATERCI = 44;
24896var NODE_GREATERCS = 45;
24897var NODE_GEQUAL = 46;
24898var NODE_GEQUALCI = 47;
24899var NODE_GEQUALCS = 48;
24900var NODE_SMALLER = 49;
24901var NODE_SMALLERCI = 50;
24902var NODE_SMALLERCS = 51;
24903var NODE_SEQUAL = 52;
24904var NODE_SEQUALCI = 53;
24905var NODE_SEQUALCS = 54;
24906var NODE_MATCH = 55;
24907var NODE_MATCHCI = 56;
24908var NODE_MATCHCS = 57;
24909var NODE_NOMATCH = 58;
24910var NODE_NOMATCHCI = 59;
24911var NODE_NOMATCHCS = 60;
24912var NODE_IS = 61;
24913var NODE_ISCI = 62;
24914var NODE_ISCS = 63;
24915var NODE_ISNOT = 64;
24916var NODE_ISNOTCI = 65;
24917var NODE_ISNOTCS = 66;
24918var NODE_ADD = 67;
24919var NODE_SUBTRACT = 68;
24920var NODE_CONCAT = 69;
24921var NODE_MULTIPLY = 70;
24922var NODE_DIVIDE = 71;
24923var NODE_REMAINDER = 72;
24924var NODE_NOT = 73;
24925var NODE_MINUS = 74;
24926var NODE_PLUS = 75;
24927var NODE_SUBSCRIPT = 76;
24928var NODE_SLICE = 77;
24929var NODE_CALL = 78;
24930var NODE_DOT = 79;
24931var NODE_NUMBER = 80;
24932var NODE_STRING = 81;
24933var NODE_LIST = 82;
24934var NODE_DICT = 83;
24935var NODE_IDENTIFIER = 86;
24936var NODE_CURLYNAME = 87;
24937var NODE_ENV = 88;
24938var NODE_REG = 89; // TODO
24939var NODE_CURLYNAMEPART = 90; // TODO
24940var NODE_CURLYNAMEEXPR = 91; // TODO
24941var NODE_LAMBDA = 92;
24942var NODE_CONST = 94;
24943var NODE_EVAL = 95;
24944var NODE_HEREDOC = 96;
24945var NODE_METHOD = 97;
24946var globalFuncPattern = /^(g:\w+(\.\w+)*|[a-zA-Z_]\w*(\.\w+)*|\w+(#\w+)+)$/;
24947var scriptFuncPattern = /^(s:\w+(\.\w+)*|<SID>\w+(\.\w+)*)$/i;
24948var globalVariablePattern = /^(g:\w+(\.\w+)*|b:\w+(\.\w+)*|\w{1,}(\.\w+)*|\w+(#\w+)+)$/;
24949var localVariablePattern = /^(s:\w+(\.\w+)*|l:\w+(\.\w+)*|a:\w+(\.\w+)*)$/;
24950var envPattern = /^\$\w+$/;
24951var Buffer = /** @class */ (function () {
24952 function Buffer(uri, projectRoot, node) {
24953 this.uri = uri;
24954 this.projectRoot = projectRoot;
24955 this.node = node;
24956 this.globalFunctions = {};
24957 this.scriptFunctions = {};
24958 this.globalFunctionRefs = {};
24959 this.scriptFunctionRefs = {};
24960 this.globalVariables = {};
24961 this.localVariables = {};
24962 this.globalVariableRefs = {};
24963 this.localVariableRefs = {};
24964 this.envs = {};
24965 this.envRefs = {};
24966 this.ranges = [];
24967 this.updateBufferByNode(this.node);
24968 }
24969 Buffer.prototype.getGlobalFunctions = function () {
24970 return this.globalFunctions;
24971 };
24972 Buffer.prototype.getGlobalFunctionRefs = function () {
24973 return this.globalFunctionRefs;
24974 };
24975 Buffer.prototype.getScriptFunctions = function () {
24976 return this.scriptFunctions;
24977 };
24978 Buffer.prototype.getScriptFunctionRefs = function () {
24979 return this.scriptFunctionRefs;
24980 };
24981 Buffer.prototype.getGlobalIdentifiers = function () {
24982 return this.globalVariables;
24983 };
24984 Buffer.prototype.getGlobalIdentifierRefs = function () {
24985 return this.globalVariableRefs;
24986 };
24987 Buffer.prototype.getLocalIdentifiers = function () {
24988 return this.localVariables;
24989 };
24990 Buffer.prototype.getLocalIdentifierRefs = function () {
24991 return this.localVariableRefs;
24992 };
24993 Buffer.prototype.getRanges = function () {
24994 return this.ranges;
24995 };
24996 Buffer.prototype.getProjectRoot = function () {
24997 return this.projectRoot;
24998 };
24999 Buffer.prototype.isBelongToWorkdir = function (workUri) {
25000 return this.projectRoot === workUri;
25001 };
25002 Buffer.prototype.updateBufferByNode = function (node) {
25003 this.node = node;
25004 this.resetProperties();
25005 try {
25006 this.resolveCompletionItems([node]);
25007 }
25008 catch (error) {
25009 log.warn("updateBufferByNode: " + error.stack);
25010 }
25011 };
25012 /*
25013 * global function
25014 *
25015 * - g:xxx
25016 * - xx#xxx
25017 */
25018 Buffer.prototype.getGlobalFunctionItems = function () {
25019 var _this = this;
25020 var refs = {};
25021 Object.keys(this.globalFunctionRefs).forEach(function (name) {
25022 if (!_this.globalFunctions[name]) {
25023 refs[name] = _this.globalFunctionRefs[name];
25024 }
25025 });
25026 return this.getFunctionItems(this.globalFunctions, constant_1.sortTexts.three)
25027 .concat(this.getFunctionItems(refs, constant_1.sortTexts.three));
25028 };
25029 /*
25030 * script function
25031 *
25032 * - s:xxx
25033 */
25034 Buffer.prototype.getScriptFunctionItems = function () {
25035 var _this = this;
25036 var refs = {};
25037 Object.keys(this.scriptFunctionRefs).forEach(function (name) {
25038 if (!_this.scriptFunctions[name]) {
25039 refs[name] = _this.scriptFunctionRefs[name];
25040 }
25041 });
25042 return this.getFunctionItems(this.scriptFunctions, constant_1.sortTexts.two)
25043 .concat(this.getFunctionItems(refs, constant_1.sortTexts.two));
25044 };
25045 /*
25046 * global identifier
25047 *
25048 * - g:xxx
25049 * - b:xxx
25050 * - [a-zA-Z]+
25051 * - xx#xxx
25052 */
25053 Buffer.prototype.getGlobalIdentifierItems = function () {
25054 var _this = this;
25055 var refs = {};
25056 Object.keys(this.globalVariableRefs).forEach(function (name) {
25057 if (!_this.globalVariables[name]) {
25058 refs[name] = _this.globalVariableRefs[name];
25059 }
25060 });
25061 var globalVariables = [];
25062 var localVariables = [];
25063 this.getIdentifierItems(this.globalVariables, constant_1.sortTexts.three)
25064 .concat(this.getIdentifierItems(refs, constant_1.sortTexts.three))
25065 .forEach(function (item) {
25066 if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(item.label)) {
25067 localVariables.push(item);
25068 }
25069 else {
25070 globalVariables.push(item);
25071 }
25072 });
25073 if (localVariables.length) {
25074 var gloalFunctions = this.getGlobalFunctions();
25075 var scriptFunctions = this.getScriptFunctions();
25076 var funList_1 = Object.values(gloalFunctions).concat(Object.values(scriptFunctions)).reduce(function (res, fs) { return res.concat(fs); }, []);
25077 localVariables.forEach(function (l) {
25078 if (l.data.some(function (identifier) {
25079 return funList_1.every(function (fun) {
25080 return !(fun.startLine < identifier.startLine && identifier.startLine < fun.endLine);
25081 });
25082 })) {
25083 globalVariables.push(l);
25084 }
25085 });
25086 }
25087 return globalVariables;
25088 };
25089 /*
25090 * local identifier
25091 *
25092 * - s:xxx
25093 */
25094 Buffer.prototype.getLocalIdentifierItems = function () {
25095 var _this = this;
25096 var refs = {};
25097 Object.keys(this.localVariableRefs).forEach(function (name) {
25098 if (!_this.localVariables[name]) {
25099 refs[name] = _this.localVariableRefs[name];
25100 }
25101 });
25102 return this.getIdentifierItems(this.localVariables, constant_1.sortTexts.two)
25103 .concat(this.getIdentifierItems(refs, constant_1.sortTexts.two))
25104 .filter(function (item) { return !/^(a|l):/.test(item.label); });
25105 };
25106 /*
25107 * function local identifier
25108 *
25109 * - l:xxx
25110 * - a:xxx
25111 * - identifiers in function range
25112 */
25113 Buffer.prototype.getFunctionLocalIdentifierItems = function (line) {
25114 var vimLineNum = line + 1;
25115 var startLine = -1;
25116 var endLine = -1;
25117 // get function args completion items
25118 var funArgs = []
25119 .concat(Object.values(this.globalFunctions).reduce(function (res, next) { return res.concat(next); }, []))
25120 .concat(Object.values(this.scriptFunctions).reduce(function (res, next) { return res.concat(next); }, []))
25121 .filter(function (fun) {
25122 if (startLine === -1 && endLine === -1 && fun.startLine < vimLineNum && vimLineNum < fun.endLine) {
25123 startLine = fun.startLine;
25124 endLine = fun.endLine;
25125 }
25126 else if (fun.startLine > startLine && endLine > fun.endLine) {
25127 startLine = fun.startLine;
25128 endLine = fun.endLine;
25129 }
25130 return fun.startLine < vimLineNum && vimLineNum < fun.endLine;
25131 })
25132 .reduce(function (res, next) {
25133 (next.args || []).forEach(function (name) {
25134 if (res.indexOf(name.value) === -1) {
25135 res.push(name.value);
25136 }
25137 });
25138 return res;
25139 }, [])
25140 .map(function (name) { return ({
25141 label: "a:" + name,
25142 kind: vscode_languageserver_1.CompletionItemKind.Variable,
25143 sortText: constant_1.sortTexts.one,
25144 insertText: "a:" + name,
25145 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
25146 }); });
25147 if (startLine !== -1 && endLine !== -1) {
25148 var funcLocalIdentifiers = this.getIdentifierItems(this.localVariables, constant_1.sortTexts.one)
25149 .concat(this.getIdentifierItems(this.globalVariables, constant_1.sortTexts.one))
25150 .filter(function (item) {
25151 if (!(/^l:/.test(item.label) || /^([a-zA-Z_]\w*(\.\w+)*)$/.test(item.label))) {
25152 return false;
25153 }
25154 var data = item.data;
25155 if (!data) {
25156 return false;
25157 }
25158 return data.some(function (i) { return startLine < i.startLine && i.startLine < endLine; });
25159 });
25160 return funArgs.concat(funcLocalIdentifiers);
25161 }
25162 return [];
25163 };
25164 /*
25165 * environment identifier
25166 *
25167 * - $xxx
25168 */
25169 Buffer.prototype.getEnvItems = function () {
25170 return Object.keys(this.envs).map(function (name) {
25171 return {
25172 label: name,
25173 insertText: name,
25174 sortText: constant_1.sortTexts.three,
25175 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
25176 };
25177 });
25178 };
25179 Buffer.prototype.resetProperties = function () {
25180 this.globalFunctions = {};
25181 this.scriptFunctions = {};
25182 this.globalFunctionRefs = {};
25183 this.scriptFunctionRefs = {};
25184 this.globalVariables = {};
25185 this.localVariables = {};
25186 this.globalVariableRefs = {};
25187 this.localVariableRefs = {};
25188 this.envs = {};
25189 this.envRefs = {};
25190 this.ranges = [];
25191 };
25192 Buffer.prototype.resolveCompletionItems = function (nodes) {
25193 var nodeList = [].concat(nodes);
25194 while (nodeList.length > 0) {
25195 var node = nodeList.pop();
25196 switch (node.type) {
25197 case NODE_TOPLEVEL:
25198 nodeList = nodeList.concat(node.body);
25199 break;
25200 // autocmd/command/map
25201 case NODE_EXCMD:
25202 this.takeFuncRefByExcmd(node);
25203 break;
25204 case NODE_EXCALL:
25205 case NODE_RETURN:
25206 case NODE_DELFUNCTION:
25207 case NODE_THROW:
25208 case NODE_EVAL:
25209 nodeList = nodeList.concat(node.left);
25210 break;
25211 case NODE_DOT:
25212 nodeList = nodeList.concat(node.left);
25213 this.takeIdentifier(node);
25214 break;
25215 case NODE_ECHO:
25216 case NODE_ECHON:
25217 case NODE_ECHOMSG:
25218 case NODE_ECHOERR:
25219 case NODE_UNLET:
25220 case NODE_LOCKVAR:
25221 case NODE_UNLOCKVAR:
25222 case NODE_EXECUTE:
25223 nodeList = nodeList.concat(node.list || []);
25224 break;
25225 case NODE_TERNARY:
25226 nodeList = nodeList.concat(node.cond || []);
25227 nodeList = nodeList.concat(node.left || []);
25228 nodeList = nodeList.concat(node.right || []);
25229 break;
25230 case NODE_IF:
25231 case NODE_ELSEIF:
25232 case NODE_ELSE:
25233 case NODE_WHILE:
25234 this.takeRange(node, ['endif', 'endwhile']);
25235 nodeList = nodeList.concat(node.body || []);
25236 nodeList = nodeList.concat(node.cond || []);
25237 nodeList = nodeList.concat(node.elseif || []);
25238 nodeList = nodeList.concat(node._else || []);
25239 break;
25240 case NODE_OR:
25241 case NODE_AND:
25242 case NODE_EQUAL:
25243 case NODE_EQUALCI:
25244 case NODE_EQUALCS:
25245 case NODE_NEQUAL:
25246 case NODE_NEQUALCI:
25247 case NODE_NEQUALCS:
25248 case NODE_GREATER:
25249 case NODE_GREATERCI:
25250 case NODE_GREATERCS:
25251 case NODE_GEQUAL:
25252 case NODE_GEQUALCI:
25253 case NODE_GEQUALCS:
25254 case NODE_SMALLER:
25255 case NODE_SMALLERCI:
25256 case NODE_SMALLERCS:
25257 case NODE_SEQUAL:
25258 case NODE_SEQUALCI:
25259 case NODE_SEQUALCS:
25260 case NODE_MATCH:
25261 case NODE_MATCHCI:
25262 case NODE_MATCHCS:
25263 case NODE_NOMATCH:
25264 case NODE_NOMATCHCI:
25265 case NODE_NOMATCHCS:
25266 case NODE_IS:
25267 case NODE_ISCI:
25268 case NODE_ISCS:
25269 case NODE_ISNOT:
25270 case NODE_ISNOTCI:
25271 case NODE_ISNOTCS:
25272 case NODE_CONCAT:
25273 case NODE_MULTIPLY:
25274 case NODE_DIVIDE:
25275 case NODE_REMAINDER:
25276 case NODE_NOT:
25277 case NODE_MINUS:
25278 case NODE_PLUS:
25279 case NODE_ADD:
25280 case NODE_SUBTRACT:
25281 case NODE_SUBSCRIPT:
25282 case NODE_METHOD:
25283 nodeList = nodeList.concat(node.left || []);
25284 nodeList = nodeList.concat(node.right || []);
25285 break;
25286 case NODE_FOR:
25287 nodeList = nodeList.concat(node.body || []);
25288 nodeList = nodeList.concat(node.right || []);
25289 this.takeFor([].concat(node.left || []).concat(node.list || []));
25290 this.takeRange(node, 'endfor');
25291 break;
25292 case NODE_TRY:
25293 case NODE_CATCH:
25294 case NODE_FINALLY:
25295 this.takeRange(node, 'endtry');
25296 nodeList = nodeList.concat(node.body || []);
25297 nodeList = nodeList.concat(node.catch || []);
25298 nodeList = nodeList.concat(node._finally || []);
25299 break;
25300 case NODE_FUNCTION:
25301 nodeList = nodeList.concat(node.body || []);
25302 if (node.left && node.left.type === NODE_DOT) {
25303 nodeList = nodeList.concat(node.left.left);
25304 }
25305 this.takeFunction(node);
25306 this.takeRange(node, 'endfunction');
25307 break;
25308 case NODE_LIST:
25309 nodeList = nodeList.concat(node.value || []);
25310 break;
25311 case NODE_DICT:
25312 nodeList = nodeList.concat((node.value || []).map(function (item) { return item[1]; }));
25313 break;
25314 case NODE_SLICE:
25315 case NODE_LAMBDA:
25316 nodeList = nodeList.concat(node.left || []);
25317 nodeList = nodeList.concat(node.rlist || []);
25318 break;
25319 case NODE_CALL:
25320 nodeList = nodeList.concat(node.rlist || []);
25321 if (node.left && node.left.type === NODE_DOT) {
25322 nodeList = nodeList.concat(node.left.left);
25323 }
25324 this.takeFuncRefByRef(node);
25325 this.takeFuncRef(node);
25326 break;
25327 case NODE_LET:
25328 case NODE_CONST:
25329 nodeList = nodeList.concat(node.right || []);
25330 if (node.left && node.left.type === NODE_DOT) {
25331 nodeList = nodeList.concat(node.left.left);
25332 }
25333 // not a function by function()/funcref()
25334 if (!this.takeFunctionByRef(node)) {
25335 this.takeLet(node);
25336 }
25337 break;
25338 case NODE_ENV:
25339 case NODE_IDENTIFIER:
25340 this.takeIdentifier(node);
25341 break;
25342 default:
25343 break;
25344 }
25345 }
25346 // log.info(`parse_buffer: ${JSON.stringify(this)}`)
25347 };
25348 Buffer.prototype.takeFunction = function (node) {
25349 var left = node.left, rlist = node.rlist, endfunction = node.endfunction;
25350 var name = this.getDotName(left);
25351 if (!name) {
25352 return;
25353 }
25354 var pos = this.getDotPos(left);
25355 if (!pos) {
25356 return;
25357 }
25358 var func = {
25359 name: name,
25360 args: rlist || [],
25361 startLine: pos.lnum,
25362 startCol: pos.col,
25363 endLine: endfunction.pos.lnum,
25364 endCol: endfunction.pos.col,
25365 range: {
25366 startLine: node.pos.lnum,
25367 startCol: node.pos.col,
25368 endLine: endfunction.pos.lnum,
25369 endCol: endfunction.pos.col,
25370 }
25371 };
25372 if (globalFuncPattern.test(name)) {
25373 if (!this.globalFunctions[name] || !Array.isArray(this.globalFunctions[name])) {
25374 this.globalFunctions[name] = [];
25375 }
25376 this.globalFunctions[name].push(func);
25377 }
25378 else if (scriptFuncPattern.test(name)) {
25379 if (!this.scriptFunctions[name] || !Array.isArray(this.scriptFunctions[name])) {
25380 this.scriptFunctions[name] = [];
25381 }
25382 this.scriptFunctions[name].push(func);
25383 }
25384 };
25385 /*
25386 * vim function
25387 *
25388 * - let funcName = function()
25389 * - let funcName = funcref()
25390 */
25391 Buffer.prototype.takeFunctionByRef = function (node) {
25392 var left = node.left, right = node.right;
25393 if (!right || right.type !== NODE_CALL) {
25394 return;
25395 }
25396 // is not function()/funcref()
25397 if (!right.left ||
25398 !right.left.value ||
25399 ["function", "funcref"].indexOf(right.left.value) === -1) {
25400 return;
25401 }
25402 var name = this.getDotName(left);
25403 if (!name) {
25404 return;
25405 }
25406 var pos = this.getDotPos(left);
25407 if (!pos) {
25408 return false;
25409 }
25410 var func = {
25411 name: name,
25412 args: [],
25413 startLine: pos.lnum,
25414 startCol: pos.col,
25415 endLine: pos.lnum,
25416 endCol: pos.col,
25417 range: {
25418 startLine: pos.lnum,
25419 startCol: pos.col,
25420 endLine: pos.lnum,
25421 endCol: pos.col,
25422 }
25423 };
25424 if (globalFuncPattern.test(name)) {
25425 if (!this.globalFunctions[name] || !Array.isArray(this.globalFunctions[name])) {
25426 this.globalFunctions[name] = [];
25427 }
25428 this.globalFunctions[name].push(func);
25429 return true;
25430 }
25431 else if (scriptFuncPattern.test(name)) {
25432 if (!this.scriptFunctions[name] || !Array.isArray(this.scriptFunctions[name])) {
25433 this.scriptFunctions[name] = [];
25434 }
25435 this.scriptFunctions[name].push(func);
25436 return true;
25437 }
25438 return false;
25439 };
25440 Buffer.prototype.takeFuncRef = function (node) {
25441 var left = node.left, rlist = node.rlist;
25442 var name = "";
25443 if (left.type === NODE_IDENTIFIER) {
25444 name = left.value;
25445 // <SID>funName
25446 }
25447 else if (left.type === NODE_CURLYNAME) {
25448 name = (left.value || []).map(function (item) { return item.value; }).join("");
25449 }
25450 else if (left.type === NODE_DOT) {
25451 name = this.getDotName(left);
25452 }
25453 if (!name) {
25454 return;
25455 }
25456 var pos = this.getDotPos(left);
25457 if (!pos) {
25458 return;
25459 }
25460 var funcRef = {
25461 name: name,
25462 args: rlist || [],
25463 startLine: pos.lnum,
25464 startCol: pos.col,
25465 };
25466 if (globalFuncPattern.test(name)) {
25467 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
25468 this.globalFunctionRefs[name] = [];
25469 }
25470 this.globalFunctionRefs[name].push(funcRef);
25471 }
25472 else if (scriptFuncPattern.test(name)) {
25473 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
25474 this.scriptFunctionRefs[name] = [];
25475 }
25476 this.scriptFunctionRefs[name].push(funcRef);
25477 }
25478 };
25479 /*
25480 * vim function ref
25481 * first value is function name
25482 *
25483 * - function('funcName')
25484 * - funcref('funcName')
25485 */
25486 Buffer.prototype.takeFuncRefByRef = function (node) {
25487 var left = node.left, rlist = node.rlist;
25488 var funcNode = rlist && rlist[0];
25489 if (!left ||
25490 ["function", "funcref"].indexOf(left.value) === -1 ||
25491 !funcNode ||
25492 !funcNode.pos ||
25493 typeof funcNode.value !== "string") {
25494 return;
25495 }
25496 // delete '/" of function name
25497 var name = funcNode.value.replace(/^['"]|['"]$/g, "");
25498 var funcRef = {
25499 name: name,
25500 args: [],
25501 startLine: funcNode.pos.lnum,
25502 startCol: funcNode.pos.col + 1,
25503 };
25504 if (globalFuncPattern.test(name)) {
25505 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
25506 this.globalFunctionRefs[name] = [];
25507 }
25508 this.globalFunctionRefs[name].push(funcRef);
25509 }
25510 else if (scriptFuncPattern.test(name)) {
25511 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
25512 this.scriptFunctionRefs[name] = [];
25513 }
25514 this.scriptFunctionRefs[name].push(funcRef);
25515 }
25516 };
25517 /*
25518 * FIXME: take function ref by
25519 *
25520 * - autocmd
25521 * - command
25522 * - map
25523 */
25524 Buffer.prototype.takeFuncRefByExcmd = function (node) {
25525 var pos = node.pos, str = node.str;
25526 if (!str) {
25527 return;
25528 }
25529 // tslint:disable-next-line: max-line-length
25530 if (!/^[ \t]*((au|aut|auto|autoc|autocm|autocmd|com|comm|comma|comman|command)!?[ \t]+|([a-zA-Z]*map!?[ \t]+.*?:))/.test(str)) {
25531 return;
25532 }
25533 var regFunc = /(<sid>[\w_#]+|[a-zA-Z_]:[\w_#]+|[\w_#]+)[ \t]*\(/gi;
25534 var m = regFunc.exec(str);
25535 while (m) {
25536 var name = m[1];
25537 if (name) {
25538 var funcRef = {
25539 name: name,
25540 args: [],
25541 startLine: pos.lnum,
25542 startCol: pos.col + m.index,
25543 };
25544 if (globalFuncPattern.test(name)) {
25545 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
25546 this.globalFunctionRefs[name] = [];
25547 }
25548 this.globalFunctionRefs[name].push(funcRef);
25549 }
25550 else if (scriptFuncPattern.test(name)) {
25551 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
25552 this.scriptFunctionRefs[name] = [];
25553 }
25554 this.scriptFunctionRefs[name].push(funcRef);
25555 }
25556 }
25557 m = regFunc.exec(str);
25558 }
25559 };
25560 Buffer.prototype.takeLet = function (node) {
25561 var pos = this.getDotPos(node.left);
25562 var name = this.getDotName(node.left);
25563 if (!pos || !name) {
25564 return;
25565 }
25566 var identifier = {
25567 name: name,
25568 startLine: pos.lnum,
25569 startCol: pos.col,
25570 };
25571 if (localVariablePattern.test(name)) {
25572 if (!this.localVariables[name] || !Array.isArray(this.localVariables[name])) {
25573 this.localVariables[name] = [];
25574 }
25575 this.localVariables[name].push(identifier);
25576 }
25577 else if (globalVariablePattern.test(name)) {
25578 if (!this.globalVariables[name] || !Array.isArray(this.globalVariables[name])) {
25579 this.globalVariables[name] = [];
25580 }
25581 this.globalVariables[name].push(identifier);
25582 }
25583 else if (envPattern.test(name)) {
25584 if (!this.envs[name] || !Array.isArray(this.envs[name])) {
25585 this.envs[name] = [];
25586 }
25587 this.envs[name].push(identifier);
25588 }
25589 };
25590 Buffer.prototype.takeRange = function (node, keys) {
25591 var _this = this;
25592 [].concat(keys).forEach(function (key) {
25593 if (node.pos && node[key] && node[key].pos) {
25594 _this.ranges.push({
25595 startLine: node.pos.lnum,
25596 startCol: node.pos.col,
25597 endLine: node[key].pos.lnum,
25598 endCol: node[key].pos.col
25599 });
25600 }
25601 });
25602 };
25603 Buffer.prototype.takeFor = function (nodes) {
25604 var _this = this;
25605 nodes.forEach(function (node) {
25606 if (node.type !== NODE_IDENTIFIER || !node.pos) {
25607 return;
25608 }
25609 var name = node.value;
25610 var identifier = {
25611 name: name,
25612 startLine: node.pos.lnum,
25613 startCol: node.pos.col,
25614 };
25615 if (localVariablePattern.test(name)) {
25616 if (!_this.localVariables[name] || !Array.isArray(_this.localVariables[name])) {
25617 _this.localVariables[name] = [];
25618 }
25619 _this.localVariables[name].push(identifier);
25620 }
25621 else if (globalVariablePattern.test(name)) {
25622 if (!_this.globalVariables[name] || !Array.isArray(_this.globalVariables[name])) {
25623 _this.globalVariables[name] = [];
25624 }
25625 _this.globalVariables[name].push(identifier);
25626 }
25627 else if (envPattern.test(name)) {
25628 if (!_this.envs[name] || !Array.isArray(_this.envs[name])) {
25629 _this.envs[name] = [];
25630 }
25631 _this.envs[name].push(identifier);
25632 }
25633 });
25634 };
25635 Buffer.prototype.takeIdentifier = function (node) {
25636 var name = this.getDotName(node);
25637 if (!name) {
25638 return;
25639 }
25640 var pos = this.getDotPos(node);
25641 if (!pos) {
25642 return;
25643 }
25644 var identifier = {
25645 name: name,
25646 startLine: pos.lnum,
25647 startCol: pos.col,
25648 };
25649 if (globalVariablePattern.test(name)) {
25650 if (!this.globalVariableRefs[name] || !Array.isArray(this.globalVariableRefs[name])) {
25651 this.globalVariableRefs[name] = [];
25652 }
25653 this.globalVariableRefs[name].push(identifier);
25654 }
25655 else if (localVariablePattern.test(name)) {
25656 if (!this.localVariableRefs[name] || !Array.isArray(this.localVariableRefs[name])) {
25657 this.localVariableRefs[name] = [];
25658 }
25659 this.localVariableRefs[name].push(identifier);
25660 }
25661 else if (envPattern.test(name)) {
25662 if (!this.envRefs[name] || !Array.isArray(this.envRefs[name])) {
25663 this.envRefs[name] = [];
25664 }
25665 this.envRefs[name].push(identifier);
25666 }
25667 };
25668 Buffer.prototype.getDotPos = function (node) {
25669 if (!node) {
25670 return null;
25671 }
25672 if (node.type === NODE_IDENTIFIER ||
25673 node.type === NODE_ENV ||
25674 node.type === NODE_CURLYNAME) {
25675 return node.pos;
25676 }
25677 var left = node.left;
25678 return this.getDotPos(left);
25679 };
25680 Buffer.prototype.getDotName = function (node) {
25681 if (node.type === NODE_IDENTIFIER ||
25682 node.type === NODE_STRING ||
25683 node.type === NODE_NUMBER ||
25684 node.type === NODE_ENV) {
25685 return node.value;
25686 }
25687 else if (node.type === NODE_CURLYNAME) {
25688 return (node.value || []).map(function (item) { return item.value; }).join("");
25689 }
25690 else if (node.type === NODE_SUBSCRIPT) {
25691 return this.getDotName(node.left);
25692 }
25693 var left = node.left, right = node.right;
25694 var list = [];
25695 if (left) {
25696 list.push(this.getDotName(left));
25697 }
25698 if (right) {
25699 list.push(this.getDotName(right));
25700 }
25701 return list.join(".");
25702 };
25703 Buffer.prototype.getFunctionItems = function (items, sortText) {
25704 return Object.keys(items).map(function (name) {
25705 var list = items[name];
25706 var args = "${1}";
25707 if (list[0] && list[0].args && list[0].args.length > 0) {
25708 args = (list[0].args || []).reduce(function (res, next, idx) {
25709 // FIXME: resove next.value is not string
25710 var value = typeof next.value !== "string" ? "param" : next.value;
25711 if (idx === 0) {
25712 return "${" + (idx + 1) + ":" + value + "}";
25713 }
25714 return res + ", ${" + (idx + 1) + ":" + value + "}";
25715 }, "");
25716 }
25717 var label = name;
25718 if (/^<SID>/.test(name)) {
25719 label = name.replace(/^<SID>/, "s:");
25720 }
25721 return {
25722 label: label,
25723 detail: "any",
25724 sortText: sortText,
25725 documentation: "User defined function",
25726 kind: vscode_languageserver_1.CompletionItemKind.Function,
25727 insertText: label + "(" + args + ")${0}",
25728 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
25729 };
25730 });
25731 };
25732 Buffer.prototype.getIdentifierItems = function (items, sortText) {
25733 var _this = this;
25734 return Object.keys(items)
25735 .filter(function (name) { return !_this.globalFunctions[name] && !_this.scriptFunctions[name]; })
25736 .map(function (name) {
25737 var list = items[name];
25738 return {
25739 label: name,
25740 kind: vscode_languageserver_1.CompletionItemKind.Variable,
25741 sortText: sortText,
25742 documentation: "User defined variable",
25743 insertText: name,
25744 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
25745 data: list || [],
25746 };
25747 });
25748 };
25749 return Buffer;
25750}());
25751exports.Buffer = Buffer;
25752
25753
25754/***/ }),
25755/* 150 */
25756/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
25757
25758"use strict";
25759
25760Object.defineProperty(exports, "__esModule", ({ value: true }));
25761var patterns_1 = __webpack_require__(53);
25762var util_1 = __webpack_require__(46);
25763var builtin_1 = __webpack_require__(58);
25764var provider_1 = __webpack_require__(139);
25765function provider(line) {
25766 if (util_1.isSomeMatchPattern(patterns_1.featurePattern, line)) {
25767 return builtin_1.builtinDocs.getVimFeatures();
25768 }
25769 return [];
25770}
25771provider_1.useProvider(provider);
25772
25773
25774/***/ }),
25775/* 151 */
25776/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
25777
25778"use strict";
25779
25780Object.defineProperty(exports, "__esModule", ({ value: true }));
25781var patterns_1 = __webpack_require__(53);
25782var builtin_1 = __webpack_require__(58);
25783var provider_1 = __webpack_require__(139);
25784function provider(line) {
25785 if (!patterns_1.highlightLinkPattern.test(line) &&
25786 !patterns_1.highlightValuePattern.test(line) &&
25787 patterns_1.highlightPattern.test(line)) {
25788 return builtin_1.builtinDocs.getHighlightArgKeys().filter(function (item) {
25789 return line.indexOf(item.label) === -1;
25790 });
25791 }
25792 return [];
25793}
25794provider_1.useProvider(provider);
25795
25796
25797/***/ }),
25798/* 152 */
25799/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
25800
25801"use strict";
25802
25803Object.defineProperty(exports, "__esModule", ({ value: true }));
25804var patterns_1 = __webpack_require__(53);
25805var builtin_1 = __webpack_require__(58);
25806var provider_1 = __webpack_require__(139);
25807function provider(line) {
25808 var m = line.match(patterns_1.highlightValuePattern);
25809 if (!patterns_1.highlightLinkPattern.test(line) && m) {
25810 var values = builtin_1.builtinDocs.getHighlightArgValues();
25811 var keyName = m[3];
25812 if (values[keyName]) {
25813 return values[keyName];
25814 }
25815 }
25816 return [];
25817}
25818provider_1.useProvider(provider);
25819
25820
25821/***/ }),
25822/* 153 */
25823/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
25824
25825"use strict";
25826
25827var __assign = (this && this.__assign) || function () {
25828 __assign = Object.assign || function(t) {
25829 for (var s, i = 1, n = arguments.length; i < n; i++) {
25830 s = arguments[i];
25831 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
25832 t[p] = s[p];
25833 }
25834 return t;
25835 };
25836 return __assign.apply(this, arguments);
25837};
25838var __importDefault = (this && this.__importDefault) || function (mod) {
25839 return (mod && mod.__esModule) ? mod : { "default": mod };
25840};
25841Object.defineProperty(exports, "__esModule", ({ value: true }));
25842var patterns_1 = __webpack_require__(53);
25843var util_1 = __webpack_require__(46);
25844var config_1 = __importDefault(__webpack_require__(54));
25845var workspaces_1 = __webpack_require__(147);
25846var provider_1 = __webpack_require__(139);
25847function provider(line, uri, position) {
25848 if (util_1.isSomeMatchPattern(patterns_1.notIdentifierPattern, line)) {
25849 return [];
25850 }
25851 else if (/\b[gbsla]:\w*$/.test(line)) {
25852 var list = [];
25853 if (/\bg:\w*$/.test(line)) {
25854 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25855 .filter(function (item) { return /^g:/.test(item.label); });
25856 }
25857 else if (/\bb:\w*$/.test(line)) {
25858 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25859 .filter(function (item) { return /^b:/.test(item.label); });
25860 }
25861 else if (/\bs:\w*$/.test(line)) {
25862 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25863 .filter(function (item) { return /^s:/.test(item.label); });
25864 }
25865 else if (/\bl:\w*$/.test(line)) {
25866 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25867 .filter(function (item) { return /^l:/.test(item.label); });
25868 }
25869 else if (/\ba:\w*$/.test(line)) {
25870 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25871 .filter(function (item) { return /^a:/.test(item.label); });
25872 }
25873 return list.map(function (item) { return (__assign(__assign({}, item), { insertText: !/:/.test(config_1.default.iskeyword) ? item.insertText.slice(2) : item.insertText })); });
25874 }
25875 else if (/\B:\w*$/.test(line)) {
25876 return workspaces_1.workspace.getIdentifierItems(uri, position.line)
25877 .filter(function (item) { return /:/.test(item.label); })
25878 .map(function (item) {
25879 var m = line.match(/:[^:]*$/);
25880 return __assign(__assign({}, item), {
25881 // delete the `:` symbol
25882 textEdit: {
25883 range: {
25884 start: {
25885 line: position.line,
25886 character: line.length - m[0].length,
25887 },
25888 end: {
25889 line: position.line,
25890 character: line.length - m[0].length + 1,
25891 },
25892 },
25893 newText: item.insertText,
25894 } });
25895 });
25896 }
25897 return workspaces_1.workspace.getIdentifierItems(uri, position.line);
25898}
25899provider_1.useProvider(provider);
25900
25901
25902/***/ }),
25903/* 154 */
25904/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
25905
25906"use strict";
25907
25908var __assign = (this && this.__assign) || function () {
25909 __assign = Object.assign || function(t) {
25910 for (var s, i = 1, n = arguments.length; i < n; i++) {
25911 s = arguments[i];
25912 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
25913 t[p] = s[p];
25914 }
25915 return t;
25916 };
25917 return __assign.apply(this, arguments);
25918};
25919Object.defineProperty(exports, "__esModule", ({ value: true }));
25920var patterns_1 = __webpack_require__(53);
25921var builtin_1 = __webpack_require__(58);
25922var provider_1 = __webpack_require__(139);
25923function provider(line) {
25924 if (patterns_1.mapCommandPattern.test(line)) {
25925 if (/<$/.test(line)) {
25926 return builtin_1.builtinDocs.getVimMapArgs().map(function (item) { return (__assign(__assign({}, item), { insertText: item.insertText.slice(1) })); });
25927 }
25928 return builtin_1.builtinDocs.getVimMapArgs();
25929 }
25930 return [];
25931}
25932provider_1.useProvider(provider);
25933
25934
25935/***/ }),
25936/* 155 */
25937/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
25938
25939"use strict";
25940
25941Object.defineProperty(exports, "__esModule", ({ value: true }));
25942var patterns_1 = __webpack_require__(53);
25943var util_1 = __webpack_require__(46);
25944var builtin_1 = __webpack_require__(58);
25945var provider_1 = __webpack_require__(139);
25946function provider(line) {
25947 if (util_1.isSomeMatchPattern(patterns_1.optionPattern, line)) {
25948 return builtin_1.builtinDocs.getVimOptions();
25949 }
25950 return [];
25951}
25952provider_1.useProvider(provider);
25953
25954
25955/***/ }),
25956/* 156 */
25957/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
25958
25959"use strict";
25960
25961Object.defineProperty(exports, "__esModule", ({ value: true }));
25962exports.completionResolveProvider = void 0;
25963var builtin_1 = __webpack_require__(58);
25964var completionResolveProvider = function (params) {
25965 return builtin_1.builtinDocs.getDocumentByCompletionItem(params);
25966};
25967exports.completionResolveProvider = completionResolveProvider;
25968
25969
25970/***/ }),
25971/* 157 */
25972/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
25973
25974"use strict";
25975
25976Object.defineProperty(exports, "__esModule", ({ value: true }));
25977exports.definitionProvider = void 0;
25978var util_1 = __webpack_require__(46);
25979var documents_1 = __webpack_require__(55);
25980var workspaces_1 = __webpack_require__(147);
25981var definitionProvider = function (params) {
25982 var textDocument = params.textDocument, position = params.position;
25983 var doc = documents_1.documents.get(textDocument.uri);
25984 if (!doc) {
25985 return null;
25986 }
25987 var words = util_1.getWordFromPosition(doc, position);
25988 if (!words) {
25989 return null;
25990 }
25991 var currentName = words.word;
25992 if (/\./.test(words.right)) {
25993 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
25994 currentName = words.word.replace(tail, "");
25995 }
25996 return workspaces_1.workspace.getLocations(currentName, doc.uri, position, "definition").locations;
25997};
25998exports.definitionProvider = definitionProvider;
25999
26000
26001/***/ }),
26002/* 158 */
26003/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
26004
26005"use strict";
26006
26007Object.defineProperty(exports, "__esModule", ({ value: true }));
26008exports.documentHighlightProvider = void 0;
26009var util_1 = __webpack_require__(46);
26010var documents_1 = __webpack_require__(55);
26011var workspaces_1 = __webpack_require__(147);
26012exports.documentHighlightProvider = (function (params) {
26013 var textDocument = params.textDocument, position = params.position;
26014 var doc = documents_1.documents.get(textDocument.uri);
26015 if (!doc) {
26016 return [];
26017 }
26018 var words = util_1.getWordFromPosition(doc, position);
26019 if (!words) {
26020 return [];
26021 }
26022 var currentName = words.word;
26023 if (/\./.test(words.right)) {
26024 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
26025 currentName = words.word.replace(tail, "");
26026 }
26027 var defs = workspaces_1.workspace.getLocationsByUri(currentName, doc.uri, position, "definition");
26028 var refs = workspaces_1.workspace.getLocationsByUri(currentName, doc.uri, position, "references");
26029 return defs.locations.concat(refs.locations)
26030 .map(function (location) {
26031 return {
26032 range: location.range,
26033 };
26034 });
26035});
26036
26037
26038/***/ }),
26039/* 159 */
26040/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
26041
26042"use strict";
26043
26044Object.defineProperty(exports, "__esModule", ({ value: true }));
26045exports.foldingRangeProvider = void 0;
26046var workspaces_1 = __webpack_require__(147);
26047var foldingRangeProvider = function (params) {
26048 var res = [];
26049 var textDocument = params.textDocument;
26050 var buffer = workspaces_1.workspace.getBufferByUri(textDocument.uri);
26051 if (!buffer) {
26052 return res;
26053 }
26054 var globalFunctions = buffer.getGlobalFunctions();
26055 var scriptFunctions = buffer.getScriptFunctions();
26056 return Object.values(globalFunctions).concat(Object.values(scriptFunctions))
26057 .reduce(function (pre, cur) {
26058 return pre.concat(cur);
26059 }, [])
26060 .map(function (func) {
26061 return {
26062 startLine: func.startLine - 1,
26063 startCharacter: func.startCol - 1,
26064 endLine: func.endLine - 1,
26065 endCharacter: func.endCol - 1,
26066 kind: "region",
26067 };
26068 });
26069};
26070exports.foldingRangeProvider = foldingRangeProvider;
26071
26072
26073/***/ }),
26074/* 160 */
26075/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
26076
26077"use strict";
26078
26079Object.defineProperty(exports, "__esModule", ({ value: true }));
26080exports.hoverProvider = void 0;
26081var util_1 = __webpack_require__(46);
26082var builtin_1 = __webpack_require__(58);
26083var documents_1 = __webpack_require__(55);
26084var hoverProvider = function (params) {
26085 var textDocument = params.textDocument, position = params.position;
26086 var doc = documents_1.documents.get(textDocument.uri);
26087 if (!doc) {
26088 return;
26089 }
26090 var words = util_1.getWordFromPosition(doc, position);
26091 if (!words) {
26092 return;
26093 }
26094 return builtin_1.builtinDocs.getHoverDocument(words.word, words.wordLeft, words.wordRight);
26095};
26096exports.hoverProvider = hoverProvider;
26097
26098
26099/***/ }),
26100/* 161 */
26101/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
26102
26103"use strict";
26104
26105Object.defineProperty(exports, "__esModule", ({ value: true }));
26106exports.referencesProvider = void 0;
26107var util_1 = __webpack_require__(46);
26108var documents_1 = __webpack_require__(55);
26109var workspaces_1 = __webpack_require__(147);
26110var referencesProvider = function (params) {
26111 var textDocument = params.textDocument, position = params.position;
26112 var doc = documents_1.documents.get(textDocument.uri);
26113 if (!doc) {
26114 return null;
26115 }
26116 var words = util_1.getWordFromPosition(doc, position);
26117 if (!words) {
26118 return null;
26119 }
26120 var currentName = words.word;
26121 if (/\./.test(words.right)) {
26122 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
26123 currentName = words.word.replace(tail, "");
26124 }
26125 return workspaces_1.workspace.getLocations(currentName, doc.uri, position, "references").locations;
26126};
26127exports.referencesProvider = referencesProvider;
26128
26129
26130/***/ }),
26131/* 162 */
26132/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
26133
26134"use strict";
26135
26136Object.defineProperty(exports, "__esModule", ({ value: true }));
26137exports.renameProvider = exports.prepareProvider = void 0;
26138var vscode_languageserver_1 = __webpack_require__(2);
26139var util_1 = __webpack_require__(46);
26140var documents_1 = __webpack_require__(55);
26141var workspaces_1 = __webpack_require__(147);
26142var prepareProvider = function (params) {
26143 var textDocument = params.textDocument, position = params.position;
26144 var doc = documents_1.documents.get(textDocument.uri);
26145 if (!doc) {
26146 return null;
26147 }
26148 var words = util_1.getWordFromPosition(doc, position);
26149 if (!words) {
26150 return null;
26151 }
26152 var currentName = words.word;
26153 if (/\./.test(words.right)) {
26154 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
26155 currentName = words.word.replace(tail, "");
26156 }
26157 return {
26158 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)),
26159 placeholder: currentName,
26160 };
26161};
26162exports.prepareProvider = prepareProvider;
26163var renameProvider = function (params) {
26164 var textDocument = params.textDocument, position = params.position, newName = params.newName;
26165 var doc = documents_1.documents.get(textDocument.uri);
26166 if (!doc) {
26167 return null;
26168 }
26169 var words = util_1.getWordFromPosition(doc, position);
26170 if (!words) {
26171 return null;
26172 }
26173 var currentName = words.word;
26174 if (/\./.test(words.right)) {
26175 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
26176 currentName = words.word.replace(tail, "");
26177 }
26178 var changes = {};
26179 var isChange = false;
26180 workspaces_1.workspace.getLocations(currentName, doc.uri, position, "definition").locations
26181 .forEach(function (l) {
26182 isChange = true;
26183 if (!changes[l.uri] || !Array.isArray(changes[l.uri])) {
26184 changes[l.uri] = [];
26185 }
26186 changes[l.uri].push({
26187 newText: /^a:/.test(newName) ? newName.slice(2) : newName,
26188 range: l.range,
26189 });
26190 });
26191 var refs = workspaces_1.workspace.getLocations(currentName, doc.uri, position, "references");
26192 refs.locations.forEach(function (l) {
26193 isChange = true;
26194 if (!changes[l.uri] || !Array.isArray(changes[l.uri])) {
26195 changes[l.uri] = [];
26196 }
26197 changes[l.uri].push({
26198 newText: refs.isFunArg ? "a:" + newName : newName,
26199 range: l.range,
26200 });
26201 });
26202 if (isChange) {
26203 return {
26204 changes: changes,
26205 };
26206 }
26207 return null;
26208};
26209exports.renameProvider = renameProvider;
26210
26211
26212/***/ }),
26213/* 163 */
26214/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
26215
26216"use strict";
26217
26218Object.defineProperty(exports, "__esModule", ({ value: true }));
26219exports.signatureHelpProvider = void 0;
26220var vscode_languageserver_1 = __webpack_require__(2);
26221var patterns_1 = __webpack_require__(53);
26222var builtin_1 = __webpack_require__(58);
26223var documents_1 = __webpack_require__(55);
26224var signatureHelpProvider = function (params) {
26225 var textDocument = params.textDocument, position = params.position;
26226 var doc = documents_1.documents.get(textDocument.uri);
26227 if (!doc) {
26228 return;
26229 }
26230 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)));
26231 // comment line
26232 if (patterns_1.commentPattern.test(currentLine)) {
26233 return;
26234 }
26235 var preSegment = currentLine.slice(0, position.character);
26236 var m = preSegment.match(/([\w#&:]+)[ \t]*\(([^()]*|\([^)]*\))*$/);
26237 if (!m) {
26238 return;
26239 }
26240 var functionName = m["1"];
26241 var placeIdx = m[0].split(",").length - 1;
26242 return builtin_1.builtinDocs.getSignatureHelpByName(functionName, placeIdx);
26243};
26244exports.signatureHelpProvider = signatureHelpProvider;
26245
26246
26247/***/ }),
26248/* 164 */
26249/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
26250
26251"use strict";
26252
26253var __importDefault = (this && this.__importDefault) || function (mod) {
26254 return (mod && mod.__esModule) ? mod : { "default": mod };
26255};
26256Object.defineProperty(exports, "__esModule", ({ value: true }));
26257exports.scan = exports.unsubscribe = exports.next = void 0;
26258var child_process_1 = __importDefault(__webpack_require__(41));
26259var path_1 = __webpack_require__(13);
26260var rxjs_1 = __webpack_require__(165);
26261var waitMap_1 = __webpack_require__(267);
26262var operators_1 = __webpack_require__(268);
26263var vscode_uri_1 = __webpack_require__(148);
26264var logger_1 = __importDefault(__webpack_require__(136));
26265var util_1 = __webpack_require__(46);
26266var diagnostic_1 = __webpack_require__(366);
26267var config_1 = __importDefault(__webpack_require__(54));
26268var workspaces_1 = __webpack_require__(147);
26269var log = logger_1.default("parser");
26270var parserHandles = {};
26271var indexes = {};
26272var origin$ = new rxjs_1.Subject();
26273var scanProcess;
26274var isScanRuntimepath = false;
26275function send(params) {
26276 if (!scanProcess) {
26277 log.log('scan process do not exists');
26278 return;
26279 }
26280 if (scanProcess.signalCode) {
26281 log.log("scan process signal code: " + scanProcess.signalCode);
26282 return;
26283 }
26284 if (scanProcess.killed) {
26285 log.log('scan process was killed');
26286 return;
26287 }
26288 scanProcess.send(params, function (err) {
26289 if (err) {
26290 log.warn("Send error: " + (err.stack || err.message || err.name));
26291 }
26292 });
26293}
26294function startIndex() {
26295 if (scanProcess) {
26296 return;
26297 }
26298 scanProcess = child_process_1.default.fork(path_1.join(__dirname, "scan.js"), ["--node-ipc"]);
26299 scanProcess.on("message", function (mess) {
26300 var data = mess.data, msglog = mess.msglog;
26301 if (data) {
26302 if (!workspaces_1.workspace.isExistsBuffer(data.uri)) {
26303 workspaces_1.workspace.updateBuffer(data.uri, data.node);
26304 }
26305 }
26306 if (msglog) {
26307 log.info("child_log: " + msglog);
26308 }
26309 });
26310 scanProcess.on("error", function (err) {
26311 log.warn("" + (err.stack || err.message || err));
26312 });
26313 scanProcess.on('exit', function (code, signal) {
26314 log.log("exit: " + code + ", signal: " + signal);
26315 });
26316 scanProcess.on('close', function (code, signal) {
26317 log.log("close: " + code + ", signal: " + signal);
26318 });
26319 scanProcess.on('uncaughtException', function (err) {
26320 log.log("Uncaught exception: " + (err.stack || err.message || err.name || err));
26321 });
26322 scanProcess.on('disconnect', function () {
26323 log.log("disconnect");
26324 });
26325 send({
26326 config: {
26327 gap: config_1.default.indexes.gap,
26328 count: config_1.default.indexes.count,
26329 projectRootPatterns: config_1.default.indexes.projectRootPatterns,
26330 },
26331 });
26332}
26333function next(textDoc) {
26334 if (!parserHandles[textDoc.uri]) {
26335 var uri_1 = textDoc.uri;
26336 parserHandles[uri_1] = origin$.pipe(operators_1.filter(function (td) { return uri_1 === td.uri; }), operators_1.switchMap(function (td) {
26337 return rxjs_1.timer(100).pipe(operators_1.map(function () { return td; }));
26338 }), waitMap_1.waitMap(function (td) {
26339 return rxjs_1.from(util_1.handleParse(td));
26340 }, true)).subscribe(function (res) {
26341 if (config_1.default.diagnostic.enable) {
26342 // handle diagnostic
26343 diagnostic_1.handleDiagnostic(textDoc, res[1]);
26344 }
26345 // handle node
26346 workspaces_1.workspace.updateBuffer(uri_1, res[0]);
26347 // scan project
26348 if (!indexes[uri_1]) {
26349 indexes[uri_1] = true;
26350 send({
26351 uri: uri_1,
26352 });
26353 if (!isScanRuntimepath) {
26354 isScanRuntimepath = true;
26355 scan([config_1.default.vimruntime].concat(config_1.default.runtimepath));
26356 }
26357 }
26358 }, function (err) {
26359 log.warn("" + (err.stack || err.message || err));
26360 });
26361 }
26362 if (!scanProcess) {
26363 startIndex();
26364 }
26365 origin$.next(textDoc);
26366}
26367exports.next = next;
26368function unsubscribe(textDoc) {
26369 if (parserHandles[textDoc.uri] !== undefined) {
26370 parserHandles[textDoc.uri].unsubscribe();
26371 }
26372 parserHandles[textDoc.uri] = undefined;
26373}
26374exports.unsubscribe = unsubscribe;
26375// scan directory
26376function scan(paths) {
26377 if (!scanProcess) {
26378 startIndex();
26379 }
26380 if (config_1.default.indexes.runtimepath) {
26381 var list = [].concat(paths);
26382 for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {
26383 var p = list_1[_i];
26384 if (!p) {
26385 continue;
26386 }
26387 p = p.trim();
26388 if (!p || p === "/") {
26389 continue;
26390 }
26391 send({
26392 uri: vscode_uri_1.URI.file(path_1.join(p, "f")).toString(),
26393 });
26394 }
26395 }
26396}
26397exports.scan = scan;
26398
26399
26400/***/ }),
26401/* 165 */
26402/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
26403
26404"use strict";
26405__webpack_require__.r(__webpack_exports__);
26406/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26407/* harmony export */ "Observable": () => /* reexport safe */ _internal_Observable__WEBPACK_IMPORTED_MODULE_0__.Observable,
26408/* harmony export */ "ConnectableObservable": () => /* reexport safe */ _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__.ConnectableObservable,
26409/* harmony export */ "GroupedObservable": () => /* reexport safe */ _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__.GroupedObservable,
26410/* harmony export */ "observable": () => /* reexport safe */ _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__.observable,
26411/* harmony export */ "Subject": () => /* reexport safe */ _internal_Subject__WEBPACK_IMPORTED_MODULE_4__.Subject,
26412/* harmony export */ "BehaviorSubject": () => /* reexport safe */ _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__.BehaviorSubject,
26413/* harmony export */ "ReplaySubject": () => /* reexport safe */ _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__.ReplaySubject,
26414/* harmony export */ "AsyncSubject": () => /* reexport safe */ _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__.AsyncSubject,
26415/* harmony export */ "asapScheduler": () => /* reexport safe */ _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__.asap,
26416/* harmony export */ "asyncScheduler": () => /* reexport safe */ _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__.async,
26417/* harmony export */ "queueScheduler": () => /* reexport safe */ _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__.queue,
26418/* harmony export */ "animationFrameScheduler": () => /* reexport safe */ _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__.animationFrame,
26419/* harmony export */ "VirtualTimeScheduler": () => /* reexport safe */ _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__.VirtualTimeScheduler,
26420/* harmony export */ "VirtualAction": () => /* reexport safe */ _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__.VirtualAction,
26421/* harmony export */ "Scheduler": () => /* reexport safe */ _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__.Scheduler,
26422/* harmony export */ "Subscription": () => /* reexport safe */ _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__.Subscription,
26423/* harmony export */ "Subscriber": () => /* reexport safe */ _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__.Subscriber,
26424/* harmony export */ "Notification": () => /* reexport safe */ _internal_Notification__WEBPACK_IMPORTED_MODULE_16__.Notification,
26425/* harmony export */ "NotificationKind": () => /* reexport safe */ _internal_Notification__WEBPACK_IMPORTED_MODULE_16__.NotificationKind,
26426/* harmony export */ "pipe": () => /* reexport safe */ _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__.pipe,
26427/* harmony export */ "noop": () => /* reexport safe */ _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__.noop,
26428/* harmony export */ "identity": () => /* reexport safe */ _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__.identity,
26429/* harmony export */ "isObservable": () => /* reexport safe */ _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__.isObservable,
26430/* harmony export */ "ArgumentOutOfRangeError": () => /* reexport safe */ _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__.ArgumentOutOfRangeError,
26431/* harmony export */ "EmptyError": () => /* reexport safe */ _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__.EmptyError,
26432/* harmony export */ "ObjectUnsubscribedError": () => /* reexport safe */ _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__.ObjectUnsubscribedError,
26433/* harmony export */ "UnsubscriptionError": () => /* reexport safe */ _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__.UnsubscriptionError,
26434/* harmony export */ "TimeoutError": () => /* reexport safe */ _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__.TimeoutError,
26435/* harmony export */ "bindCallback": () => /* reexport safe */ _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__.bindCallback,
26436/* harmony export */ "bindNodeCallback": () => /* reexport safe */ _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__.bindNodeCallback,
26437/* harmony export */ "combineLatest": () => /* reexport safe */ _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__.combineLatest,
26438/* harmony export */ "concat": () => /* reexport safe */ _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__.concat,
26439/* harmony export */ "defer": () => /* reexport safe */ _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__.defer,
26440/* harmony export */ "empty": () => /* reexport safe */ _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__.empty,
26441/* harmony export */ "forkJoin": () => /* reexport safe */ _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__.forkJoin,
26442/* harmony export */ "from": () => /* reexport safe */ _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__.from,
26443/* harmony export */ "fromEvent": () => /* reexport safe */ _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__.fromEvent,
26444/* harmony export */ "fromEventPattern": () => /* reexport safe */ _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__.fromEventPattern,
26445/* harmony export */ "generate": () => /* reexport safe */ _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__.generate,
26446/* harmony export */ "iif": () => /* reexport safe */ _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__.iif,
26447/* harmony export */ "interval": () => /* reexport safe */ _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__.interval,
26448/* harmony export */ "merge": () => /* reexport safe */ _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__.merge,
26449/* harmony export */ "never": () => /* reexport safe */ _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__.never,
26450/* harmony export */ "of": () => /* reexport safe */ _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__.of,
26451/* harmony export */ "onErrorResumeNext": () => /* reexport safe */ _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__.onErrorResumeNext,
26452/* harmony export */ "pairs": () => /* reexport safe */ _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__.pairs,
26453/* harmony export */ "partition": () => /* reexport safe */ _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__.partition,
26454/* harmony export */ "race": () => /* reexport safe */ _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__.race,
26455/* harmony export */ "range": () => /* reexport safe */ _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__.range,
26456/* harmony export */ "throwError": () => /* reexport safe */ _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__.throwError,
26457/* harmony export */ "timer": () => /* reexport safe */ _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__.timer,
26458/* harmony export */ "using": () => /* reexport safe */ _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__.using,
26459/* harmony export */ "zip": () => /* reexport safe */ _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__.zip,
26460/* harmony export */ "scheduled": () => /* reexport safe */ _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__.scheduled,
26461/* harmony export */ "EMPTY": () => /* reexport safe */ _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__.EMPTY,
26462/* harmony export */ "NEVER": () => /* reexport safe */ _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__.NEVER,
26463/* harmony export */ "config": () => /* reexport safe */ _internal_config__WEBPACK_IMPORTED_MODULE_52__.config
26464/* harmony export */ });
26465/* harmony import */ var _internal_Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
26466/* harmony import */ var _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(183);
26467/* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
26468/* harmony import */ var _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(180);
26469/* harmony import */ var _internal_Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(185);
26470/* harmony import */ var _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(189);
26471/* harmony import */ var _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(190);
26472/* harmony import */ var _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(207);
26473/* harmony import */ var _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(208);
26474/* harmony import */ var _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(212);
26475/* harmony import */ var _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(200);
26476/* harmony import */ var _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(213);
26477/* harmony import */ var _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(216);
26478/* harmony import */ var _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(203);
26479/* harmony import */ var _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(174);
26480/* harmony import */ var _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(168);
26481/* harmony import */ var _internal_Notification__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(192);
26482/* harmony import */ var _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(181);
26483/* harmony import */ var _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(217);
26484/* harmony import */ var _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(182);
26485/* harmony import */ var _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(218);
26486/* harmony import */ var _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(219);
26487/* harmony import */ var _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(220);
26488/* harmony import */ var _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(186);
26489/* harmony import */ var _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(176);
26490/* harmony import */ var _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(221);
26491/* harmony import */ var _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(222);
26492/* harmony import */ var _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(224);
26493/* harmony import */ var _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(225);
26494/* harmony import */ var _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(236);
26495/* harmony import */ var _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(247);
26496/* harmony import */ var _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(199);
26497/* harmony import */ var _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(248);
26498/* harmony import */ var _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(240);
26499/* harmony import */ var _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(249);
26500/* harmony import */ var _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(250);
26501/* harmony import */ var _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(251);
26502/* harmony import */ var _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(252);
26503/* harmony import */ var _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(253);
26504/* harmony import */ var _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(255);
26505/* harmony import */ var _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(256);
26506/* harmony import */ var _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(193);
26507/* harmony import */ var _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(257);
26508/* harmony import */ var _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(258);
26509/* harmony import */ var _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(259);
26510/* harmony import */ var _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(262);
26511/* harmony import */ var _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(263);
26512/* harmony import */ var _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(198);
26513/* harmony import */ var _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(264);
26514/* harmony import */ var _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(265);
26515/* harmony import */ var _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(266);
26516/* harmony import */ var _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(241);
26517/* harmony import */ var _internal_config__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(171);
26518/** PURE_IMPORTS_START PURE_IMPORTS_END */
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
26555
26556
26557
26558
26559
26560
26561
26562
26563
26564
26565
26566
26567
26568
26569
26570
26571
26572
26573
26574//# sourceMappingURL=index.js.map
26575
26576
26577/***/ }),
26578/* 166 */
26579/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
26580
26581"use strict";
26582__webpack_require__.r(__webpack_exports__);
26583/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26584/* harmony export */ "Observable": () => /* binding */ Observable
26585/* harmony export */ });
26586/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(179);
26587/* harmony import */ var _util_toSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
26588/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(180);
26589/* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(181);
26590/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(171);
26591/** PURE_IMPORTS_START _util_canReportError,_util_toSubscriber,_symbol_observable,_util_pipe,_config PURE_IMPORTS_END */
26592
26593
26594
26595
26596
26597var Observable = /*@__PURE__*/ (function () {
26598 function Observable(subscribe) {
26599 this._isScalar = false;
26600 if (subscribe) {
26601 this._subscribe = subscribe;
26602 }
26603 }
26604 Observable.prototype.lift = function (operator) {
26605 var observable = new Observable();
26606 observable.source = this;
26607 observable.operator = operator;
26608 return observable;
26609 };
26610 Observable.prototype.subscribe = function (observerOrNext, error, complete) {
26611 var operator = this.operator;
26612 var sink = (0,_util_toSubscriber__WEBPACK_IMPORTED_MODULE_0__.toSubscriber)(observerOrNext, error, complete);
26613 if (operator) {
26614 sink.add(operator.call(sink, this.source));
26615 }
26616 else {
26617 sink.add(this.source || (_config__WEBPACK_IMPORTED_MODULE_1__.config.useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ?
26618 this._subscribe(sink) :
26619 this._trySubscribe(sink));
26620 }
26621 if (_config__WEBPACK_IMPORTED_MODULE_1__.config.useDeprecatedSynchronousErrorHandling) {
26622 if (sink.syncErrorThrowable) {
26623 sink.syncErrorThrowable = false;
26624 if (sink.syncErrorThrown) {
26625 throw sink.syncErrorValue;
26626 }
26627 }
26628 }
26629 return sink;
26630 };
26631 Observable.prototype._trySubscribe = function (sink) {
26632 try {
26633 return this._subscribe(sink);
26634 }
26635 catch (err) {
26636 if (_config__WEBPACK_IMPORTED_MODULE_1__.config.useDeprecatedSynchronousErrorHandling) {
26637 sink.syncErrorThrown = true;
26638 sink.syncErrorValue = err;
26639 }
26640 if ((0,_util_canReportError__WEBPACK_IMPORTED_MODULE_2__.canReportError)(sink)) {
26641 sink.error(err);
26642 }
26643 else {
26644 console.warn(err);
26645 }
26646 }
26647 };
26648 Observable.prototype.forEach = function (next, promiseCtor) {
26649 var _this = this;
26650 promiseCtor = getPromiseCtor(promiseCtor);
26651 return new promiseCtor(function (resolve, reject) {
26652 var subscription;
26653 subscription = _this.subscribe(function (value) {
26654 try {
26655 next(value);
26656 }
26657 catch (err) {
26658 reject(err);
26659 if (subscription) {
26660 subscription.unsubscribe();
26661 }
26662 }
26663 }, reject, resolve);
26664 });
26665 };
26666 Observable.prototype._subscribe = function (subscriber) {
26667 var source = this.source;
26668 return source && source.subscribe(subscriber);
26669 };
26670 Observable.prototype[_symbol_observable__WEBPACK_IMPORTED_MODULE_3__.observable] = function () {
26671 return this;
26672 };
26673 Observable.prototype.pipe = function () {
26674 var operations = [];
26675 for (var _i = 0; _i < arguments.length; _i++) {
26676 operations[_i] = arguments[_i];
26677 }
26678 if (operations.length === 0) {
26679 return this;
26680 }
26681 return (0,_util_pipe__WEBPACK_IMPORTED_MODULE_4__.pipeFromArray)(operations)(this);
26682 };
26683 Observable.prototype.toPromise = function (promiseCtor) {
26684 var _this = this;
26685 promiseCtor = getPromiseCtor(promiseCtor);
26686 return new promiseCtor(function (resolve, reject) {
26687 var value;
26688 _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });
26689 });
26690 };
26691 Observable.create = function (subscribe) {
26692 return new Observable(subscribe);
26693 };
26694 return Observable;
26695}());
26696
26697function getPromiseCtor(promiseCtor) {
26698 if (!promiseCtor) {
26699 promiseCtor = _config__WEBPACK_IMPORTED_MODULE_1__.config.Promise || Promise;
26700 }
26701 if (!promiseCtor) {
26702 throw new Error('no Promise impl found');
26703 }
26704 return promiseCtor;
26705}
26706//# sourceMappingURL=Observable.js.map
26707
26708
26709/***/ }),
26710/* 167 */
26711/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
26712
26713"use strict";
26714__webpack_require__.r(__webpack_exports__);
26715/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26716/* harmony export */ "toSubscriber": () => /* binding */ toSubscriber
26717/* harmony export */ });
26718/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(168);
26719/* harmony import */ var _symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(173);
26720/* harmony import */ var _Observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(170);
26721/** PURE_IMPORTS_START _Subscriber,_symbol_rxSubscriber,_Observer PURE_IMPORTS_END */
26722
26723
26724
26725function toSubscriber(nextOrObserver, error, complete) {
26726 if (nextOrObserver) {
26727 if (nextOrObserver instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__.Subscriber) {
26728 return nextOrObserver;
26729 }
26730 if (nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__.rxSubscriber]) {
26731 return nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__.rxSubscriber]();
26732 }
26733 }
26734 if (!nextOrObserver && !error && !complete) {
26735 return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__.Subscriber(_Observer__WEBPACK_IMPORTED_MODULE_2__.empty);
26736 }
26737 return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__.Subscriber(nextOrObserver, error, complete);
26738}
26739//# sourceMappingURL=toSubscriber.js.map
26740
26741
26742/***/ }),
26743/* 168 */
26744/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
26745
26746"use strict";
26747__webpack_require__.r(__webpack_exports__);
26748/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26749/* harmony export */ "Subscriber": () => /* binding */ Subscriber,
26750/* harmony export */ "SafeSubscriber": () => /* binding */ SafeSubscriber
26751/* harmony export */ });
26752/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
26753/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(175);
26754/* harmony import */ var _Observer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(170);
26755/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(174);
26756/* harmony import */ var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(173);
26757/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(171);
26758/* harmony import */ var _util_hostReportError__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(172);
26759/** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */
26760
26761
26762
26763
26764
26765
26766
26767var Subscriber = /*@__PURE__*/ (function (_super) {
26768 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(Subscriber, _super);
26769 function Subscriber(destinationOrNext, error, complete) {
26770 var _this = _super.call(this) || this;
26771 _this.syncErrorValue = null;
26772 _this.syncErrorThrown = false;
26773 _this.syncErrorThrowable = false;
26774 _this.isStopped = false;
26775 switch (arguments.length) {
26776 case 0:
26777 _this.destination = _Observer__WEBPACK_IMPORTED_MODULE_1__.empty;
26778 break;
26779 case 1:
26780 if (!destinationOrNext) {
26781 _this.destination = _Observer__WEBPACK_IMPORTED_MODULE_1__.empty;
26782 break;
26783 }
26784 if (typeof destinationOrNext === 'object') {
26785 if (destinationOrNext instanceof Subscriber) {
26786 _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;
26787 _this.destination = destinationOrNext;
26788 destinationOrNext.add(_this);
26789 }
26790 else {
26791 _this.syncErrorThrowable = true;
26792 _this.destination = new SafeSubscriber(_this, destinationOrNext);
26793 }
26794 break;
26795 }
26796 default:
26797 _this.syncErrorThrowable = true;
26798 _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete);
26799 break;
26800 }
26801 return _this;
26802 }
26803 Subscriber.prototype[_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_2__.rxSubscriber] = function () { return this; };
26804 Subscriber.create = function (next, error, complete) {
26805 var subscriber = new Subscriber(next, error, complete);
26806 subscriber.syncErrorThrowable = false;
26807 return subscriber;
26808 };
26809 Subscriber.prototype.next = function (value) {
26810 if (!this.isStopped) {
26811 this._next(value);
26812 }
26813 };
26814 Subscriber.prototype.error = function (err) {
26815 if (!this.isStopped) {
26816 this.isStopped = true;
26817 this._error(err);
26818 }
26819 };
26820 Subscriber.prototype.complete = function () {
26821 if (!this.isStopped) {
26822 this.isStopped = true;
26823 this._complete();
26824 }
26825 };
26826 Subscriber.prototype.unsubscribe = function () {
26827 if (this.closed) {
26828 return;
26829 }
26830 this.isStopped = true;
26831 _super.prototype.unsubscribe.call(this);
26832 };
26833 Subscriber.prototype._next = function (value) {
26834 this.destination.next(value);
26835 };
26836 Subscriber.prototype._error = function (err) {
26837 this.destination.error(err);
26838 this.unsubscribe();
26839 };
26840 Subscriber.prototype._complete = function () {
26841 this.destination.complete();
26842 this.unsubscribe();
26843 };
26844 Subscriber.prototype._unsubscribeAndRecycle = function () {
26845 var _parentOrParents = this._parentOrParents;
26846 this._parentOrParents = null;
26847 this.unsubscribe();
26848 this.closed = false;
26849 this.isStopped = false;
26850 this._parentOrParents = _parentOrParents;
26851 return this;
26852 };
26853 return Subscriber;
26854}(_Subscription__WEBPACK_IMPORTED_MODULE_3__.Subscription));
26855
26856var SafeSubscriber = /*@__PURE__*/ (function (_super) {
26857 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SafeSubscriber, _super);
26858 function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {
26859 var _this = _super.call(this) || this;
26860 _this._parentSubscriber = _parentSubscriber;
26861 var next;
26862 var context = _this;
26863 if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_4__.isFunction)(observerOrNext)) {
26864 next = observerOrNext;
26865 }
26866 else if (observerOrNext) {
26867 next = observerOrNext.next;
26868 error = observerOrNext.error;
26869 complete = observerOrNext.complete;
26870 if (observerOrNext !== _Observer__WEBPACK_IMPORTED_MODULE_1__.empty) {
26871 context = Object.create(observerOrNext);
26872 if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_4__.isFunction)(context.unsubscribe)) {
26873 _this.add(context.unsubscribe.bind(context));
26874 }
26875 context.unsubscribe = _this.unsubscribe.bind(_this);
26876 }
26877 }
26878 _this._context = context;
26879 _this._next = next;
26880 _this._error = error;
26881 _this._complete = complete;
26882 return _this;
26883 }
26884 SafeSubscriber.prototype.next = function (value) {
26885 if (!this.isStopped && this._next) {
26886 var _parentSubscriber = this._parentSubscriber;
26887 if (!_config__WEBPACK_IMPORTED_MODULE_5__.config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
26888 this.__tryOrUnsub(this._next, value);
26889 }
26890 else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {
26891 this.unsubscribe();
26892 }
26893 }
26894 };
26895 SafeSubscriber.prototype.error = function (err) {
26896 if (!this.isStopped) {
26897 var _parentSubscriber = this._parentSubscriber;
26898 var useDeprecatedSynchronousErrorHandling = _config__WEBPACK_IMPORTED_MODULE_5__.config.useDeprecatedSynchronousErrorHandling;
26899 if (this._error) {
26900 if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
26901 this.__tryOrUnsub(this._error, err);
26902 this.unsubscribe();
26903 }
26904 else {
26905 this.__tryOrSetError(_parentSubscriber, this._error, err);
26906 this.unsubscribe();
26907 }
26908 }
26909 else if (!_parentSubscriber.syncErrorThrowable) {
26910 this.unsubscribe();
26911 if (useDeprecatedSynchronousErrorHandling) {
26912 throw err;
26913 }
26914 (0,_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__.hostReportError)(err);
26915 }
26916 else {
26917 if (useDeprecatedSynchronousErrorHandling) {
26918 _parentSubscriber.syncErrorValue = err;
26919 _parentSubscriber.syncErrorThrown = true;
26920 }
26921 else {
26922 (0,_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__.hostReportError)(err);
26923 }
26924 this.unsubscribe();
26925 }
26926 }
26927 };
26928 SafeSubscriber.prototype.complete = function () {
26929 var _this = this;
26930 if (!this.isStopped) {
26931 var _parentSubscriber = this._parentSubscriber;
26932 if (this._complete) {
26933 var wrappedComplete = function () { return _this._complete.call(_this._context); };
26934 if (!_config__WEBPACK_IMPORTED_MODULE_5__.config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
26935 this.__tryOrUnsub(wrappedComplete);
26936 this.unsubscribe();
26937 }
26938 else {
26939 this.__tryOrSetError(_parentSubscriber, wrappedComplete);
26940 this.unsubscribe();
26941 }
26942 }
26943 else {
26944 this.unsubscribe();
26945 }
26946 }
26947 };
26948 SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {
26949 try {
26950 fn.call(this._context, value);
26951 }
26952 catch (err) {
26953 this.unsubscribe();
26954 if (_config__WEBPACK_IMPORTED_MODULE_5__.config.useDeprecatedSynchronousErrorHandling) {
26955 throw err;
26956 }
26957 else {
26958 (0,_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__.hostReportError)(err);
26959 }
26960 }
26961 };
26962 SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {
26963 if (!_config__WEBPACK_IMPORTED_MODULE_5__.config.useDeprecatedSynchronousErrorHandling) {
26964 throw new Error('bad call');
26965 }
26966 try {
26967 fn.call(this._context, value);
26968 }
26969 catch (err) {
26970 if (_config__WEBPACK_IMPORTED_MODULE_5__.config.useDeprecatedSynchronousErrorHandling) {
26971 parent.syncErrorValue = err;
26972 parent.syncErrorThrown = true;
26973 return true;
26974 }
26975 else {
26976 (0,_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__.hostReportError)(err);
26977 return true;
26978 }
26979 }
26980 return false;
26981 };
26982 SafeSubscriber.prototype._unsubscribe = function () {
26983 var _parentSubscriber = this._parentSubscriber;
26984 this._context = null;
26985 this._parentSubscriber = null;
26986 _parentSubscriber.unsubscribe();
26987 };
26988 return SafeSubscriber;
26989}(Subscriber));
26990
26991//# sourceMappingURL=Subscriber.js.map
26992
26993
26994/***/ }),
26995/* 169 */
26996/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
26997
26998"use strict";
26999__webpack_require__.r(__webpack_exports__);
27000/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27001/* harmony export */ "__extends": () => /* binding */ __extends,
27002/* harmony export */ "__assign": () => /* binding */ __assign,
27003/* harmony export */ "__rest": () => /* binding */ __rest,
27004/* harmony export */ "__decorate": () => /* binding */ __decorate,
27005/* harmony export */ "__param": () => /* binding */ __param,
27006/* harmony export */ "__metadata": () => /* binding */ __metadata,
27007/* harmony export */ "__awaiter": () => /* binding */ __awaiter,
27008/* harmony export */ "__generator": () => /* binding */ __generator,
27009/* harmony export */ "__exportStar": () => /* binding */ __exportStar,
27010/* harmony export */ "__values": () => /* binding */ __values,
27011/* harmony export */ "__read": () => /* binding */ __read,
27012/* harmony export */ "__spread": () => /* binding */ __spread,
27013/* harmony export */ "__spreadArrays": () => /* binding */ __spreadArrays,
27014/* harmony export */ "__await": () => /* binding */ __await,
27015/* harmony export */ "__asyncGenerator": () => /* binding */ __asyncGenerator,
27016/* harmony export */ "__asyncDelegator": () => /* binding */ __asyncDelegator,
27017/* harmony export */ "__asyncValues": () => /* binding */ __asyncValues,
27018/* harmony export */ "__makeTemplateObject": () => /* binding */ __makeTemplateObject,
27019/* harmony export */ "__importStar": () => /* binding */ __importStar,
27020/* harmony export */ "__importDefault": () => /* binding */ __importDefault
27021/* harmony export */ });
27022/*! *****************************************************************************
27023Copyright (c) Microsoft Corporation. All rights reserved.
27024Licensed under the Apache License, Version 2.0 (the "License"); you may not use
27025this file except in compliance with the License. You may obtain a copy of the
27026License at http://www.apache.org/licenses/LICENSE-2.0
27027
27028THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
27029KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
27030WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
27031MERCHANTABLITY OR NON-INFRINGEMENT.
27032
27033See the Apache Version 2.0 License for specific language governing permissions
27034and limitations under the License.
27035***************************************************************************** */
27036/* global Reflect, Promise */
27037
27038var extendStatics = function(d, b) {
27039 extendStatics = Object.setPrototypeOf ||
27040 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
27041 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27042 return extendStatics(d, b);
27043};
27044
27045function __extends(d, b) {
27046 extendStatics(d, b);
27047 function __() { this.constructor = d; }
27048 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
27049}
27050
27051var __assign = function() {
27052 __assign = Object.assign || function __assign(t) {
27053 for (var s, i = 1, n = arguments.length; i < n; i++) {
27054 s = arguments[i];
27055 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
27056 }
27057 return t;
27058 }
27059 return __assign.apply(this, arguments);
27060}
27061
27062function __rest(s, e) {
27063 var t = {};
27064 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
27065 t[p] = s[p];
27066 if (s != null && typeof Object.getOwnPropertySymbols === "function")
27067 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
27068 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
27069 t[p[i]] = s[p[i]];
27070 }
27071 return t;
27072}
27073
27074function __decorate(decorators, target, key, desc) {
27075 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27076 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
27077 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;
27078 return c > 3 && r && Object.defineProperty(target, key, r), r;
27079}
27080
27081function __param(paramIndex, decorator) {
27082 return function (target, key) { decorator(target, key, paramIndex); }
27083}
27084
27085function __metadata(metadataKey, metadataValue) {
27086 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
27087}
27088
27089function __awaiter(thisArg, _arguments, P, generator) {
27090 return new (P || (P = Promise))(function (resolve, reject) {
27091 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
27092 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
27093 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
27094 step((generator = generator.apply(thisArg, _arguments || [])).next());
27095 });
27096}
27097
27098function __generator(thisArg, body) {
27099 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
27100 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
27101 function verb(n) { return function (v) { return step([n, v]); }; }
27102 function step(op) {
27103 if (f) throw new TypeError("Generator is already executing.");
27104 while (_) try {
27105 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;
27106 if (y = 0, t) op = [op[0] & 2, t.value];
27107 switch (op[0]) {
27108 case 0: case 1: t = op; break;
27109 case 4: _.label++; return { value: op[1], done: false };
27110 case 5: _.label++; y = op[1]; op = [0]; continue;
27111 case 7: op = _.ops.pop(); _.trys.pop(); continue;
27112 default:
27113 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27114 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27115 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
27116 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
27117 if (t[2]) _.ops.pop();
27118 _.trys.pop(); continue;
27119 }
27120 op = body.call(thisArg, _);
27121 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
27122 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
27123 }
27124}
27125
27126function __exportStar(m, exports) {
27127 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
27128}
27129
27130function __values(o) {
27131 var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
27132 if (m) return m.call(o);
27133 return {
27134 next: function () {
27135 if (o && i >= o.length) o = void 0;
27136 return { value: o && o[i++], done: !o };
27137 }
27138 };
27139}
27140
27141function __read(o, n) {
27142 var m = typeof Symbol === "function" && o[Symbol.iterator];
27143 if (!m) return o;
27144 var i = m.call(o), r, ar = [], e;
27145 try {
27146 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
27147 }
27148 catch (error) { e = { error: error }; }
27149 finally {
27150 try {
27151 if (r && !r.done && (m = i["return"])) m.call(i);
27152 }
27153 finally { if (e) throw e.error; }
27154 }
27155 return ar;
27156}
27157
27158function __spread() {
27159 for (var ar = [], i = 0; i < arguments.length; i++)
27160 ar = ar.concat(__read(arguments[i]));
27161 return ar;
27162}
27163
27164function __spreadArrays() {
27165 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
27166 for (var r = Array(s), k = 0, i = 0; i < il; i++)
27167 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
27168 r[k] = a[j];
27169 return r;
27170};
27171
27172function __await(v) {
27173 return this instanceof __await ? (this.v = v, this) : new __await(v);
27174}
27175
27176function __asyncGenerator(thisArg, _arguments, generator) {
27177 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
27178 var g = generator.apply(thisArg, _arguments || []), i, q = [];
27179 return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
27180 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); }); }; }
27181 function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
27182 function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
27183 function fulfill(value) { resume("next", value); }
27184 function reject(value) { resume("throw", value); }
27185 function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
27186}
27187
27188function __asyncDelegator(o) {
27189 var i, p;
27190 return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
27191 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; }
27192}
27193
27194function __asyncValues(o) {
27195 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
27196 var m = o[Symbol.asyncIterator], i;
27197 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);
27198 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); }); }; }
27199 function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
27200}
27201
27202function __makeTemplateObject(cooked, raw) {
27203 if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
27204 return cooked;
27205};
27206
27207function __importStar(mod) {
27208 if (mod && mod.__esModule) return mod;
27209 var result = {};
27210 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
27211 result.default = mod;
27212 return result;
27213}
27214
27215function __importDefault(mod) {
27216 return (mod && mod.__esModule) ? mod : { default: mod };
27217}
27218
27219
27220/***/ }),
27221/* 170 */
27222/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27223
27224"use strict";
27225__webpack_require__.r(__webpack_exports__);
27226/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27227/* harmony export */ "empty": () => /* binding */ empty
27228/* harmony export */ });
27229/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(171);
27230/* harmony import */ var _util_hostReportError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(172);
27231/** PURE_IMPORTS_START _config,_util_hostReportError PURE_IMPORTS_END */
27232
27233
27234var empty = {
27235 closed: true,
27236 next: function (value) { },
27237 error: function (err) {
27238 if (_config__WEBPACK_IMPORTED_MODULE_0__.config.useDeprecatedSynchronousErrorHandling) {
27239 throw err;
27240 }
27241 else {
27242 (0,_util_hostReportError__WEBPACK_IMPORTED_MODULE_1__.hostReportError)(err);
27243 }
27244 },
27245 complete: function () { }
27246};
27247//# sourceMappingURL=Observer.js.map
27248
27249
27250/***/ }),
27251/* 171 */
27252/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27253
27254"use strict";
27255__webpack_require__.r(__webpack_exports__);
27256/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27257/* harmony export */ "config": () => /* binding */ config
27258/* harmony export */ });
27259/** PURE_IMPORTS_START PURE_IMPORTS_END */
27260var _enable_super_gross_mode_that_will_cause_bad_things = false;
27261var config = {
27262 Promise: undefined,
27263 set useDeprecatedSynchronousErrorHandling(value) {
27264 if (value) {
27265 var error = /*@__PURE__*/ new Error();
27266 /*@__PURE__*/ console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n' + error.stack);
27267 }
27268 else if (_enable_super_gross_mode_that_will_cause_bad_things) {
27269 /*@__PURE__*/ console.log('RxJS: Back to a better error behavior. Thank you. <3');
27270 }
27271 _enable_super_gross_mode_that_will_cause_bad_things = value;
27272 },
27273 get useDeprecatedSynchronousErrorHandling() {
27274 return _enable_super_gross_mode_that_will_cause_bad_things;
27275 },
27276};
27277//# sourceMappingURL=config.js.map
27278
27279
27280/***/ }),
27281/* 172 */
27282/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27283
27284"use strict";
27285__webpack_require__.r(__webpack_exports__);
27286/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27287/* harmony export */ "hostReportError": () => /* binding */ hostReportError
27288/* harmony export */ });
27289/** PURE_IMPORTS_START PURE_IMPORTS_END */
27290function hostReportError(err) {
27291 setTimeout(function () { throw err; }, 0);
27292}
27293//# sourceMappingURL=hostReportError.js.map
27294
27295
27296/***/ }),
27297/* 173 */
27298/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27299
27300"use strict";
27301__webpack_require__.r(__webpack_exports__);
27302/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27303/* harmony export */ "rxSubscriber": () => /* binding */ rxSubscriber,
27304/* harmony export */ "$$rxSubscriber": () => /* binding */ $$rxSubscriber
27305/* harmony export */ });
27306/** PURE_IMPORTS_START PURE_IMPORTS_END */
27307var rxSubscriber = /*@__PURE__*/ (function () {
27308 return typeof Symbol === 'function'
27309 ? /*@__PURE__*/ Symbol('rxSubscriber')
27310 : '@@rxSubscriber_' + /*@__PURE__*/ Math.random();
27311})();
27312var $$rxSubscriber = rxSubscriber;
27313//# sourceMappingURL=rxSubscriber.js.map
27314
27315
27316/***/ }),
27317/* 174 */
27318/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27319
27320"use strict";
27321__webpack_require__.r(__webpack_exports__);
27322/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27323/* harmony export */ "Subscription": () => /* binding */ Subscription
27324/* harmony export */ });
27325/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(177);
27326/* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(178);
27327/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(175);
27328/* harmony import */ var _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(176);
27329/** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_UnsubscriptionError PURE_IMPORTS_END */
27330
27331
27332
27333
27334var Subscription = /*@__PURE__*/ (function () {
27335 function Subscription(unsubscribe) {
27336 this.closed = false;
27337 this._parentOrParents = null;
27338 this._subscriptions = null;
27339 if (unsubscribe) {
27340 this._unsubscribe = unsubscribe;
27341 }
27342 }
27343 Subscription.prototype.unsubscribe = function () {
27344 var errors;
27345 if (this.closed) {
27346 return;
27347 }
27348 var _a = this, _parentOrParents = _a._parentOrParents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;
27349 this.closed = true;
27350 this._parentOrParents = null;
27351 this._subscriptions = null;
27352 if (_parentOrParents instanceof Subscription) {
27353 _parentOrParents.remove(this);
27354 }
27355 else if (_parentOrParents !== null) {
27356 for (var index = 0; index < _parentOrParents.length; ++index) {
27357 var parent_1 = _parentOrParents[index];
27358 parent_1.remove(this);
27359 }
27360 }
27361 if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(_unsubscribe)) {
27362 try {
27363 _unsubscribe.call(this);
27364 }
27365 catch (e) {
27366 errors = e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__.UnsubscriptionError ? flattenUnsubscriptionErrors(e.errors) : [e];
27367 }
27368 }
27369 if ((0,_util_isArray__WEBPACK_IMPORTED_MODULE_2__.isArray)(_subscriptions)) {
27370 var index = -1;
27371 var len = _subscriptions.length;
27372 while (++index < len) {
27373 var sub = _subscriptions[index];
27374 if ((0,_util_isObject__WEBPACK_IMPORTED_MODULE_3__.isObject)(sub)) {
27375 try {
27376 sub.unsubscribe();
27377 }
27378 catch (e) {
27379 errors = errors || [];
27380 if (e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__.UnsubscriptionError) {
27381 errors = errors.concat(flattenUnsubscriptionErrors(e.errors));
27382 }
27383 else {
27384 errors.push(e);
27385 }
27386 }
27387 }
27388 }
27389 }
27390 if (errors) {
27391 throw new _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__.UnsubscriptionError(errors);
27392 }
27393 };
27394 Subscription.prototype.add = function (teardown) {
27395 var subscription = teardown;
27396 if (!teardown) {
27397 return Subscription.EMPTY;
27398 }
27399 switch (typeof teardown) {
27400 case 'function':
27401 subscription = new Subscription(teardown);
27402 case 'object':
27403 if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {
27404 return subscription;
27405 }
27406 else if (this.closed) {
27407 subscription.unsubscribe();
27408 return subscription;
27409 }
27410 else if (!(subscription instanceof Subscription)) {
27411 var tmp = subscription;
27412 subscription = new Subscription();
27413 subscription._subscriptions = [tmp];
27414 }
27415 break;
27416 default: {
27417 throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
27418 }
27419 }
27420 var _parentOrParents = subscription._parentOrParents;
27421 if (_parentOrParents === null) {
27422 subscription._parentOrParents = this;
27423 }
27424 else if (_parentOrParents instanceof Subscription) {
27425 if (_parentOrParents === this) {
27426 return subscription;
27427 }
27428 subscription._parentOrParents = [_parentOrParents, this];
27429 }
27430 else if (_parentOrParents.indexOf(this) === -1) {
27431 _parentOrParents.push(this);
27432 }
27433 else {
27434 return subscription;
27435 }
27436 var subscriptions = this._subscriptions;
27437 if (subscriptions === null) {
27438 this._subscriptions = [subscription];
27439 }
27440 else {
27441 subscriptions.push(subscription);
27442 }
27443 return subscription;
27444 };
27445 Subscription.prototype.remove = function (subscription) {
27446 var subscriptions = this._subscriptions;
27447 if (subscriptions) {
27448 var subscriptionIndex = subscriptions.indexOf(subscription);
27449 if (subscriptionIndex !== -1) {
27450 subscriptions.splice(subscriptionIndex, 1);
27451 }
27452 }
27453 };
27454 Subscription.EMPTY = (function (empty) {
27455 empty.closed = true;
27456 return empty;
27457 }(new Subscription()));
27458 return Subscription;
27459}());
27460
27461function flattenUnsubscriptionErrors(errors) {
27462 return errors.reduce(function (errs, err) { return errs.concat((err instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__.UnsubscriptionError) ? err.errors : err); }, []);
27463}
27464//# sourceMappingURL=Subscription.js.map
27465
27466
27467/***/ }),
27468/* 175 */
27469/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27470
27471"use strict";
27472__webpack_require__.r(__webpack_exports__);
27473/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27474/* harmony export */ "isFunction": () => /* binding */ isFunction
27475/* harmony export */ });
27476/** PURE_IMPORTS_START PURE_IMPORTS_END */
27477function isFunction(x) {
27478 return typeof x === 'function';
27479}
27480//# sourceMappingURL=isFunction.js.map
27481
27482
27483/***/ }),
27484/* 176 */
27485/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27486
27487"use strict";
27488__webpack_require__.r(__webpack_exports__);
27489/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27490/* harmony export */ "UnsubscriptionError": () => /* binding */ UnsubscriptionError
27491/* harmony export */ });
27492/** PURE_IMPORTS_START PURE_IMPORTS_END */
27493var UnsubscriptionErrorImpl = /*@__PURE__*/ (function () {
27494 function UnsubscriptionErrorImpl(errors) {
27495 Error.call(this);
27496 this.message = errors ?
27497 errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) { return i + 1 + ") " + err.toString(); }).join('\n ') : '';
27498 this.name = 'UnsubscriptionError';
27499 this.errors = errors;
27500 return this;
27501 }
27502 UnsubscriptionErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
27503 return UnsubscriptionErrorImpl;
27504})();
27505var UnsubscriptionError = UnsubscriptionErrorImpl;
27506//# sourceMappingURL=UnsubscriptionError.js.map
27507
27508
27509/***/ }),
27510/* 177 */
27511/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27512
27513"use strict";
27514__webpack_require__.r(__webpack_exports__);
27515/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27516/* harmony export */ "isArray": () => /* binding */ isArray
27517/* harmony export */ });
27518/** PURE_IMPORTS_START PURE_IMPORTS_END */
27519var isArray = /*@__PURE__*/ (function () { return Array.isArray || (function (x) { return x && typeof x.length === 'number'; }); })();
27520//# sourceMappingURL=isArray.js.map
27521
27522
27523/***/ }),
27524/* 178 */
27525/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27526
27527"use strict";
27528__webpack_require__.r(__webpack_exports__);
27529/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27530/* harmony export */ "isObject": () => /* binding */ isObject
27531/* harmony export */ });
27532/** PURE_IMPORTS_START PURE_IMPORTS_END */
27533function isObject(x) {
27534 return x !== null && typeof x === 'object';
27535}
27536//# sourceMappingURL=isObject.js.map
27537
27538
27539/***/ }),
27540/* 179 */
27541/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27542
27543"use strict";
27544__webpack_require__.r(__webpack_exports__);
27545/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27546/* harmony export */ "canReportError": () => /* binding */ canReportError
27547/* harmony export */ });
27548/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(168);
27549/** PURE_IMPORTS_START _Subscriber PURE_IMPORTS_END */
27550
27551function canReportError(observer) {
27552 while (observer) {
27553 var _a = observer, closed_1 = _a.closed, destination = _a.destination, isStopped = _a.isStopped;
27554 if (closed_1 || isStopped) {
27555 return false;
27556 }
27557 else if (destination && destination instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__.Subscriber) {
27558 observer = destination;
27559 }
27560 else {
27561 observer = null;
27562 }
27563 }
27564 return true;
27565}
27566//# sourceMappingURL=canReportError.js.map
27567
27568
27569/***/ }),
27570/* 180 */
27571/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27572
27573"use strict";
27574__webpack_require__.r(__webpack_exports__);
27575/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27576/* harmony export */ "observable": () => /* binding */ observable
27577/* harmony export */ });
27578/** PURE_IMPORTS_START PURE_IMPORTS_END */
27579var observable = /*@__PURE__*/ (function () { return typeof Symbol === 'function' && Symbol.observable || '@@observable'; })();
27580//# sourceMappingURL=observable.js.map
27581
27582
27583/***/ }),
27584/* 181 */
27585/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27586
27587"use strict";
27588__webpack_require__.r(__webpack_exports__);
27589/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27590/* harmony export */ "pipe": () => /* binding */ pipe,
27591/* harmony export */ "pipeFromArray": () => /* binding */ pipeFromArray
27592/* harmony export */ });
27593/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(182);
27594/** PURE_IMPORTS_START _identity PURE_IMPORTS_END */
27595
27596function pipe() {
27597 var fns = [];
27598 for (var _i = 0; _i < arguments.length; _i++) {
27599 fns[_i] = arguments[_i];
27600 }
27601 return pipeFromArray(fns);
27602}
27603function pipeFromArray(fns) {
27604 if (fns.length === 0) {
27605 return _identity__WEBPACK_IMPORTED_MODULE_0__.identity;
27606 }
27607 if (fns.length === 1) {
27608 return fns[0];
27609 }
27610 return function piped(input) {
27611 return fns.reduce(function (prev, fn) { return fn(prev); }, input);
27612 };
27613}
27614//# sourceMappingURL=pipe.js.map
27615
27616
27617/***/ }),
27618/* 182 */
27619/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27620
27621"use strict";
27622__webpack_require__.r(__webpack_exports__);
27623/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27624/* harmony export */ "identity": () => /* binding */ identity
27625/* harmony export */ });
27626/** PURE_IMPORTS_START PURE_IMPORTS_END */
27627function identity(x) {
27628 return x;
27629}
27630//# sourceMappingURL=identity.js.map
27631
27632
27633/***/ }),
27634/* 183 */
27635/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27636
27637"use strict";
27638__webpack_require__.r(__webpack_exports__);
27639/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27640/* harmony export */ "ConnectableObservable": () => /* binding */ ConnectableObservable,
27641/* harmony export */ "connectableObservableDescriptor": () => /* binding */ connectableObservableDescriptor
27642/* harmony export */ });
27643/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
27644/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(185);
27645/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(166);
27646/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(168);
27647/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
27648/* harmony import */ var _operators_refCount__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(184);
27649/** PURE_IMPORTS_START tslib,_Subject,_Observable,_Subscriber,_Subscription,_operators_refCount PURE_IMPORTS_END */
27650
27651
27652
27653
27654
27655
27656var ConnectableObservable = /*@__PURE__*/ (function (_super) {
27657 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ConnectableObservable, _super);
27658 function ConnectableObservable(source, subjectFactory) {
27659 var _this = _super.call(this) || this;
27660 _this.source = source;
27661 _this.subjectFactory = subjectFactory;
27662 _this._refCount = 0;
27663 _this._isComplete = false;
27664 return _this;
27665 }
27666 ConnectableObservable.prototype._subscribe = function (subscriber) {
27667 return this.getSubject().subscribe(subscriber);
27668 };
27669 ConnectableObservable.prototype.getSubject = function () {
27670 var subject = this._subject;
27671 if (!subject || subject.isStopped) {
27672 this._subject = this.subjectFactory();
27673 }
27674 return this._subject;
27675 };
27676 ConnectableObservable.prototype.connect = function () {
27677 var connection = this._connection;
27678 if (!connection) {
27679 this._isComplete = false;
27680 connection = this._connection = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
27681 connection.add(this.source
27682 .subscribe(new ConnectableSubscriber(this.getSubject(), this)));
27683 if (connection.closed) {
27684 this._connection = null;
27685 connection = _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription.EMPTY;
27686 }
27687 }
27688 return connection;
27689 };
27690 ConnectableObservable.prototype.refCount = function () {
27691 return (0,_operators_refCount__WEBPACK_IMPORTED_MODULE_2__.refCount)()(this);
27692 };
27693 return ConnectableObservable;
27694}(_Observable__WEBPACK_IMPORTED_MODULE_3__.Observable));
27695
27696var connectableObservableDescriptor = /*@__PURE__*/ (function () {
27697 var connectableProto = ConnectableObservable.prototype;
27698 return {
27699 operator: { value: null },
27700 _refCount: { value: 0, writable: true },
27701 _subject: { value: null, writable: true },
27702 _connection: { value: null, writable: true },
27703 _subscribe: { value: connectableProto._subscribe },
27704 _isComplete: { value: connectableProto._isComplete, writable: true },
27705 getSubject: { value: connectableProto.getSubject },
27706 connect: { value: connectableProto.connect },
27707 refCount: { value: connectableProto.refCount }
27708 };
27709})();
27710var ConnectableSubscriber = /*@__PURE__*/ (function (_super) {
27711 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ConnectableSubscriber, _super);
27712 function ConnectableSubscriber(destination, connectable) {
27713 var _this = _super.call(this, destination) || this;
27714 _this.connectable = connectable;
27715 return _this;
27716 }
27717 ConnectableSubscriber.prototype._error = function (err) {
27718 this._unsubscribe();
27719 _super.prototype._error.call(this, err);
27720 };
27721 ConnectableSubscriber.prototype._complete = function () {
27722 this.connectable._isComplete = true;
27723 this._unsubscribe();
27724 _super.prototype._complete.call(this);
27725 };
27726 ConnectableSubscriber.prototype._unsubscribe = function () {
27727 var connectable = this.connectable;
27728 if (connectable) {
27729 this.connectable = null;
27730 var connection = connectable._connection;
27731 connectable._refCount = 0;
27732 connectable._subject = null;
27733 connectable._connection = null;
27734 if (connection) {
27735 connection.unsubscribe();
27736 }
27737 }
27738 };
27739 return ConnectableSubscriber;
27740}(_Subject__WEBPACK_IMPORTED_MODULE_4__.SubjectSubscriber));
27741var RefCountOperator = /*@__PURE__*/ (function () {
27742 function RefCountOperator(connectable) {
27743 this.connectable = connectable;
27744 }
27745 RefCountOperator.prototype.call = function (subscriber, source) {
27746 var connectable = this.connectable;
27747 connectable._refCount++;
27748 var refCounter = new RefCountSubscriber(subscriber, connectable);
27749 var subscription = source.subscribe(refCounter);
27750 if (!refCounter.closed) {
27751 refCounter.connection = connectable.connect();
27752 }
27753 return subscription;
27754 };
27755 return RefCountOperator;
27756}());
27757var RefCountSubscriber = /*@__PURE__*/ (function (_super) {
27758 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RefCountSubscriber, _super);
27759 function RefCountSubscriber(destination, connectable) {
27760 var _this = _super.call(this, destination) || this;
27761 _this.connectable = connectable;
27762 return _this;
27763 }
27764 RefCountSubscriber.prototype._unsubscribe = function () {
27765 var connectable = this.connectable;
27766 if (!connectable) {
27767 this.connection = null;
27768 return;
27769 }
27770 this.connectable = null;
27771 var refCount = connectable._refCount;
27772 if (refCount <= 0) {
27773 this.connection = null;
27774 return;
27775 }
27776 connectable._refCount = refCount - 1;
27777 if (refCount > 1) {
27778 this.connection = null;
27779 return;
27780 }
27781 var connection = this.connection;
27782 var sharedConnection = connectable._connection;
27783 this.connection = null;
27784 if (sharedConnection && (!connection || sharedConnection === connection)) {
27785 sharedConnection.unsubscribe();
27786 }
27787 };
27788 return RefCountSubscriber;
27789}(_Subscriber__WEBPACK_IMPORTED_MODULE_5__.Subscriber));
27790//# sourceMappingURL=ConnectableObservable.js.map
27791
27792
27793/***/ }),
27794/* 184 */
27795/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27796
27797"use strict";
27798__webpack_require__.r(__webpack_exports__);
27799/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27800/* harmony export */ "refCount": () => /* binding */ refCount
27801/* harmony export */ });
27802/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
27803/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
27804/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
27805
27806
27807function refCount() {
27808 return function refCountOperatorFunction(source) {
27809 return source.lift(new RefCountOperator(source));
27810 };
27811}
27812var RefCountOperator = /*@__PURE__*/ (function () {
27813 function RefCountOperator(connectable) {
27814 this.connectable = connectable;
27815 }
27816 RefCountOperator.prototype.call = function (subscriber, source) {
27817 var connectable = this.connectable;
27818 connectable._refCount++;
27819 var refCounter = new RefCountSubscriber(subscriber, connectable);
27820 var subscription = source.subscribe(refCounter);
27821 if (!refCounter.closed) {
27822 refCounter.connection = connectable.connect();
27823 }
27824 return subscription;
27825 };
27826 return RefCountOperator;
27827}());
27828var RefCountSubscriber = /*@__PURE__*/ (function (_super) {
27829 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RefCountSubscriber, _super);
27830 function RefCountSubscriber(destination, connectable) {
27831 var _this = _super.call(this, destination) || this;
27832 _this.connectable = connectable;
27833 return _this;
27834 }
27835 RefCountSubscriber.prototype._unsubscribe = function () {
27836 var connectable = this.connectable;
27837 if (!connectable) {
27838 this.connection = null;
27839 return;
27840 }
27841 this.connectable = null;
27842 var refCount = connectable._refCount;
27843 if (refCount <= 0) {
27844 this.connection = null;
27845 return;
27846 }
27847 connectable._refCount = refCount - 1;
27848 if (refCount > 1) {
27849 this.connection = null;
27850 return;
27851 }
27852 var connection = this.connection;
27853 var sharedConnection = connectable._connection;
27854 this.connection = null;
27855 if (sharedConnection && (!connection || sharedConnection === connection)) {
27856 sharedConnection.unsubscribe();
27857 }
27858 };
27859 return RefCountSubscriber;
27860}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
27861//# sourceMappingURL=refCount.js.map
27862
27863
27864/***/ }),
27865/* 185 */
27866/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27867
27868"use strict";
27869__webpack_require__.r(__webpack_exports__);
27870/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27871/* harmony export */ "SubjectSubscriber": () => /* binding */ SubjectSubscriber,
27872/* harmony export */ "Subject": () => /* binding */ Subject,
27873/* harmony export */ "AnonymousSubject": () => /* binding */ AnonymousSubject
27874/* harmony export */ });
27875/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
27876/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(166);
27877/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
27878/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(174);
27879/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(186);
27880/* harmony import */ var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(187);
27881/* harmony import */ var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(173);
27882/** PURE_IMPORTS_START tslib,_Observable,_Subscriber,_Subscription,_util_ObjectUnsubscribedError,_SubjectSubscription,_internal_symbol_rxSubscriber PURE_IMPORTS_END */
27883
27884
27885
27886
27887
27888
27889
27890var SubjectSubscriber = /*@__PURE__*/ (function (_super) {
27891 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SubjectSubscriber, _super);
27892 function SubjectSubscriber(destination) {
27893 var _this = _super.call(this, destination) || this;
27894 _this.destination = destination;
27895 return _this;
27896 }
27897 return SubjectSubscriber;
27898}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
27899
27900var Subject = /*@__PURE__*/ (function (_super) {
27901 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(Subject, _super);
27902 function Subject() {
27903 var _this = _super.call(this) || this;
27904 _this.observers = [];
27905 _this.closed = false;
27906 _this.isStopped = false;
27907 _this.hasError = false;
27908 _this.thrownError = null;
27909 return _this;
27910 }
27911 Subject.prototype[_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_2__.rxSubscriber] = function () {
27912 return new SubjectSubscriber(this);
27913 };
27914 Subject.prototype.lift = function (operator) {
27915 var subject = new AnonymousSubject(this, this);
27916 subject.operator = operator;
27917 return subject;
27918 };
27919 Subject.prototype.next = function (value) {
27920 if (this.closed) {
27921 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__.ObjectUnsubscribedError();
27922 }
27923 if (!this.isStopped) {
27924 var observers = this.observers;
27925 var len = observers.length;
27926 var copy = observers.slice();
27927 for (var i = 0; i < len; i++) {
27928 copy[i].next(value);
27929 }
27930 }
27931 };
27932 Subject.prototype.error = function (err) {
27933 if (this.closed) {
27934 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__.ObjectUnsubscribedError();
27935 }
27936 this.hasError = true;
27937 this.thrownError = err;
27938 this.isStopped = true;
27939 var observers = this.observers;
27940 var len = observers.length;
27941 var copy = observers.slice();
27942 for (var i = 0; i < len; i++) {
27943 copy[i].error(err);
27944 }
27945 this.observers.length = 0;
27946 };
27947 Subject.prototype.complete = function () {
27948 if (this.closed) {
27949 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__.ObjectUnsubscribedError();
27950 }
27951 this.isStopped = true;
27952 var observers = this.observers;
27953 var len = observers.length;
27954 var copy = observers.slice();
27955 for (var i = 0; i < len; i++) {
27956 copy[i].complete();
27957 }
27958 this.observers.length = 0;
27959 };
27960 Subject.prototype.unsubscribe = function () {
27961 this.isStopped = true;
27962 this.closed = true;
27963 this.observers = null;
27964 };
27965 Subject.prototype._trySubscribe = function (subscriber) {
27966 if (this.closed) {
27967 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__.ObjectUnsubscribedError();
27968 }
27969 else {
27970 return _super.prototype._trySubscribe.call(this, subscriber);
27971 }
27972 };
27973 Subject.prototype._subscribe = function (subscriber) {
27974 if (this.closed) {
27975 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__.ObjectUnsubscribedError();
27976 }
27977 else if (this.hasError) {
27978 subscriber.error(this.thrownError);
27979 return _Subscription__WEBPACK_IMPORTED_MODULE_4__.Subscription.EMPTY;
27980 }
27981 else if (this.isStopped) {
27982 subscriber.complete();
27983 return _Subscription__WEBPACK_IMPORTED_MODULE_4__.Subscription.EMPTY;
27984 }
27985 else {
27986 this.observers.push(subscriber);
27987 return new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__.SubjectSubscription(this, subscriber);
27988 }
27989 };
27990 Subject.prototype.asObservable = function () {
27991 var observable = new _Observable__WEBPACK_IMPORTED_MODULE_6__.Observable();
27992 observable.source = this;
27993 return observable;
27994 };
27995 Subject.create = function (destination, source) {
27996 return new AnonymousSubject(destination, source);
27997 };
27998 return Subject;
27999}(_Observable__WEBPACK_IMPORTED_MODULE_6__.Observable));
28000
28001var AnonymousSubject = /*@__PURE__*/ (function (_super) {
28002 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AnonymousSubject, _super);
28003 function AnonymousSubject(destination, source) {
28004 var _this = _super.call(this) || this;
28005 _this.destination = destination;
28006 _this.source = source;
28007 return _this;
28008 }
28009 AnonymousSubject.prototype.next = function (value) {
28010 var destination = this.destination;
28011 if (destination && destination.next) {
28012 destination.next(value);
28013 }
28014 };
28015 AnonymousSubject.prototype.error = function (err) {
28016 var destination = this.destination;
28017 if (destination && destination.error) {
28018 this.destination.error(err);
28019 }
28020 };
28021 AnonymousSubject.prototype.complete = function () {
28022 var destination = this.destination;
28023 if (destination && destination.complete) {
28024 this.destination.complete();
28025 }
28026 };
28027 AnonymousSubject.prototype._subscribe = function (subscriber) {
28028 var source = this.source;
28029 if (source) {
28030 return this.source.subscribe(subscriber);
28031 }
28032 else {
28033 return _Subscription__WEBPACK_IMPORTED_MODULE_4__.Subscription.EMPTY;
28034 }
28035 };
28036 return AnonymousSubject;
28037}(Subject));
28038
28039//# sourceMappingURL=Subject.js.map
28040
28041
28042/***/ }),
28043/* 186 */
28044/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28045
28046"use strict";
28047__webpack_require__.r(__webpack_exports__);
28048/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28049/* harmony export */ "ObjectUnsubscribedError": () => /* binding */ ObjectUnsubscribedError
28050/* harmony export */ });
28051/** PURE_IMPORTS_START PURE_IMPORTS_END */
28052var ObjectUnsubscribedErrorImpl = /*@__PURE__*/ (function () {
28053 function ObjectUnsubscribedErrorImpl() {
28054 Error.call(this);
28055 this.message = 'object unsubscribed';
28056 this.name = 'ObjectUnsubscribedError';
28057 return this;
28058 }
28059 ObjectUnsubscribedErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
28060 return ObjectUnsubscribedErrorImpl;
28061})();
28062var ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl;
28063//# sourceMappingURL=ObjectUnsubscribedError.js.map
28064
28065
28066/***/ }),
28067/* 187 */
28068/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28069
28070"use strict";
28071__webpack_require__.r(__webpack_exports__);
28072/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28073/* harmony export */ "SubjectSubscription": () => /* binding */ SubjectSubscription
28074/* harmony export */ });
28075/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
28076/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
28077/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */
28078
28079
28080var SubjectSubscription = /*@__PURE__*/ (function (_super) {
28081 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SubjectSubscription, _super);
28082 function SubjectSubscription(subject, subscriber) {
28083 var _this = _super.call(this) || this;
28084 _this.subject = subject;
28085 _this.subscriber = subscriber;
28086 _this.closed = false;
28087 return _this;
28088 }
28089 SubjectSubscription.prototype.unsubscribe = function () {
28090 if (this.closed) {
28091 return;
28092 }
28093 this.closed = true;
28094 var subject = this.subject;
28095 var observers = subject.observers;
28096 this.subject = null;
28097 if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
28098 return;
28099 }
28100 var subscriberIndex = observers.indexOf(this.subscriber);
28101 if (subscriberIndex !== -1) {
28102 observers.splice(subscriberIndex, 1);
28103 }
28104 };
28105 return SubjectSubscription;
28106}(_Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription));
28107
28108//# sourceMappingURL=SubjectSubscription.js.map
28109
28110
28111/***/ }),
28112/* 188 */
28113/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28114
28115"use strict";
28116__webpack_require__.r(__webpack_exports__);
28117/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28118/* harmony export */ "groupBy": () => /* binding */ groupBy,
28119/* harmony export */ "GroupedObservable": () => /* binding */ GroupedObservable
28120/* harmony export */ });
28121/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
28122/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(168);
28123/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(174);
28124/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(166);
28125/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
28126/** PURE_IMPORTS_START tslib,_Subscriber,_Subscription,_Observable,_Subject PURE_IMPORTS_END */
28127
28128
28129
28130
28131
28132function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) {
28133 return function (source) {
28134 return source.lift(new GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector));
28135 };
28136}
28137var GroupByOperator = /*@__PURE__*/ (function () {
28138 function GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector) {
28139 this.keySelector = keySelector;
28140 this.elementSelector = elementSelector;
28141 this.durationSelector = durationSelector;
28142 this.subjectSelector = subjectSelector;
28143 }
28144 GroupByOperator.prototype.call = function (subscriber, source) {
28145 return source.subscribe(new GroupBySubscriber(subscriber, this.keySelector, this.elementSelector, this.durationSelector, this.subjectSelector));
28146 };
28147 return GroupByOperator;
28148}());
28149var GroupBySubscriber = /*@__PURE__*/ (function (_super) {
28150 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(GroupBySubscriber, _super);
28151 function GroupBySubscriber(destination, keySelector, elementSelector, durationSelector, subjectSelector) {
28152 var _this = _super.call(this, destination) || this;
28153 _this.keySelector = keySelector;
28154 _this.elementSelector = elementSelector;
28155 _this.durationSelector = durationSelector;
28156 _this.subjectSelector = subjectSelector;
28157 _this.groups = null;
28158 _this.attemptedToUnsubscribe = false;
28159 _this.count = 0;
28160 return _this;
28161 }
28162 GroupBySubscriber.prototype._next = function (value) {
28163 var key;
28164 try {
28165 key = this.keySelector(value);
28166 }
28167 catch (err) {
28168 this.error(err);
28169 return;
28170 }
28171 this._group(value, key);
28172 };
28173 GroupBySubscriber.prototype._group = function (value, key) {
28174 var groups = this.groups;
28175 if (!groups) {
28176 groups = this.groups = new Map();
28177 }
28178 var group = groups.get(key);
28179 var element;
28180 if (this.elementSelector) {
28181 try {
28182 element = this.elementSelector(value);
28183 }
28184 catch (err) {
28185 this.error(err);
28186 }
28187 }
28188 else {
28189 element = value;
28190 }
28191 if (!group) {
28192 group = (this.subjectSelector ? this.subjectSelector() : new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject());
28193 groups.set(key, group);
28194 var groupedObservable = new GroupedObservable(key, group, this);
28195 this.destination.next(groupedObservable);
28196 if (this.durationSelector) {
28197 var duration = void 0;
28198 try {
28199 duration = this.durationSelector(new GroupedObservable(key, group));
28200 }
28201 catch (err) {
28202 this.error(err);
28203 return;
28204 }
28205 this.add(duration.subscribe(new GroupDurationSubscriber(key, group, this)));
28206 }
28207 }
28208 if (!group.closed) {
28209 group.next(element);
28210 }
28211 };
28212 GroupBySubscriber.prototype._error = function (err) {
28213 var groups = this.groups;
28214 if (groups) {
28215 groups.forEach(function (group, key) {
28216 group.error(err);
28217 });
28218 groups.clear();
28219 }
28220 this.destination.error(err);
28221 };
28222 GroupBySubscriber.prototype._complete = function () {
28223 var groups = this.groups;
28224 if (groups) {
28225 groups.forEach(function (group, key) {
28226 group.complete();
28227 });
28228 groups.clear();
28229 }
28230 this.destination.complete();
28231 };
28232 GroupBySubscriber.prototype.removeGroup = function (key) {
28233 this.groups.delete(key);
28234 };
28235 GroupBySubscriber.prototype.unsubscribe = function () {
28236 if (!this.closed) {
28237 this.attemptedToUnsubscribe = true;
28238 if (this.count === 0) {
28239 _super.prototype.unsubscribe.call(this);
28240 }
28241 }
28242 };
28243 return GroupBySubscriber;
28244}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
28245var GroupDurationSubscriber = /*@__PURE__*/ (function (_super) {
28246 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(GroupDurationSubscriber, _super);
28247 function GroupDurationSubscriber(key, group, parent) {
28248 var _this = _super.call(this, group) || this;
28249 _this.key = key;
28250 _this.group = group;
28251 _this.parent = parent;
28252 return _this;
28253 }
28254 GroupDurationSubscriber.prototype._next = function (value) {
28255 this.complete();
28256 };
28257 GroupDurationSubscriber.prototype._unsubscribe = function () {
28258 var _a = this, parent = _a.parent, key = _a.key;
28259 this.key = this.parent = null;
28260 if (parent) {
28261 parent.removeGroup(key);
28262 }
28263 };
28264 return GroupDurationSubscriber;
28265}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
28266var GroupedObservable = /*@__PURE__*/ (function (_super) {
28267 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(GroupedObservable, _super);
28268 function GroupedObservable(key, groupSubject, refCountSubscription) {
28269 var _this = _super.call(this) || this;
28270 _this.key = key;
28271 _this.groupSubject = groupSubject;
28272 _this.refCountSubscription = refCountSubscription;
28273 return _this;
28274 }
28275 GroupedObservable.prototype._subscribe = function (subscriber) {
28276 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_3__.Subscription();
28277 var _a = this, refCountSubscription = _a.refCountSubscription, groupSubject = _a.groupSubject;
28278 if (refCountSubscription && !refCountSubscription.closed) {
28279 subscription.add(new InnerRefCountSubscription(refCountSubscription));
28280 }
28281 subscription.add(groupSubject.subscribe(subscriber));
28282 return subscription;
28283 };
28284 return GroupedObservable;
28285}(_Observable__WEBPACK_IMPORTED_MODULE_4__.Observable));
28286
28287var InnerRefCountSubscription = /*@__PURE__*/ (function (_super) {
28288 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(InnerRefCountSubscription, _super);
28289 function InnerRefCountSubscription(parent) {
28290 var _this = _super.call(this) || this;
28291 _this.parent = parent;
28292 parent.count++;
28293 return _this;
28294 }
28295 InnerRefCountSubscription.prototype.unsubscribe = function () {
28296 var parent = this.parent;
28297 if (!parent.closed && !this.closed) {
28298 _super.prototype.unsubscribe.call(this);
28299 parent.count -= 1;
28300 if (parent.count === 0 && parent.attemptedToUnsubscribe) {
28301 parent.unsubscribe();
28302 }
28303 }
28304 };
28305 return InnerRefCountSubscription;
28306}(_Subscription__WEBPACK_IMPORTED_MODULE_3__.Subscription));
28307//# sourceMappingURL=groupBy.js.map
28308
28309
28310/***/ }),
28311/* 189 */
28312/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28313
28314"use strict";
28315__webpack_require__.r(__webpack_exports__);
28316/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28317/* harmony export */ "BehaviorSubject": () => /* binding */ BehaviorSubject
28318/* harmony export */ });
28319/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
28320/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(185);
28321/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(186);
28322/** PURE_IMPORTS_START tslib,_Subject,_util_ObjectUnsubscribedError PURE_IMPORTS_END */
28323
28324
28325
28326var BehaviorSubject = /*@__PURE__*/ (function (_super) {
28327 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BehaviorSubject, _super);
28328 function BehaviorSubject(_value) {
28329 var _this = _super.call(this) || this;
28330 _this._value = _value;
28331 return _this;
28332 }
28333 Object.defineProperty(BehaviorSubject.prototype, "value", {
28334 get: function () {
28335 return this.getValue();
28336 },
28337 enumerable: true,
28338 configurable: true
28339 });
28340 BehaviorSubject.prototype._subscribe = function (subscriber) {
28341 var subscription = _super.prototype._subscribe.call(this, subscriber);
28342 if (subscription && !subscription.closed) {
28343 subscriber.next(this._value);
28344 }
28345 return subscription;
28346 };
28347 BehaviorSubject.prototype.getValue = function () {
28348 if (this.hasError) {
28349 throw this.thrownError;
28350 }
28351 else if (this.closed) {
28352 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__.ObjectUnsubscribedError();
28353 }
28354 else {
28355 return this._value;
28356 }
28357 };
28358 BehaviorSubject.prototype.next = function (value) {
28359 _super.prototype.next.call(this, this._value = value);
28360 };
28361 return BehaviorSubject;
28362}(_Subject__WEBPACK_IMPORTED_MODULE_2__.Subject));
28363
28364//# sourceMappingURL=BehaviorSubject.js.map
28365
28366
28367/***/ }),
28368/* 190 */
28369/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28370
28371"use strict";
28372__webpack_require__.r(__webpack_exports__);
28373/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28374/* harmony export */ "ReplaySubject": () => /* binding */ ReplaySubject
28375/* harmony export */ });
28376/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
28377/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(185);
28378/* harmony import */ var _scheduler_queue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(200);
28379/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(174);
28380/* harmony import */ var _operators_observeOn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(191);
28381/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(186);
28382/* harmony import */ var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(187);
28383/** PURE_IMPORTS_START tslib,_Subject,_scheduler_queue,_Subscription,_operators_observeOn,_util_ObjectUnsubscribedError,_SubjectSubscription PURE_IMPORTS_END */
28384
28385
28386
28387
28388
28389
28390
28391var ReplaySubject = /*@__PURE__*/ (function (_super) {
28392 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ReplaySubject, _super);
28393 function ReplaySubject(bufferSize, windowTime, scheduler) {
28394 if (bufferSize === void 0) {
28395 bufferSize = Number.POSITIVE_INFINITY;
28396 }
28397 if (windowTime === void 0) {
28398 windowTime = Number.POSITIVE_INFINITY;
28399 }
28400 var _this = _super.call(this) || this;
28401 _this.scheduler = scheduler;
28402 _this._events = [];
28403 _this._infiniteTimeWindow = false;
28404 _this._bufferSize = bufferSize < 1 ? 1 : bufferSize;
28405 _this._windowTime = windowTime < 1 ? 1 : windowTime;
28406 if (windowTime === Number.POSITIVE_INFINITY) {
28407 _this._infiniteTimeWindow = true;
28408 _this.next = _this.nextInfiniteTimeWindow;
28409 }
28410 else {
28411 _this.next = _this.nextTimeWindow;
28412 }
28413 return _this;
28414 }
28415 ReplaySubject.prototype.nextInfiniteTimeWindow = function (value) {
28416 var _events = this._events;
28417 _events.push(value);
28418 if (_events.length > this._bufferSize) {
28419 _events.shift();
28420 }
28421 _super.prototype.next.call(this, value);
28422 };
28423 ReplaySubject.prototype.nextTimeWindow = function (value) {
28424 this._events.push(new ReplayEvent(this._getNow(), value));
28425 this._trimBufferThenGetEvents();
28426 _super.prototype.next.call(this, value);
28427 };
28428 ReplaySubject.prototype._subscribe = function (subscriber) {
28429 var _infiniteTimeWindow = this._infiniteTimeWindow;
28430 var _events = _infiniteTimeWindow ? this._events : this._trimBufferThenGetEvents();
28431 var scheduler = this.scheduler;
28432 var len = _events.length;
28433 var subscription;
28434 if (this.closed) {
28435 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__.ObjectUnsubscribedError();
28436 }
28437 else if (this.isStopped || this.hasError) {
28438 subscription = _Subscription__WEBPACK_IMPORTED_MODULE_2__.Subscription.EMPTY;
28439 }
28440 else {
28441 this.observers.push(subscriber);
28442 subscription = new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_3__.SubjectSubscription(this, subscriber);
28443 }
28444 if (scheduler) {
28445 subscriber.add(subscriber = new _operators_observeOn__WEBPACK_IMPORTED_MODULE_4__.ObserveOnSubscriber(subscriber, scheduler));
28446 }
28447 if (_infiniteTimeWindow) {
28448 for (var i = 0; i < len && !subscriber.closed; i++) {
28449 subscriber.next(_events[i]);
28450 }
28451 }
28452 else {
28453 for (var i = 0; i < len && !subscriber.closed; i++) {
28454 subscriber.next(_events[i].value);
28455 }
28456 }
28457 if (this.hasError) {
28458 subscriber.error(this.thrownError);
28459 }
28460 else if (this.isStopped) {
28461 subscriber.complete();
28462 }
28463 return subscription;
28464 };
28465 ReplaySubject.prototype._getNow = function () {
28466 return (this.scheduler || _scheduler_queue__WEBPACK_IMPORTED_MODULE_5__.queue).now();
28467 };
28468 ReplaySubject.prototype._trimBufferThenGetEvents = function () {
28469 var now = this._getNow();
28470 var _bufferSize = this._bufferSize;
28471 var _windowTime = this._windowTime;
28472 var _events = this._events;
28473 var eventsCount = _events.length;
28474 var spliceCount = 0;
28475 while (spliceCount < eventsCount) {
28476 if ((now - _events[spliceCount].time) < _windowTime) {
28477 break;
28478 }
28479 spliceCount++;
28480 }
28481 if (eventsCount > _bufferSize) {
28482 spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);
28483 }
28484 if (spliceCount > 0) {
28485 _events.splice(0, spliceCount);
28486 }
28487 return _events;
28488 };
28489 return ReplaySubject;
28490}(_Subject__WEBPACK_IMPORTED_MODULE_6__.Subject));
28491
28492var ReplayEvent = /*@__PURE__*/ (function () {
28493 function ReplayEvent(time, value) {
28494 this.time = time;
28495 this.value = value;
28496 }
28497 return ReplayEvent;
28498}());
28499//# sourceMappingURL=ReplaySubject.js.map
28500
28501
28502/***/ }),
28503/* 191 */
28504/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28505
28506"use strict";
28507__webpack_require__.r(__webpack_exports__);
28508/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28509/* harmony export */ "observeOn": () => /* binding */ observeOn,
28510/* harmony export */ "ObserveOnOperator": () => /* binding */ ObserveOnOperator,
28511/* harmony export */ "ObserveOnSubscriber": () => /* binding */ ObserveOnSubscriber,
28512/* harmony export */ "ObserveOnMessage": () => /* binding */ ObserveOnMessage
28513/* harmony export */ });
28514/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
28515/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(168);
28516/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(192);
28517/** PURE_IMPORTS_START tslib,_Subscriber,_Notification PURE_IMPORTS_END */
28518
28519
28520
28521function observeOn(scheduler, delay) {
28522 if (delay === void 0) {
28523 delay = 0;
28524 }
28525 return function observeOnOperatorFunction(source) {
28526 return source.lift(new ObserveOnOperator(scheduler, delay));
28527 };
28528}
28529var ObserveOnOperator = /*@__PURE__*/ (function () {
28530 function ObserveOnOperator(scheduler, delay) {
28531 if (delay === void 0) {
28532 delay = 0;
28533 }
28534 this.scheduler = scheduler;
28535 this.delay = delay;
28536 }
28537 ObserveOnOperator.prototype.call = function (subscriber, source) {
28538 return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));
28539 };
28540 return ObserveOnOperator;
28541}());
28542
28543var ObserveOnSubscriber = /*@__PURE__*/ (function (_super) {
28544 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ObserveOnSubscriber, _super);
28545 function ObserveOnSubscriber(destination, scheduler, delay) {
28546 if (delay === void 0) {
28547 delay = 0;
28548 }
28549 var _this = _super.call(this, destination) || this;
28550 _this.scheduler = scheduler;
28551 _this.delay = delay;
28552 return _this;
28553 }
28554 ObserveOnSubscriber.dispatch = function (arg) {
28555 var notification = arg.notification, destination = arg.destination;
28556 notification.observe(destination);
28557 this.unsubscribe();
28558 };
28559 ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {
28560 var destination = this.destination;
28561 destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));
28562 };
28563 ObserveOnSubscriber.prototype._next = function (value) {
28564 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_1__.Notification.createNext(value));
28565 };
28566 ObserveOnSubscriber.prototype._error = function (err) {
28567 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_1__.Notification.createError(err));
28568 this.unsubscribe();
28569 };
28570 ObserveOnSubscriber.prototype._complete = function () {
28571 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_1__.Notification.createComplete());
28572 this.unsubscribe();
28573 };
28574 return ObserveOnSubscriber;
28575}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
28576
28577var ObserveOnMessage = /*@__PURE__*/ (function () {
28578 function ObserveOnMessage(notification, destination) {
28579 this.notification = notification;
28580 this.destination = destination;
28581 }
28582 return ObserveOnMessage;
28583}());
28584
28585//# sourceMappingURL=observeOn.js.map
28586
28587
28588/***/ }),
28589/* 192 */
28590/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28591
28592"use strict";
28593__webpack_require__.r(__webpack_exports__);
28594/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28595/* harmony export */ "NotificationKind": () => /* binding */ NotificationKind,
28596/* harmony export */ "Notification": () => /* binding */ Notification
28597/* harmony export */ });
28598/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(199);
28599/* harmony import */ var _observable_of__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(193);
28600/* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(198);
28601/** PURE_IMPORTS_START _observable_empty,_observable_of,_observable_throwError PURE_IMPORTS_END */
28602
28603
28604
28605var NotificationKind;
28606/*@__PURE__*/ (function (NotificationKind) {
28607 NotificationKind["NEXT"] = "N";
28608 NotificationKind["ERROR"] = "E";
28609 NotificationKind["COMPLETE"] = "C";
28610})(NotificationKind || (NotificationKind = {}));
28611var Notification = /*@__PURE__*/ (function () {
28612 function Notification(kind, value, error) {
28613 this.kind = kind;
28614 this.value = value;
28615 this.error = error;
28616 this.hasValue = kind === 'N';
28617 }
28618 Notification.prototype.observe = function (observer) {
28619 switch (this.kind) {
28620 case 'N':
28621 return observer.next && observer.next(this.value);
28622 case 'E':
28623 return observer.error && observer.error(this.error);
28624 case 'C':
28625 return observer.complete && observer.complete();
28626 }
28627 };
28628 Notification.prototype.do = function (next, error, complete) {
28629 var kind = this.kind;
28630 switch (kind) {
28631 case 'N':
28632 return next && next(this.value);
28633 case 'E':
28634 return error && error(this.error);
28635 case 'C':
28636 return complete && complete();
28637 }
28638 };
28639 Notification.prototype.accept = function (nextOrObserver, error, complete) {
28640 if (nextOrObserver && typeof nextOrObserver.next === 'function') {
28641 return this.observe(nextOrObserver);
28642 }
28643 else {
28644 return this.do(nextOrObserver, error, complete);
28645 }
28646 };
28647 Notification.prototype.toObservable = function () {
28648 var kind = this.kind;
28649 switch (kind) {
28650 case 'N':
28651 return (0,_observable_of__WEBPACK_IMPORTED_MODULE_0__.of)(this.value);
28652 case 'E':
28653 return (0,_observable_throwError__WEBPACK_IMPORTED_MODULE_1__.throwError)(this.error);
28654 case 'C':
28655 return (0,_observable_empty__WEBPACK_IMPORTED_MODULE_2__.empty)();
28656 }
28657 throw new Error('unexpected notification kind value');
28658 };
28659 Notification.createNext = function (value) {
28660 if (typeof value !== 'undefined') {
28661 return new Notification('N', value);
28662 }
28663 return Notification.undefinedValueNotification;
28664 };
28665 Notification.createError = function (err) {
28666 return new Notification('E', undefined, err);
28667 };
28668 Notification.createComplete = function () {
28669 return Notification.completeNotification;
28670 };
28671 Notification.completeNotification = new Notification('C');
28672 Notification.undefinedValueNotification = new Notification('N', undefined);
28673 return Notification;
28674}());
28675
28676//# sourceMappingURL=Notification.js.map
28677
28678
28679/***/ }),
28680/* 193 */
28681/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28682
28683"use strict";
28684__webpack_require__.r(__webpack_exports__);
28685/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28686/* harmony export */ "of": () => /* binding */ of
28687/* harmony export */ });
28688/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(194);
28689/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(196);
28690/* harmony import */ var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(195);
28691/** PURE_IMPORTS_START _util_isScheduler,_fromArray,_scheduled_scheduleArray PURE_IMPORTS_END */
28692
28693
28694
28695function of() {
28696 var args = [];
28697 for (var _i = 0; _i < arguments.length; _i++) {
28698 args[_i] = arguments[_i];
28699 }
28700 var scheduler = args[args.length - 1];
28701 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__.isScheduler)(scheduler)) {
28702 args.pop();
28703 return (0,_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_1__.scheduleArray)(args, scheduler);
28704 }
28705 else {
28706 return (0,_fromArray__WEBPACK_IMPORTED_MODULE_2__.fromArray)(args);
28707 }
28708}
28709//# sourceMappingURL=of.js.map
28710
28711
28712/***/ }),
28713/* 194 */
28714/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28715
28716"use strict";
28717__webpack_require__.r(__webpack_exports__);
28718/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28719/* harmony export */ "isScheduler": () => /* binding */ isScheduler
28720/* harmony export */ });
28721/** PURE_IMPORTS_START PURE_IMPORTS_END */
28722function isScheduler(value) {
28723 return value && typeof value.schedule === 'function';
28724}
28725//# sourceMappingURL=isScheduler.js.map
28726
28727
28728/***/ }),
28729/* 195 */
28730/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28731
28732"use strict";
28733__webpack_require__.r(__webpack_exports__);
28734/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28735/* harmony export */ "scheduleArray": () => /* binding */ scheduleArray
28736/* harmony export */ });
28737/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
28738/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
28739/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
28740
28741
28742function scheduleArray(input, scheduler) {
28743 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
28744 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
28745 var i = 0;
28746 sub.add(scheduler.schedule(function () {
28747 if (i === input.length) {
28748 subscriber.complete();
28749 return;
28750 }
28751 subscriber.next(input[i++]);
28752 if (!subscriber.closed) {
28753 sub.add(this.schedule());
28754 }
28755 }));
28756 return sub;
28757 });
28758}
28759//# sourceMappingURL=scheduleArray.js.map
28760
28761
28762/***/ }),
28763/* 196 */
28764/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28765
28766"use strict";
28767__webpack_require__.r(__webpack_exports__);
28768/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28769/* harmony export */ "fromArray": () => /* binding */ fromArray
28770/* harmony export */ });
28771/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
28772/* harmony import */ var _util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
28773/* harmony import */ var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(195);
28774/** PURE_IMPORTS_START _Observable,_util_subscribeToArray,_scheduled_scheduleArray PURE_IMPORTS_END */
28775
28776
28777
28778function fromArray(input, scheduler) {
28779 if (!scheduler) {
28780 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable((0,_util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__.subscribeToArray)(input));
28781 }
28782 else {
28783 return (0,_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__.scheduleArray)(input, scheduler);
28784 }
28785}
28786//# sourceMappingURL=fromArray.js.map
28787
28788
28789/***/ }),
28790/* 197 */
28791/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28792
28793"use strict";
28794__webpack_require__.r(__webpack_exports__);
28795/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28796/* harmony export */ "subscribeToArray": () => /* binding */ subscribeToArray
28797/* harmony export */ });
28798/** PURE_IMPORTS_START PURE_IMPORTS_END */
28799var subscribeToArray = function (array) {
28800 return function (subscriber) {
28801 for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) {
28802 subscriber.next(array[i]);
28803 }
28804 subscriber.complete();
28805 };
28806};
28807//# sourceMappingURL=subscribeToArray.js.map
28808
28809
28810/***/ }),
28811/* 198 */
28812/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28813
28814"use strict";
28815__webpack_require__.r(__webpack_exports__);
28816/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28817/* harmony export */ "throwError": () => /* binding */ throwError
28818/* harmony export */ });
28819/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
28820/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
28821
28822function throwError(error, scheduler) {
28823 if (!scheduler) {
28824 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) { return subscriber.error(error); });
28825 }
28826 else {
28827 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) { return scheduler.schedule(dispatch, 0, { error: error, subscriber: subscriber }); });
28828 }
28829}
28830function dispatch(_a) {
28831 var error = _a.error, subscriber = _a.subscriber;
28832 subscriber.error(error);
28833}
28834//# sourceMappingURL=throwError.js.map
28835
28836
28837/***/ }),
28838/* 199 */
28839/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28840
28841"use strict";
28842__webpack_require__.r(__webpack_exports__);
28843/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28844/* harmony export */ "EMPTY": () => /* binding */ EMPTY,
28845/* harmony export */ "empty": () => /* binding */ empty
28846/* harmony export */ });
28847/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
28848/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
28849
28850var EMPTY = /*@__PURE__*/ new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) { return subscriber.complete(); });
28851function empty(scheduler) {
28852 return scheduler ? emptyScheduled(scheduler) : EMPTY;
28853}
28854function emptyScheduled(scheduler) {
28855 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });
28856}
28857//# sourceMappingURL=empty.js.map
28858
28859
28860/***/ }),
28861/* 200 */
28862/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28863
28864"use strict";
28865__webpack_require__.r(__webpack_exports__);
28866/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28867/* harmony export */ "queue": () => /* binding */ queue
28868/* harmony export */ });
28869/* harmony import */ var _QueueAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(204);
28870/* harmony import */ var _QueueScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(201);
28871/** PURE_IMPORTS_START _QueueAction,_QueueScheduler PURE_IMPORTS_END */
28872
28873
28874var queue = /*@__PURE__*/ new _QueueScheduler__WEBPACK_IMPORTED_MODULE_0__.QueueScheduler(_QueueAction__WEBPACK_IMPORTED_MODULE_1__.QueueAction);
28875//# sourceMappingURL=queue.js.map
28876
28877
28878/***/ }),
28879/* 201 */
28880/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28881
28882"use strict";
28883__webpack_require__.r(__webpack_exports__);
28884/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28885/* harmony export */ "QueueScheduler": () => /* binding */ QueueScheduler
28886/* harmony export */ });
28887/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
28888/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(202);
28889/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
28890
28891
28892var QueueScheduler = /*@__PURE__*/ (function (_super) {
28893 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(QueueScheduler, _super);
28894 function QueueScheduler() {
28895 return _super !== null && _super.apply(this, arguments) || this;
28896 }
28897 return QueueScheduler;
28898}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__.AsyncScheduler));
28899
28900//# sourceMappingURL=QueueScheduler.js.map
28901
28902
28903/***/ }),
28904/* 202 */
28905/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28906
28907"use strict";
28908__webpack_require__.r(__webpack_exports__);
28909/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28910/* harmony export */ "AsyncScheduler": () => /* binding */ AsyncScheduler
28911/* harmony export */ });
28912/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
28913/* harmony import */ var _Scheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(203);
28914/** PURE_IMPORTS_START tslib,_Scheduler PURE_IMPORTS_END */
28915
28916
28917var AsyncScheduler = /*@__PURE__*/ (function (_super) {
28918 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AsyncScheduler, _super);
28919 function AsyncScheduler(SchedulerAction, now) {
28920 if (now === void 0) {
28921 now = _Scheduler__WEBPACK_IMPORTED_MODULE_1__.Scheduler.now;
28922 }
28923 var _this = _super.call(this, SchedulerAction, function () {
28924 if (AsyncScheduler.delegate && AsyncScheduler.delegate !== _this) {
28925 return AsyncScheduler.delegate.now();
28926 }
28927 else {
28928 return now();
28929 }
28930 }) || this;
28931 _this.actions = [];
28932 _this.active = false;
28933 _this.scheduled = undefined;
28934 return _this;
28935 }
28936 AsyncScheduler.prototype.schedule = function (work, delay, state) {
28937 if (delay === void 0) {
28938 delay = 0;
28939 }
28940 if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {
28941 return AsyncScheduler.delegate.schedule(work, delay, state);
28942 }
28943 else {
28944 return _super.prototype.schedule.call(this, work, delay, state);
28945 }
28946 };
28947 AsyncScheduler.prototype.flush = function (action) {
28948 var actions = this.actions;
28949 if (this.active) {
28950 actions.push(action);
28951 return;
28952 }
28953 var error;
28954 this.active = true;
28955 do {
28956 if (error = action.execute(action.state, action.delay)) {
28957 break;
28958 }
28959 } while (action = actions.shift());
28960 this.active = false;
28961 if (error) {
28962 while (action = actions.shift()) {
28963 action.unsubscribe();
28964 }
28965 throw error;
28966 }
28967 };
28968 return AsyncScheduler;
28969}(_Scheduler__WEBPACK_IMPORTED_MODULE_1__.Scheduler));
28970
28971//# sourceMappingURL=AsyncScheduler.js.map
28972
28973
28974/***/ }),
28975/* 203 */
28976/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28977
28978"use strict";
28979__webpack_require__.r(__webpack_exports__);
28980/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28981/* harmony export */ "Scheduler": () => /* binding */ Scheduler
28982/* harmony export */ });
28983var Scheduler = /*@__PURE__*/ (function () {
28984 function Scheduler(SchedulerAction, now) {
28985 if (now === void 0) {
28986 now = Scheduler.now;
28987 }
28988 this.SchedulerAction = SchedulerAction;
28989 this.now = now;
28990 }
28991 Scheduler.prototype.schedule = function (work, delay, state) {
28992 if (delay === void 0) {
28993 delay = 0;
28994 }
28995 return new this.SchedulerAction(this, work).schedule(state, delay);
28996 };
28997 Scheduler.now = function () { return Date.now(); };
28998 return Scheduler;
28999}());
29000
29001//# sourceMappingURL=Scheduler.js.map
29002
29003
29004/***/ }),
29005/* 204 */
29006/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29007
29008"use strict";
29009__webpack_require__.r(__webpack_exports__);
29010/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29011/* harmony export */ "QueueAction": () => /* binding */ QueueAction
29012/* harmony export */ });
29013/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
29014/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205);
29015/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */
29016
29017
29018var QueueAction = /*@__PURE__*/ (function (_super) {
29019 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(QueueAction, _super);
29020 function QueueAction(scheduler, work) {
29021 var _this = _super.call(this, scheduler, work) || this;
29022 _this.scheduler = scheduler;
29023 _this.work = work;
29024 return _this;
29025 }
29026 QueueAction.prototype.schedule = function (state, delay) {
29027 if (delay === void 0) {
29028 delay = 0;
29029 }
29030 if (delay > 0) {
29031 return _super.prototype.schedule.call(this, state, delay);
29032 }
29033 this.delay = delay;
29034 this.state = state;
29035 this.scheduler.flush(this);
29036 return this;
29037 };
29038 QueueAction.prototype.execute = function (state, delay) {
29039 return (delay > 0 || this.closed) ?
29040 _super.prototype.execute.call(this, state, delay) :
29041 this._execute(state, delay);
29042 };
29043 QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {
29044 if (delay === void 0) {
29045 delay = 0;
29046 }
29047 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
29048 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
29049 }
29050 return scheduler.flush(this);
29051 };
29052 return QueueAction;
29053}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__.AsyncAction));
29054
29055//# sourceMappingURL=QueueAction.js.map
29056
29057
29058/***/ }),
29059/* 205 */
29060/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29061
29062"use strict";
29063__webpack_require__.r(__webpack_exports__);
29064/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29065/* harmony export */ "AsyncAction": () => /* binding */ AsyncAction
29066/* harmony export */ });
29067/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
29068/* harmony import */ var _Action__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(206);
29069/** PURE_IMPORTS_START tslib,_Action PURE_IMPORTS_END */
29070
29071
29072var AsyncAction = /*@__PURE__*/ (function (_super) {
29073 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AsyncAction, _super);
29074 function AsyncAction(scheduler, work) {
29075 var _this = _super.call(this, scheduler, work) || this;
29076 _this.scheduler = scheduler;
29077 _this.work = work;
29078 _this.pending = false;
29079 return _this;
29080 }
29081 AsyncAction.prototype.schedule = function (state, delay) {
29082 if (delay === void 0) {
29083 delay = 0;
29084 }
29085 if (this.closed) {
29086 return this;
29087 }
29088 this.state = state;
29089 var id = this.id;
29090 var scheduler = this.scheduler;
29091 if (id != null) {
29092 this.id = this.recycleAsyncId(scheduler, id, delay);
29093 }
29094 this.pending = true;
29095 this.delay = delay;
29096 this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
29097 return this;
29098 };
29099 AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {
29100 if (delay === void 0) {
29101 delay = 0;
29102 }
29103 return setInterval(scheduler.flush.bind(scheduler, this), delay);
29104 };
29105 AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
29106 if (delay === void 0) {
29107 delay = 0;
29108 }
29109 if (delay !== null && this.delay === delay && this.pending === false) {
29110 return id;
29111 }
29112 clearInterval(id);
29113 return undefined;
29114 };
29115 AsyncAction.prototype.execute = function (state, delay) {
29116 if (this.closed) {
29117 return new Error('executing a cancelled action');
29118 }
29119 this.pending = false;
29120 var error = this._execute(state, delay);
29121 if (error) {
29122 return error;
29123 }
29124 else if (this.pending === false && this.id != null) {
29125 this.id = this.recycleAsyncId(this.scheduler, this.id, null);
29126 }
29127 };
29128 AsyncAction.prototype._execute = function (state, delay) {
29129 var errored = false;
29130 var errorValue = undefined;
29131 try {
29132 this.work(state);
29133 }
29134 catch (e) {
29135 errored = true;
29136 errorValue = !!e && e || new Error(e);
29137 }
29138 if (errored) {
29139 this.unsubscribe();
29140 return errorValue;
29141 }
29142 };
29143 AsyncAction.prototype._unsubscribe = function () {
29144 var id = this.id;
29145 var scheduler = this.scheduler;
29146 var actions = scheduler.actions;
29147 var index = actions.indexOf(this);
29148 this.work = null;
29149 this.state = null;
29150 this.pending = false;
29151 this.scheduler = null;
29152 if (index !== -1) {
29153 actions.splice(index, 1);
29154 }
29155 if (id != null) {
29156 this.id = this.recycleAsyncId(scheduler, id, null);
29157 }
29158 this.delay = null;
29159 };
29160 return AsyncAction;
29161}(_Action__WEBPACK_IMPORTED_MODULE_1__.Action));
29162
29163//# sourceMappingURL=AsyncAction.js.map
29164
29165
29166/***/ }),
29167/* 206 */
29168/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29169
29170"use strict";
29171__webpack_require__.r(__webpack_exports__);
29172/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29173/* harmony export */ "Action": () => /* binding */ Action
29174/* harmony export */ });
29175/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
29176/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
29177/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */
29178
29179
29180var Action = /*@__PURE__*/ (function (_super) {
29181 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(Action, _super);
29182 function Action(scheduler, work) {
29183 return _super.call(this) || this;
29184 }
29185 Action.prototype.schedule = function (state, delay) {
29186 if (delay === void 0) {
29187 delay = 0;
29188 }
29189 return this;
29190 };
29191 return Action;
29192}(_Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription));
29193
29194//# sourceMappingURL=Action.js.map
29195
29196
29197/***/ }),
29198/* 207 */
29199/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29200
29201"use strict";
29202__webpack_require__.r(__webpack_exports__);
29203/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29204/* harmony export */ "AsyncSubject": () => /* binding */ AsyncSubject
29205/* harmony export */ });
29206/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
29207/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(185);
29208/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
29209/** PURE_IMPORTS_START tslib,_Subject,_Subscription PURE_IMPORTS_END */
29210
29211
29212
29213var AsyncSubject = /*@__PURE__*/ (function (_super) {
29214 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AsyncSubject, _super);
29215 function AsyncSubject() {
29216 var _this = _super !== null && _super.apply(this, arguments) || this;
29217 _this.value = null;
29218 _this.hasNext = false;
29219 _this.hasCompleted = false;
29220 return _this;
29221 }
29222 AsyncSubject.prototype._subscribe = function (subscriber) {
29223 if (this.hasError) {
29224 subscriber.error(this.thrownError);
29225 return _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription.EMPTY;
29226 }
29227 else if (this.hasCompleted && this.hasNext) {
29228 subscriber.next(this.value);
29229 subscriber.complete();
29230 return _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription.EMPTY;
29231 }
29232 return _super.prototype._subscribe.call(this, subscriber);
29233 };
29234 AsyncSubject.prototype.next = function (value) {
29235 if (!this.hasCompleted) {
29236 this.value = value;
29237 this.hasNext = true;
29238 }
29239 };
29240 AsyncSubject.prototype.error = function (error) {
29241 if (!this.hasCompleted) {
29242 _super.prototype.error.call(this, error);
29243 }
29244 };
29245 AsyncSubject.prototype.complete = function () {
29246 this.hasCompleted = true;
29247 if (this.hasNext) {
29248 _super.prototype.next.call(this, this.value);
29249 }
29250 _super.prototype.complete.call(this);
29251 };
29252 return AsyncSubject;
29253}(_Subject__WEBPACK_IMPORTED_MODULE_2__.Subject));
29254
29255//# sourceMappingURL=AsyncSubject.js.map
29256
29257
29258/***/ }),
29259/* 208 */
29260/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29261
29262"use strict";
29263__webpack_require__.r(__webpack_exports__);
29264/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29265/* harmony export */ "asap": () => /* binding */ asap
29266/* harmony export */ });
29267/* harmony import */ var _AsapAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(210);
29268/* harmony import */ var _AsapScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(209);
29269/** PURE_IMPORTS_START _AsapAction,_AsapScheduler PURE_IMPORTS_END */
29270
29271
29272var asap = /*@__PURE__*/ new _AsapScheduler__WEBPACK_IMPORTED_MODULE_0__.AsapScheduler(_AsapAction__WEBPACK_IMPORTED_MODULE_1__.AsapAction);
29273//# sourceMappingURL=asap.js.map
29274
29275
29276/***/ }),
29277/* 209 */
29278/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29279
29280"use strict";
29281__webpack_require__.r(__webpack_exports__);
29282/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29283/* harmony export */ "AsapScheduler": () => /* binding */ AsapScheduler
29284/* harmony export */ });
29285/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
29286/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(202);
29287/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
29288
29289
29290var AsapScheduler = /*@__PURE__*/ (function (_super) {
29291 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AsapScheduler, _super);
29292 function AsapScheduler() {
29293 return _super !== null && _super.apply(this, arguments) || this;
29294 }
29295 AsapScheduler.prototype.flush = function (action) {
29296 this.active = true;
29297 this.scheduled = undefined;
29298 var actions = this.actions;
29299 var error;
29300 var index = -1;
29301 var count = actions.length;
29302 action = action || actions.shift();
29303 do {
29304 if (error = action.execute(action.state, action.delay)) {
29305 break;
29306 }
29307 } while (++index < count && (action = actions.shift()));
29308 this.active = false;
29309 if (error) {
29310 while (++index < count && (action = actions.shift())) {
29311 action.unsubscribe();
29312 }
29313 throw error;
29314 }
29315 };
29316 return AsapScheduler;
29317}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__.AsyncScheduler));
29318
29319//# sourceMappingURL=AsapScheduler.js.map
29320
29321
29322/***/ }),
29323/* 210 */
29324/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29325
29326"use strict";
29327__webpack_require__.r(__webpack_exports__);
29328/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29329/* harmony export */ "AsapAction": () => /* binding */ AsapAction
29330/* harmony export */ });
29331/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
29332/* harmony import */ var _util_Immediate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(211);
29333/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(205);
29334/** PURE_IMPORTS_START tslib,_util_Immediate,_AsyncAction PURE_IMPORTS_END */
29335
29336
29337
29338var AsapAction = /*@__PURE__*/ (function (_super) {
29339 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AsapAction, _super);
29340 function AsapAction(scheduler, work) {
29341 var _this = _super.call(this, scheduler, work) || this;
29342 _this.scheduler = scheduler;
29343 _this.work = work;
29344 return _this;
29345 }
29346 AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) {
29347 if (delay === void 0) {
29348 delay = 0;
29349 }
29350 if (delay !== null && delay > 0) {
29351 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
29352 }
29353 scheduler.actions.push(this);
29354 return scheduler.scheduled || (scheduler.scheduled = _util_Immediate__WEBPACK_IMPORTED_MODULE_1__.Immediate.setImmediate(scheduler.flush.bind(scheduler, null)));
29355 };
29356 AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
29357 if (delay === void 0) {
29358 delay = 0;
29359 }
29360 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
29361 return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
29362 }
29363 if (scheduler.actions.length === 0) {
29364 _util_Immediate__WEBPACK_IMPORTED_MODULE_1__.Immediate.clearImmediate(id);
29365 scheduler.scheduled = undefined;
29366 }
29367 return undefined;
29368 };
29369 return AsapAction;
29370}(_AsyncAction__WEBPACK_IMPORTED_MODULE_2__.AsyncAction));
29371
29372//# sourceMappingURL=AsapAction.js.map
29373
29374
29375/***/ }),
29376/* 211 */
29377/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29378
29379"use strict";
29380__webpack_require__.r(__webpack_exports__);
29381/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29382/* harmony export */ "Immediate": () => /* binding */ Immediate,
29383/* harmony export */ "TestTools": () => /* binding */ TestTools
29384/* harmony export */ });
29385/** PURE_IMPORTS_START PURE_IMPORTS_END */
29386var nextHandle = 1;
29387var RESOLVED = /*@__PURE__*/ (function () { return /*@__PURE__*/ Promise.resolve(); })();
29388var activeHandles = {};
29389function findAndClearHandle(handle) {
29390 if (handle in activeHandles) {
29391 delete activeHandles[handle];
29392 return true;
29393 }
29394 return false;
29395}
29396var Immediate = {
29397 setImmediate: function (cb) {
29398 var handle = nextHandle++;
29399 activeHandles[handle] = true;
29400 RESOLVED.then(function () { return findAndClearHandle(handle) && cb(); });
29401 return handle;
29402 },
29403 clearImmediate: function (handle) {
29404 findAndClearHandle(handle);
29405 },
29406};
29407var TestTools = {
29408 pending: function () {
29409 return Object.keys(activeHandles).length;
29410 }
29411};
29412//# sourceMappingURL=Immediate.js.map
29413
29414
29415/***/ }),
29416/* 212 */
29417/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29418
29419"use strict";
29420__webpack_require__.r(__webpack_exports__);
29421/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29422/* harmony export */ "async": () => /* binding */ async
29423/* harmony export */ });
29424/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205);
29425/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(202);
29426/** PURE_IMPORTS_START _AsyncAction,_AsyncScheduler PURE_IMPORTS_END */
29427
29428
29429var async = /*@__PURE__*/ new _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__.AsyncScheduler(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__.AsyncAction);
29430//# sourceMappingURL=async.js.map
29431
29432
29433/***/ }),
29434/* 213 */
29435/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29436
29437"use strict";
29438__webpack_require__.r(__webpack_exports__);
29439/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29440/* harmony export */ "animationFrame": () => /* binding */ animationFrame
29441/* harmony export */ });
29442/* harmony import */ var _AnimationFrameAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(215);
29443/* harmony import */ var _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(214);
29444/** PURE_IMPORTS_START _AnimationFrameAction,_AnimationFrameScheduler PURE_IMPORTS_END */
29445
29446
29447var animationFrame = /*@__PURE__*/ new _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_0__.AnimationFrameScheduler(_AnimationFrameAction__WEBPACK_IMPORTED_MODULE_1__.AnimationFrameAction);
29448//# sourceMappingURL=animationFrame.js.map
29449
29450
29451/***/ }),
29452/* 214 */
29453/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29454
29455"use strict";
29456__webpack_require__.r(__webpack_exports__);
29457/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29458/* harmony export */ "AnimationFrameScheduler": () => /* binding */ AnimationFrameScheduler
29459/* harmony export */ });
29460/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
29461/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(202);
29462/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
29463
29464
29465var AnimationFrameScheduler = /*@__PURE__*/ (function (_super) {
29466 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AnimationFrameScheduler, _super);
29467 function AnimationFrameScheduler() {
29468 return _super !== null && _super.apply(this, arguments) || this;
29469 }
29470 AnimationFrameScheduler.prototype.flush = function (action) {
29471 this.active = true;
29472 this.scheduled = undefined;
29473 var actions = this.actions;
29474 var error;
29475 var index = -1;
29476 var count = actions.length;
29477 action = action || actions.shift();
29478 do {
29479 if (error = action.execute(action.state, action.delay)) {
29480 break;
29481 }
29482 } while (++index < count && (action = actions.shift()));
29483 this.active = false;
29484 if (error) {
29485 while (++index < count && (action = actions.shift())) {
29486 action.unsubscribe();
29487 }
29488 throw error;
29489 }
29490 };
29491 return AnimationFrameScheduler;
29492}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__.AsyncScheduler));
29493
29494//# sourceMappingURL=AnimationFrameScheduler.js.map
29495
29496
29497/***/ }),
29498/* 215 */
29499/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29500
29501"use strict";
29502__webpack_require__.r(__webpack_exports__);
29503/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29504/* harmony export */ "AnimationFrameAction": () => /* binding */ AnimationFrameAction
29505/* harmony export */ });
29506/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
29507/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205);
29508/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */
29509
29510
29511var AnimationFrameAction = /*@__PURE__*/ (function (_super) {
29512 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AnimationFrameAction, _super);
29513 function AnimationFrameAction(scheduler, work) {
29514 var _this = _super.call(this, scheduler, work) || this;
29515 _this.scheduler = scheduler;
29516 _this.work = work;
29517 return _this;
29518 }
29519 AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) {
29520 if (delay === void 0) {
29521 delay = 0;
29522 }
29523 if (delay !== null && delay > 0) {
29524 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
29525 }
29526 scheduler.actions.push(this);
29527 return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(function () { return scheduler.flush(null); }));
29528 };
29529 AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
29530 if (delay === void 0) {
29531 delay = 0;
29532 }
29533 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
29534 return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
29535 }
29536 if (scheduler.actions.length === 0) {
29537 cancelAnimationFrame(id);
29538 scheduler.scheduled = undefined;
29539 }
29540 return undefined;
29541 };
29542 return AnimationFrameAction;
29543}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__.AsyncAction));
29544
29545//# sourceMappingURL=AnimationFrameAction.js.map
29546
29547
29548/***/ }),
29549/* 216 */
29550/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29551
29552"use strict";
29553__webpack_require__.r(__webpack_exports__);
29554/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29555/* harmony export */ "VirtualTimeScheduler": () => /* binding */ VirtualTimeScheduler,
29556/* harmony export */ "VirtualAction": () => /* binding */ VirtualAction
29557/* harmony export */ });
29558/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
29559/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(205);
29560/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(202);
29561/** PURE_IMPORTS_START tslib,_AsyncAction,_AsyncScheduler PURE_IMPORTS_END */
29562
29563
29564
29565var VirtualTimeScheduler = /*@__PURE__*/ (function (_super) {
29566 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(VirtualTimeScheduler, _super);
29567 function VirtualTimeScheduler(SchedulerAction, maxFrames) {
29568 if (SchedulerAction === void 0) {
29569 SchedulerAction = VirtualAction;
29570 }
29571 if (maxFrames === void 0) {
29572 maxFrames = Number.POSITIVE_INFINITY;
29573 }
29574 var _this = _super.call(this, SchedulerAction, function () { return _this.frame; }) || this;
29575 _this.maxFrames = maxFrames;
29576 _this.frame = 0;
29577 _this.index = -1;
29578 return _this;
29579 }
29580 VirtualTimeScheduler.prototype.flush = function () {
29581 var _a = this, actions = _a.actions, maxFrames = _a.maxFrames;
29582 var error, action;
29583 while ((action = actions[0]) && action.delay <= maxFrames) {
29584 actions.shift();
29585 this.frame = action.delay;
29586 if (error = action.execute(action.state, action.delay)) {
29587 break;
29588 }
29589 }
29590 if (error) {
29591 while (action = actions.shift()) {
29592 action.unsubscribe();
29593 }
29594 throw error;
29595 }
29596 };
29597 VirtualTimeScheduler.frameTimeFactor = 10;
29598 return VirtualTimeScheduler;
29599}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__.AsyncScheduler));
29600
29601var VirtualAction = /*@__PURE__*/ (function (_super) {
29602 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(VirtualAction, _super);
29603 function VirtualAction(scheduler, work, index) {
29604 if (index === void 0) {
29605 index = scheduler.index += 1;
29606 }
29607 var _this = _super.call(this, scheduler, work) || this;
29608 _this.scheduler = scheduler;
29609 _this.work = work;
29610 _this.index = index;
29611 _this.active = true;
29612 _this.index = scheduler.index = index;
29613 return _this;
29614 }
29615 VirtualAction.prototype.schedule = function (state, delay) {
29616 if (delay === void 0) {
29617 delay = 0;
29618 }
29619 if (!this.id) {
29620 return _super.prototype.schedule.call(this, state, delay);
29621 }
29622 this.active = false;
29623 var action = new VirtualAction(this.scheduler, this.work);
29624 this.add(action);
29625 return action.schedule(state, delay);
29626 };
29627 VirtualAction.prototype.requestAsyncId = function (scheduler, id, delay) {
29628 if (delay === void 0) {
29629 delay = 0;
29630 }
29631 this.delay = scheduler.frame + delay;
29632 var actions = scheduler.actions;
29633 actions.push(this);
29634 actions.sort(VirtualAction.sortActions);
29635 return true;
29636 };
29637 VirtualAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
29638 if (delay === void 0) {
29639 delay = 0;
29640 }
29641 return undefined;
29642 };
29643 VirtualAction.prototype._execute = function (state, delay) {
29644 if (this.active === true) {
29645 return _super.prototype._execute.call(this, state, delay);
29646 }
29647 };
29648 VirtualAction.sortActions = function (a, b) {
29649 if (a.delay === b.delay) {
29650 if (a.index === b.index) {
29651 return 0;
29652 }
29653 else if (a.index > b.index) {
29654 return 1;
29655 }
29656 else {
29657 return -1;
29658 }
29659 }
29660 else if (a.delay > b.delay) {
29661 return 1;
29662 }
29663 else {
29664 return -1;
29665 }
29666 };
29667 return VirtualAction;
29668}(_AsyncAction__WEBPACK_IMPORTED_MODULE_2__.AsyncAction));
29669
29670//# sourceMappingURL=VirtualTimeScheduler.js.map
29671
29672
29673/***/ }),
29674/* 217 */
29675/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29676
29677"use strict";
29678__webpack_require__.r(__webpack_exports__);
29679/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29680/* harmony export */ "noop": () => /* binding */ noop
29681/* harmony export */ });
29682/** PURE_IMPORTS_START PURE_IMPORTS_END */
29683function noop() { }
29684//# sourceMappingURL=noop.js.map
29685
29686
29687/***/ }),
29688/* 218 */
29689/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29690
29691"use strict";
29692__webpack_require__.r(__webpack_exports__);
29693/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29694/* harmony export */ "isObservable": () => /* binding */ isObservable
29695/* harmony export */ });
29696/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
29697/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
29698
29699function isObservable(obj) {
29700 return !!obj && (obj instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable || (typeof obj.lift === 'function' && typeof obj.subscribe === 'function'));
29701}
29702//# sourceMappingURL=isObservable.js.map
29703
29704
29705/***/ }),
29706/* 219 */
29707/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29708
29709"use strict";
29710__webpack_require__.r(__webpack_exports__);
29711/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29712/* harmony export */ "ArgumentOutOfRangeError": () => /* binding */ ArgumentOutOfRangeError
29713/* harmony export */ });
29714/** PURE_IMPORTS_START PURE_IMPORTS_END */
29715var ArgumentOutOfRangeErrorImpl = /*@__PURE__*/ (function () {
29716 function ArgumentOutOfRangeErrorImpl() {
29717 Error.call(this);
29718 this.message = 'argument out of range';
29719 this.name = 'ArgumentOutOfRangeError';
29720 return this;
29721 }
29722 ArgumentOutOfRangeErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
29723 return ArgumentOutOfRangeErrorImpl;
29724})();
29725var ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl;
29726//# sourceMappingURL=ArgumentOutOfRangeError.js.map
29727
29728
29729/***/ }),
29730/* 220 */
29731/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29732
29733"use strict";
29734__webpack_require__.r(__webpack_exports__);
29735/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29736/* harmony export */ "EmptyError": () => /* binding */ EmptyError
29737/* harmony export */ });
29738/** PURE_IMPORTS_START PURE_IMPORTS_END */
29739var EmptyErrorImpl = /*@__PURE__*/ (function () {
29740 function EmptyErrorImpl() {
29741 Error.call(this);
29742 this.message = 'no elements in sequence';
29743 this.name = 'EmptyError';
29744 return this;
29745 }
29746 EmptyErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
29747 return EmptyErrorImpl;
29748})();
29749var EmptyError = EmptyErrorImpl;
29750//# sourceMappingURL=EmptyError.js.map
29751
29752
29753/***/ }),
29754/* 221 */
29755/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29756
29757"use strict";
29758__webpack_require__.r(__webpack_exports__);
29759/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29760/* harmony export */ "TimeoutError": () => /* binding */ TimeoutError
29761/* harmony export */ });
29762/** PURE_IMPORTS_START PURE_IMPORTS_END */
29763var TimeoutErrorImpl = /*@__PURE__*/ (function () {
29764 function TimeoutErrorImpl() {
29765 Error.call(this);
29766 this.message = 'Timeout has occurred';
29767 this.name = 'TimeoutError';
29768 return this;
29769 }
29770 TimeoutErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
29771 return TimeoutErrorImpl;
29772})();
29773var TimeoutError = TimeoutErrorImpl;
29774//# sourceMappingURL=TimeoutError.js.map
29775
29776
29777/***/ }),
29778/* 222 */
29779/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29780
29781"use strict";
29782__webpack_require__.r(__webpack_exports__);
29783/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29784/* harmony export */ "bindCallback": () => /* binding */ bindCallback
29785/* harmony export */ });
29786/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(166);
29787/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(207);
29788/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(223);
29789/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(179);
29790/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(177);
29791/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(194);
29792/** PURE_IMPORTS_START _Observable,_AsyncSubject,_operators_map,_util_canReportError,_util_isArray,_util_isScheduler PURE_IMPORTS_END */
29793
29794
29795
29796
29797
29798
29799function bindCallback(callbackFunc, resultSelector, scheduler) {
29800 if (resultSelector) {
29801 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__.isScheduler)(resultSelector)) {
29802 scheduler = resultSelector;
29803 }
29804 else {
29805 return function () {
29806 var args = [];
29807 for (var _i = 0; _i < arguments.length; _i++) {
29808 args[_i] = arguments[_i];
29809 }
29810 return bindCallback(callbackFunc, scheduler).apply(void 0, args).pipe((0,_operators_map__WEBPACK_IMPORTED_MODULE_1__.map)(function (args) { return (0,_util_isArray__WEBPACK_IMPORTED_MODULE_2__.isArray)(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
29811 };
29812 }
29813 }
29814 return function () {
29815 var args = [];
29816 for (var _i = 0; _i < arguments.length; _i++) {
29817 args[_i] = arguments[_i];
29818 }
29819 var context = this;
29820 var subject;
29821 var params = {
29822 context: context,
29823 subject: subject,
29824 callbackFunc: callbackFunc,
29825 scheduler: scheduler,
29826 };
29827 return new _Observable__WEBPACK_IMPORTED_MODULE_3__.Observable(function (subscriber) {
29828 if (!scheduler) {
29829 if (!subject) {
29830 subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_4__.AsyncSubject();
29831 var handler = function () {
29832 var innerArgs = [];
29833 for (var _i = 0; _i < arguments.length; _i++) {
29834 innerArgs[_i] = arguments[_i];
29835 }
29836 subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
29837 subject.complete();
29838 };
29839 try {
29840 callbackFunc.apply(context, args.concat([handler]));
29841 }
29842 catch (err) {
29843 if ((0,_util_canReportError__WEBPACK_IMPORTED_MODULE_5__.canReportError)(subject)) {
29844 subject.error(err);
29845 }
29846 else {
29847 console.warn(err);
29848 }
29849 }
29850 }
29851 return subject.subscribe(subscriber);
29852 }
29853 else {
29854 var state = {
29855 args: args, subscriber: subscriber, params: params,
29856 };
29857 return scheduler.schedule(dispatch, 0, state);
29858 }
29859 });
29860 };
29861}
29862function dispatch(state) {
29863 var _this = this;
29864 var self = this;
29865 var args = state.args, subscriber = state.subscriber, params = state.params;
29866 var callbackFunc = params.callbackFunc, context = params.context, scheduler = params.scheduler;
29867 var subject = params.subject;
29868 if (!subject) {
29869 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_4__.AsyncSubject();
29870 var handler = function () {
29871 var innerArgs = [];
29872 for (var _i = 0; _i < arguments.length; _i++) {
29873 innerArgs[_i] = arguments[_i];
29874 }
29875 var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
29876 _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
29877 };
29878 try {
29879 callbackFunc.apply(context, args.concat([handler]));
29880 }
29881 catch (err) {
29882 subject.error(err);
29883 }
29884 }
29885 this.add(subject.subscribe(subscriber));
29886}
29887function dispatchNext(state) {
29888 var value = state.value, subject = state.subject;
29889 subject.next(value);
29890 subject.complete();
29891}
29892function dispatchError(state) {
29893 var err = state.err, subject = state.subject;
29894 subject.error(err);
29895}
29896//# sourceMappingURL=bindCallback.js.map
29897
29898
29899/***/ }),
29900/* 223 */
29901/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29902
29903"use strict";
29904__webpack_require__.r(__webpack_exports__);
29905/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29906/* harmony export */ "map": () => /* binding */ map,
29907/* harmony export */ "MapOperator": () => /* binding */ MapOperator
29908/* harmony export */ });
29909/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
29910/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
29911/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
29912
29913
29914function map(project, thisArg) {
29915 return function mapOperation(source) {
29916 if (typeof project !== 'function') {
29917 throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
29918 }
29919 return source.lift(new MapOperator(project, thisArg));
29920 };
29921}
29922var MapOperator = /*@__PURE__*/ (function () {
29923 function MapOperator(project, thisArg) {
29924 this.project = project;
29925 this.thisArg = thisArg;
29926 }
29927 MapOperator.prototype.call = function (subscriber, source) {
29928 return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));
29929 };
29930 return MapOperator;
29931}());
29932
29933var MapSubscriber = /*@__PURE__*/ (function (_super) {
29934 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(MapSubscriber, _super);
29935 function MapSubscriber(destination, project, thisArg) {
29936 var _this = _super.call(this, destination) || this;
29937 _this.project = project;
29938 _this.count = 0;
29939 _this.thisArg = thisArg || _this;
29940 return _this;
29941 }
29942 MapSubscriber.prototype._next = function (value) {
29943 var result;
29944 try {
29945 result = this.project.call(this.thisArg, value, this.count++);
29946 }
29947 catch (err) {
29948 this.destination.error(err);
29949 return;
29950 }
29951 this.destination.next(result);
29952 };
29953 return MapSubscriber;
29954}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
29955//# sourceMappingURL=map.js.map
29956
29957
29958/***/ }),
29959/* 224 */
29960/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29961
29962"use strict";
29963__webpack_require__.r(__webpack_exports__);
29964/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29965/* harmony export */ "bindNodeCallback": () => /* binding */ bindNodeCallback
29966/* harmony export */ });
29967/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(166);
29968/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(207);
29969/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(223);
29970/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(179);
29971/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(194);
29972/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(177);
29973/** PURE_IMPORTS_START _Observable,_AsyncSubject,_operators_map,_util_canReportError,_util_isScheduler,_util_isArray PURE_IMPORTS_END */
29974
29975
29976
29977
29978
29979
29980function bindNodeCallback(callbackFunc, resultSelector, scheduler) {
29981 if (resultSelector) {
29982 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__.isScheduler)(resultSelector)) {
29983 scheduler = resultSelector;
29984 }
29985 else {
29986 return function () {
29987 var args = [];
29988 for (var _i = 0; _i < arguments.length; _i++) {
29989 args[_i] = arguments[_i];
29990 }
29991 return bindNodeCallback(callbackFunc, scheduler).apply(void 0, args).pipe((0,_operators_map__WEBPACK_IMPORTED_MODULE_1__.map)(function (args) { return (0,_util_isArray__WEBPACK_IMPORTED_MODULE_2__.isArray)(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
29992 };
29993 }
29994 }
29995 return function () {
29996 var args = [];
29997 for (var _i = 0; _i < arguments.length; _i++) {
29998 args[_i] = arguments[_i];
29999 }
30000 var params = {
30001 subject: undefined,
30002 args: args,
30003 callbackFunc: callbackFunc,
30004 scheduler: scheduler,
30005 context: this,
30006 };
30007 return new _Observable__WEBPACK_IMPORTED_MODULE_3__.Observable(function (subscriber) {
30008 var context = params.context;
30009 var subject = params.subject;
30010 if (!scheduler) {
30011 if (!subject) {
30012 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_4__.AsyncSubject();
30013 var handler = function () {
30014 var innerArgs = [];
30015 for (var _i = 0; _i < arguments.length; _i++) {
30016 innerArgs[_i] = arguments[_i];
30017 }
30018 var err = innerArgs.shift();
30019 if (err) {
30020 subject.error(err);
30021 return;
30022 }
30023 subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
30024 subject.complete();
30025 };
30026 try {
30027 callbackFunc.apply(context, args.concat([handler]));
30028 }
30029 catch (err) {
30030 if ((0,_util_canReportError__WEBPACK_IMPORTED_MODULE_5__.canReportError)(subject)) {
30031 subject.error(err);
30032 }
30033 else {
30034 console.warn(err);
30035 }
30036 }
30037 }
30038 return subject.subscribe(subscriber);
30039 }
30040 else {
30041 return scheduler.schedule(dispatch, 0, { params: params, subscriber: subscriber, context: context });
30042 }
30043 });
30044 };
30045}
30046function dispatch(state) {
30047 var _this = this;
30048 var params = state.params, subscriber = state.subscriber, context = state.context;
30049 var callbackFunc = params.callbackFunc, args = params.args, scheduler = params.scheduler;
30050 var subject = params.subject;
30051 if (!subject) {
30052 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_4__.AsyncSubject();
30053 var handler = function () {
30054 var innerArgs = [];
30055 for (var _i = 0; _i < arguments.length; _i++) {
30056 innerArgs[_i] = arguments[_i];
30057 }
30058 var err = innerArgs.shift();
30059 if (err) {
30060 _this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject }));
30061 }
30062 else {
30063 var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
30064 _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
30065 }
30066 };
30067 try {
30068 callbackFunc.apply(context, args.concat([handler]));
30069 }
30070 catch (err) {
30071 this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject }));
30072 }
30073 }
30074 this.add(subject.subscribe(subscriber));
30075}
30076function dispatchNext(arg) {
30077 var value = arg.value, subject = arg.subject;
30078 subject.next(value);
30079 subject.complete();
30080}
30081function dispatchError(arg) {
30082 var err = arg.err, subject = arg.subject;
30083 subject.error(err);
30084}
30085//# sourceMappingURL=bindNodeCallback.js.map
30086
30087
30088/***/ }),
30089/* 225 */
30090/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30091
30092"use strict";
30093__webpack_require__.r(__webpack_exports__);
30094/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30095/* harmony export */ "combineLatest": () => /* binding */ combineLatest,
30096/* harmony export */ "CombineLatestOperator": () => /* binding */ CombineLatestOperator,
30097/* harmony export */ "CombineLatestSubscriber": () => /* binding */ CombineLatestSubscriber
30098/* harmony export */ });
30099/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
30100/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
30101/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(177);
30102/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(235);
30103/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(226);
30104/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(196);
30105/** PURE_IMPORTS_START tslib,_util_isScheduler,_util_isArray,_OuterSubscriber,_util_subscribeToResult,_fromArray PURE_IMPORTS_END */
30106
30107
30108
30109
30110
30111
30112var NONE = {};
30113function combineLatest() {
30114 var observables = [];
30115 for (var _i = 0; _i < arguments.length; _i++) {
30116 observables[_i] = arguments[_i];
30117 }
30118 var resultSelector = null;
30119 var scheduler = null;
30120 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__.isScheduler)(observables[observables.length - 1])) {
30121 scheduler = observables.pop();
30122 }
30123 if (typeof observables[observables.length - 1] === 'function') {
30124 resultSelector = observables.pop();
30125 }
30126 if (observables.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_2__.isArray)(observables[0])) {
30127 observables = observables[0];
30128 }
30129 return (0,_fromArray__WEBPACK_IMPORTED_MODULE_3__.fromArray)(observables, scheduler).lift(new CombineLatestOperator(resultSelector));
30130}
30131var CombineLatestOperator = /*@__PURE__*/ (function () {
30132 function CombineLatestOperator(resultSelector) {
30133 this.resultSelector = resultSelector;
30134 }
30135 CombineLatestOperator.prototype.call = function (subscriber, source) {
30136 return source.subscribe(new CombineLatestSubscriber(subscriber, this.resultSelector));
30137 };
30138 return CombineLatestOperator;
30139}());
30140
30141var CombineLatestSubscriber = /*@__PURE__*/ (function (_super) {
30142 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(CombineLatestSubscriber, _super);
30143 function CombineLatestSubscriber(destination, resultSelector) {
30144 var _this = _super.call(this, destination) || this;
30145 _this.resultSelector = resultSelector;
30146 _this.active = 0;
30147 _this.values = [];
30148 _this.observables = [];
30149 return _this;
30150 }
30151 CombineLatestSubscriber.prototype._next = function (observable) {
30152 this.values.push(NONE);
30153 this.observables.push(observable);
30154 };
30155 CombineLatestSubscriber.prototype._complete = function () {
30156 var observables = this.observables;
30157 var len = observables.length;
30158 if (len === 0) {
30159 this.destination.complete();
30160 }
30161 else {
30162 this.active = len;
30163 this.toRespond = len;
30164 for (var i = 0; i < len; i++) {
30165 var observable = observables[i];
30166 this.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__.subscribeToResult)(this, observable, observable, i));
30167 }
30168 }
30169 };
30170 CombineLatestSubscriber.prototype.notifyComplete = function (unused) {
30171 if ((this.active -= 1) === 0) {
30172 this.destination.complete();
30173 }
30174 };
30175 CombineLatestSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30176 var values = this.values;
30177 var oldVal = values[outerIndex];
30178 var toRespond = !this.toRespond
30179 ? 0
30180 : oldVal === NONE ? --this.toRespond : this.toRespond;
30181 values[outerIndex] = innerValue;
30182 if (toRespond === 0) {
30183 if (this.resultSelector) {
30184 this._tryResultSelector(values);
30185 }
30186 else {
30187 this.destination.next(values.slice());
30188 }
30189 }
30190 };
30191 CombineLatestSubscriber.prototype._tryResultSelector = function (values) {
30192 var result;
30193 try {
30194 result = this.resultSelector.apply(this, values);
30195 }
30196 catch (err) {
30197 this.destination.error(err);
30198 return;
30199 }
30200 this.destination.next(result);
30201 };
30202 return CombineLatestSubscriber;
30203}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_5__.OuterSubscriber));
30204
30205//# sourceMappingURL=combineLatest.js.map
30206
30207
30208/***/ }),
30209/* 226 */
30210/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30211
30212"use strict";
30213__webpack_require__.r(__webpack_exports__);
30214/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30215/* harmony export */ "subscribeToResult": () => /* binding */ subscribeToResult
30216/* harmony export */ });
30217/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(227);
30218/* harmony import */ var _subscribeTo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
30219/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(166);
30220/** PURE_IMPORTS_START _InnerSubscriber,_subscribeTo,_Observable PURE_IMPORTS_END */
30221
30222
30223
30224function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, innerSubscriber) {
30225 if (innerSubscriber === void 0) {
30226 innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__.InnerSubscriber(outerSubscriber, outerValue, outerIndex);
30227 }
30228 if (innerSubscriber.closed) {
30229 return undefined;
30230 }
30231 if (result instanceof _Observable__WEBPACK_IMPORTED_MODULE_1__.Observable) {
30232 return result.subscribe(innerSubscriber);
30233 }
30234 return (0,_subscribeTo__WEBPACK_IMPORTED_MODULE_2__.subscribeTo)(result)(innerSubscriber);
30235}
30236//# sourceMappingURL=subscribeToResult.js.map
30237
30238
30239/***/ }),
30240/* 227 */
30241/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30242
30243"use strict";
30244__webpack_require__.r(__webpack_exports__);
30245/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30246/* harmony export */ "InnerSubscriber": () => /* binding */ InnerSubscriber
30247/* harmony export */ });
30248/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
30249/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
30250/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
30251
30252
30253var InnerSubscriber = /*@__PURE__*/ (function (_super) {
30254 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(InnerSubscriber, _super);
30255 function InnerSubscriber(parent, outerValue, outerIndex) {
30256 var _this = _super.call(this) || this;
30257 _this.parent = parent;
30258 _this.outerValue = outerValue;
30259 _this.outerIndex = outerIndex;
30260 _this.index = 0;
30261 return _this;
30262 }
30263 InnerSubscriber.prototype._next = function (value) {
30264 this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);
30265 };
30266 InnerSubscriber.prototype._error = function (error) {
30267 this.parent.notifyError(error, this);
30268 this.unsubscribe();
30269 };
30270 InnerSubscriber.prototype._complete = function () {
30271 this.parent.notifyComplete(this);
30272 this.unsubscribe();
30273 };
30274 return InnerSubscriber;
30275}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
30276
30277//# sourceMappingURL=InnerSubscriber.js.map
30278
30279
30280/***/ }),
30281/* 228 */
30282/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30283
30284"use strict";
30285__webpack_require__.r(__webpack_exports__);
30286/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30287/* harmony export */ "subscribeTo": () => /* binding */ subscribeTo
30288/* harmony export */ });
30289/* harmony import */ var _subscribeToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(197);
30290/* harmony import */ var _subscribeToPromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(232);
30291/* harmony import */ var _subscribeToIterable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(234);
30292/* harmony import */ var _subscribeToObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(229);
30293/* harmony import */ var _isArrayLike__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(230);
30294/* harmony import */ var _isPromise__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(231);
30295/* harmony import */ var _isObject__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(178);
30296/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(233);
30297/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(180);
30298/** PURE_IMPORTS_START _subscribeToArray,_subscribeToPromise,_subscribeToIterable,_subscribeToObservable,_isArrayLike,_isPromise,_isObject,_symbol_iterator,_symbol_observable PURE_IMPORTS_END */
30299
30300
30301
30302
30303
30304
30305
30306
30307
30308var subscribeTo = function (result) {
30309 if (!!result && typeof result[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__.observable] === 'function') {
30310 return (0,_subscribeToObservable__WEBPACK_IMPORTED_MODULE_1__.subscribeToObservable)(result);
30311 }
30312 else if ((0,_isArrayLike__WEBPACK_IMPORTED_MODULE_2__.isArrayLike)(result)) {
30313 return (0,_subscribeToArray__WEBPACK_IMPORTED_MODULE_3__.subscribeToArray)(result);
30314 }
30315 else if ((0,_isPromise__WEBPACK_IMPORTED_MODULE_4__.isPromise)(result)) {
30316 return (0,_subscribeToPromise__WEBPACK_IMPORTED_MODULE_5__.subscribeToPromise)(result);
30317 }
30318 else if (!!result && typeof result[_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__.iterator] === 'function') {
30319 return (0,_subscribeToIterable__WEBPACK_IMPORTED_MODULE_7__.subscribeToIterable)(result);
30320 }
30321 else {
30322 var value = (0,_isObject__WEBPACK_IMPORTED_MODULE_8__.isObject)(result) ? 'an invalid object' : "'" + result + "'";
30323 var msg = "You provided " + value + " where a stream was expected."
30324 + ' You can provide an Observable, Promise, Array, or Iterable.';
30325 throw new TypeError(msg);
30326 }
30327};
30328//# sourceMappingURL=subscribeTo.js.map
30329
30330
30331/***/ }),
30332/* 229 */
30333/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30334
30335"use strict";
30336__webpack_require__.r(__webpack_exports__);
30337/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30338/* harmony export */ "subscribeToObservable": () => /* binding */ subscribeToObservable
30339/* harmony export */ });
30340/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(180);
30341/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */
30342
30343var subscribeToObservable = function (obj) {
30344 return function (subscriber) {
30345 var obs = obj[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__.observable]();
30346 if (typeof obs.subscribe !== 'function') {
30347 throw new TypeError('Provided object does not correctly implement Symbol.observable');
30348 }
30349 else {
30350 return obs.subscribe(subscriber);
30351 }
30352 };
30353};
30354//# sourceMappingURL=subscribeToObservable.js.map
30355
30356
30357/***/ }),
30358/* 230 */
30359/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30360
30361"use strict";
30362__webpack_require__.r(__webpack_exports__);
30363/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30364/* harmony export */ "isArrayLike": () => /* binding */ isArrayLike
30365/* harmony export */ });
30366/** PURE_IMPORTS_START PURE_IMPORTS_END */
30367var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });
30368//# sourceMappingURL=isArrayLike.js.map
30369
30370
30371/***/ }),
30372/* 231 */
30373/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30374
30375"use strict";
30376__webpack_require__.r(__webpack_exports__);
30377/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30378/* harmony export */ "isPromise": () => /* binding */ isPromise
30379/* harmony export */ });
30380/** PURE_IMPORTS_START PURE_IMPORTS_END */
30381function isPromise(value) {
30382 return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
30383}
30384//# sourceMappingURL=isPromise.js.map
30385
30386
30387/***/ }),
30388/* 232 */
30389/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30390
30391"use strict";
30392__webpack_require__.r(__webpack_exports__);
30393/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30394/* harmony export */ "subscribeToPromise": () => /* binding */ subscribeToPromise
30395/* harmony export */ });
30396/* harmony import */ var _hostReportError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(172);
30397/** PURE_IMPORTS_START _hostReportError PURE_IMPORTS_END */
30398
30399var subscribeToPromise = function (promise) {
30400 return function (subscriber) {
30401 promise.then(function (value) {
30402 if (!subscriber.closed) {
30403 subscriber.next(value);
30404 subscriber.complete();
30405 }
30406 }, function (err) { return subscriber.error(err); })
30407 .then(null, _hostReportError__WEBPACK_IMPORTED_MODULE_0__.hostReportError);
30408 return subscriber;
30409 };
30410};
30411//# sourceMappingURL=subscribeToPromise.js.map
30412
30413
30414/***/ }),
30415/* 233 */
30416/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30417
30418"use strict";
30419__webpack_require__.r(__webpack_exports__);
30420/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30421/* harmony export */ "getSymbolIterator": () => /* binding */ getSymbolIterator,
30422/* harmony export */ "iterator": () => /* binding */ iterator,
30423/* harmony export */ "$$iterator": () => /* binding */ $$iterator
30424/* harmony export */ });
30425/** PURE_IMPORTS_START PURE_IMPORTS_END */
30426function getSymbolIterator() {
30427 if (typeof Symbol !== 'function' || !Symbol.iterator) {
30428 return '@@iterator';
30429 }
30430 return Symbol.iterator;
30431}
30432var iterator = /*@__PURE__*/ getSymbolIterator();
30433var $$iterator = iterator;
30434//# sourceMappingURL=iterator.js.map
30435
30436
30437/***/ }),
30438/* 234 */
30439/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30440
30441"use strict";
30442__webpack_require__.r(__webpack_exports__);
30443/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30444/* harmony export */ "subscribeToIterable": () => /* binding */ subscribeToIterable
30445/* harmony export */ });
30446/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(233);
30447/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */
30448
30449var subscribeToIterable = function (iterable) {
30450 return function (subscriber) {
30451 var iterator = iterable[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__.iterator]();
30452 do {
30453 var item = iterator.next();
30454 if (item.done) {
30455 subscriber.complete();
30456 break;
30457 }
30458 subscriber.next(item.value);
30459 if (subscriber.closed) {
30460 break;
30461 }
30462 } while (true);
30463 if (typeof iterator.return === 'function') {
30464 subscriber.add(function () {
30465 if (iterator.return) {
30466 iterator.return();
30467 }
30468 });
30469 }
30470 return subscriber;
30471 };
30472};
30473//# sourceMappingURL=subscribeToIterable.js.map
30474
30475
30476/***/ }),
30477/* 235 */
30478/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30479
30480"use strict";
30481__webpack_require__.r(__webpack_exports__);
30482/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30483/* harmony export */ "OuterSubscriber": () => /* binding */ OuterSubscriber
30484/* harmony export */ });
30485/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
30486/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
30487/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
30488
30489
30490var OuterSubscriber = /*@__PURE__*/ (function (_super) {
30491 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(OuterSubscriber, _super);
30492 function OuterSubscriber() {
30493 return _super !== null && _super.apply(this, arguments) || this;
30494 }
30495 OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30496 this.destination.next(innerValue);
30497 };
30498 OuterSubscriber.prototype.notifyError = function (error, innerSub) {
30499 this.destination.error(error);
30500 };
30501 OuterSubscriber.prototype.notifyComplete = function (innerSub) {
30502 this.destination.complete();
30503 };
30504 return OuterSubscriber;
30505}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
30506
30507//# sourceMappingURL=OuterSubscriber.js.map
30508
30509
30510/***/ }),
30511/* 236 */
30512/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30513
30514"use strict";
30515__webpack_require__.r(__webpack_exports__);
30516/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30517/* harmony export */ "concat": () => /* binding */ concat
30518/* harmony export */ });
30519/* harmony import */ var _of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(193);
30520/* harmony import */ var _operators_concatAll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(237);
30521/** PURE_IMPORTS_START _of,_operators_concatAll PURE_IMPORTS_END */
30522
30523
30524function concat() {
30525 var observables = [];
30526 for (var _i = 0; _i < arguments.length; _i++) {
30527 observables[_i] = arguments[_i];
30528 }
30529 return (0,_operators_concatAll__WEBPACK_IMPORTED_MODULE_0__.concatAll)()(_of__WEBPACK_IMPORTED_MODULE_1__.of.apply(void 0, observables));
30530}
30531//# sourceMappingURL=concat.js.map
30532
30533
30534/***/ }),
30535/* 237 */
30536/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30537
30538"use strict";
30539__webpack_require__.r(__webpack_exports__);
30540/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30541/* harmony export */ "concatAll": () => /* binding */ concatAll
30542/* harmony export */ });
30543/* harmony import */ var _mergeAll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(238);
30544/** PURE_IMPORTS_START _mergeAll PURE_IMPORTS_END */
30545
30546function concatAll() {
30547 return (0,_mergeAll__WEBPACK_IMPORTED_MODULE_0__.mergeAll)(1);
30548}
30549//# sourceMappingURL=concatAll.js.map
30550
30551
30552/***/ }),
30553/* 238 */
30554/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30555
30556"use strict";
30557__webpack_require__.r(__webpack_exports__);
30558/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30559/* harmony export */ "mergeAll": () => /* binding */ mergeAll
30560/* harmony export */ });
30561/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(239);
30562/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(182);
30563/** PURE_IMPORTS_START _mergeMap,_util_identity PURE_IMPORTS_END */
30564
30565
30566function mergeAll(concurrent) {
30567 if (concurrent === void 0) {
30568 concurrent = Number.POSITIVE_INFINITY;
30569 }
30570 return (0,_mergeMap__WEBPACK_IMPORTED_MODULE_0__.mergeMap)(_util_identity__WEBPACK_IMPORTED_MODULE_1__.identity, concurrent);
30571}
30572//# sourceMappingURL=mergeAll.js.map
30573
30574
30575/***/ }),
30576/* 239 */
30577/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30578
30579"use strict";
30580__webpack_require__.r(__webpack_exports__);
30581/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30582/* harmony export */ "mergeMap": () => /* binding */ mergeMap,
30583/* harmony export */ "MergeMapOperator": () => /* binding */ MergeMapOperator,
30584/* harmony export */ "MergeMapSubscriber": () => /* binding */ MergeMapSubscriber
30585/* harmony export */ });
30586/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
30587/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(226);
30588/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(235);
30589/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
30590/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(223);
30591/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(240);
30592/** PURE_IMPORTS_START tslib,_util_subscribeToResult,_OuterSubscriber,_InnerSubscriber,_map,_observable_from PURE_IMPORTS_END */
30593
30594
30595
30596
30597
30598
30599function mergeMap(project, resultSelector, concurrent) {
30600 if (concurrent === void 0) {
30601 concurrent = Number.POSITIVE_INFINITY;
30602 }
30603 if (typeof resultSelector === 'function') {
30604 return function (source) { return source.pipe(mergeMap(function (a, i) { return (0,_observable_from__WEBPACK_IMPORTED_MODULE_1__.from)(project(a, i)).pipe((0,_map__WEBPACK_IMPORTED_MODULE_2__.map)(function (b, ii) { return resultSelector(a, b, i, ii); })); }, concurrent)); };
30605 }
30606 else if (typeof resultSelector === 'number') {
30607 concurrent = resultSelector;
30608 }
30609 return function (source) { return source.lift(new MergeMapOperator(project, concurrent)); };
30610}
30611var MergeMapOperator = /*@__PURE__*/ (function () {
30612 function MergeMapOperator(project, concurrent) {
30613 if (concurrent === void 0) {
30614 concurrent = Number.POSITIVE_INFINITY;
30615 }
30616 this.project = project;
30617 this.concurrent = concurrent;
30618 }
30619 MergeMapOperator.prototype.call = function (observer, source) {
30620 return source.subscribe(new MergeMapSubscriber(observer, this.project, this.concurrent));
30621 };
30622 return MergeMapOperator;
30623}());
30624
30625var MergeMapSubscriber = /*@__PURE__*/ (function (_super) {
30626 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(MergeMapSubscriber, _super);
30627 function MergeMapSubscriber(destination, project, concurrent) {
30628 if (concurrent === void 0) {
30629 concurrent = Number.POSITIVE_INFINITY;
30630 }
30631 var _this = _super.call(this, destination) || this;
30632 _this.project = project;
30633 _this.concurrent = concurrent;
30634 _this.hasCompleted = false;
30635 _this.buffer = [];
30636 _this.active = 0;
30637 _this.index = 0;
30638 return _this;
30639 }
30640 MergeMapSubscriber.prototype._next = function (value) {
30641 if (this.active < this.concurrent) {
30642 this._tryNext(value);
30643 }
30644 else {
30645 this.buffer.push(value);
30646 }
30647 };
30648 MergeMapSubscriber.prototype._tryNext = function (value) {
30649 var result;
30650 var index = this.index++;
30651 try {
30652 result = this.project(value, index);
30653 }
30654 catch (err) {
30655 this.destination.error(err);
30656 return;
30657 }
30658 this.active++;
30659 this._innerSub(result, value, index);
30660 };
30661 MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {
30662 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__.InnerSubscriber(this, value, index);
30663 var destination = this.destination;
30664 destination.add(innerSubscriber);
30665 var innerSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__.subscribeToResult)(this, ish, undefined, undefined, innerSubscriber);
30666 if (innerSubscription !== innerSubscriber) {
30667 destination.add(innerSubscription);
30668 }
30669 };
30670 MergeMapSubscriber.prototype._complete = function () {
30671 this.hasCompleted = true;
30672 if (this.active === 0 && this.buffer.length === 0) {
30673 this.destination.complete();
30674 }
30675 this.unsubscribe();
30676 };
30677 MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30678 this.destination.next(innerValue);
30679 };
30680 MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {
30681 var buffer = this.buffer;
30682 this.remove(innerSub);
30683 this.active--;
30684 if (buffer.length > 0) {
30685 this._next(buffer.shift());
30686 }
30687 else if (this.active === 0 && this.hasCompleted) {
30688 this.destination.complete();
30689 }
30690 };
30691 return MergeMapSubscriber;
30692}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_5__.OuterSubscriber));
30693
30694//# sourceMappingURL=mergeMap.js.map
30695
30696
30697/***/ }),
30698/* 240 */
30699/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30700
30701"use strict";
30702__webpack_require__.r(__webpack_exports__);
30703/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30704/* harmony export */ "from": () => /* binding */ from
30705/* harmony export */ });
30706/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
30707/* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(228);
30708/* harmony import */ var _scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(241);
30709/** PURE_IMPORTS_START _Observable,_util_subscribeTo,_scheduled_scheduled PURE_IMPORTS_END */
30710
30711
30712
30713function from(input, scheduler) {
30714 if (!scheduler) {
30715 if (input instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable) {
30716 return input;
30717 }
30718 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable((0,_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__.subscribeTo)(input));
30719 }
30720 else {
30721 return (0,_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__.scheduled)(input, scheduler);
30722 }
30723}
30724//# sourceMappingURL=from.js.map
30725
30726
30727/***/ }),
30728/* 241 */
30729/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30730
30731"use strict";
30732__webpack_require__.r(__webpack_exports__);
30733/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30734/* harmony export */ "scheduled": () => /* binding */ scheduled
30735/* harmony export */ });
30736/* harmony import */ var _scheduleObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(243);
30737/* harmony import */ var _schedulePromise__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(244);
30738/* harmony import */ var _scheduleArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(195);
30739/* harmony import */ var _scheduleIterable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(246);
30740/* harmony import */ var _util_isInteropObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(242);
30741/* harmony import */ var _util_isPromise__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(231);
30742/* harmony import */ var _util_isArrayLike__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(230);
30743/* harmony import */ var _util_isIterable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(245);
30744/** PURE_IMPORTS_START _scheduleObservable,_schedulePromise,_scheduleArray,_scheduleIterable,_util_isInteropObservable,_util_isPromise,_util_isArrayLike,_util_isIterable PURE_IMPORTS_END */
30745
30746
30747
30748
30749
30750
30751
30752
30753function scheduled(input, scheduler) {
30754 if (input != null) {
30755 if ((0,_util_isInteropObservable__WEBPACK_IMPORTED_MODULE_0__.isInteropObservable)(input)) {
30756 return (0,_scheduleObservable__WEBPACK_IMPORTED_MODULE_1__.scheduleObservable)(input, scheduler);
30757 }
30758 else if ((0,_util_isPromise__WEBPACK_IMPORTED_MODULE_2__.isPromise)(input)) {
30759 return (0,_schedulePromise__WEBPACK_IMPORTED_MODULE_3__.schedulePromise)(input, scheduler);
30760 }
30761 else if ((0,_util_isArrayLike__WEBPACK_IMPORTED_MODULE_4__.isArrayLike)(input)) {
30762 return (0,_scheduleArray__WEBPACK_IMPORTED_MODULE_5__.scheduleArray)(input, scheduler);
30763 }
30764 else if ((0,_util_isIterable__WEBPACK_IMPORTED_MODULE_6__.isIterable)(input) || typeof input === 'string') {
30765 return (0,_scheduleIterable__WEBPACK_IMPORTED_MODULE_7__.scheduleIterable)(input, scheduler);
30766 }
30767 }
30768 throw new TypeError((input !== null && typeof input || input) + ' is not observable');
30769}
30770//# sourceMappingURL=scheduled.js.map
30771
30772
30773/***/ }),
30774/* 242 */
30775/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30776
30777"use strict";
30778__webpack_require__.r(__webpack_exports__);
30779/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30780/* harmony export */ "isInteropObservable": () => /* binding */ isInteropObservable
30781/* harmony export */ });
30782/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(180);
30783/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */
30784
30785function isInteropObservable(input) {
30786 return input && typeof input[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__.observable] === 'function';
30787}
30788//# sourceMappingURL=isInteropObservable.js.map
30789
30790
30791/***/ }),
30792/* 243 */
30793/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30794
30795"use strict";
30796__webpack_require__.r(__webpack_exports__);
30797/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30798/* harmony export */ "scheduleObservable": () => /* binding */ scheduleObservable
30799/* harmony export */ });
30800/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
30801/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
30802/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(180);
30803/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_observable PURE_IMPORTS_END */
30804
30805
30806
30807function scheduleObservable(input, scheduler) {
30808 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
30809 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
30810 sub.add(scheduler.schedule(function () {
30811 var observable = input[_symbol_observable__WEBPACK_IMPORTED_MODULE_2__.observable]();
30812 sub.add(observable.subscribe({
30813 next: function (value) { sub.add(scheduler.schedule(function () { return subscriber.next(value); })); },
30814 error: function (err) { sub.add(scheduler.schedule(function () { return subscriber.error(err); })); },
30815 complete: function () { sub.add(scheduler.schedule(function () { return subscriber.complete(); })); },
30816 }));
30817 }));
30818 return sub;
30819 });
30820}
30821//# sourceMappingURL=scheduleObservable.js.map
30822
30823
30824/***/ }),
30825/* 244 */
30826/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30827
30828"use strict";
30829__webpack_require__.r(__webpack_exports__);
30830/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30831/* harmony export */ "schedulePromise": () => /* binding */ schedulePromise
30832/* harmony export */ });
30833/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
30834/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
30835/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
30836
30837
30838function schedulePromise(input, scheduler) {
30839 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
30840 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
30841 sub.add(scheduler.schedule(function () {
30842 return input.then(function (value) {
30843 sub.add(scheduler.schedule(function () {
30844 subscriber.next(value);
30845 sub.add(scheduler.schedule(function () { return subscriber.complete(); }));
30846 }));
30847 }, function (err) {
30848 sub.add(scheduler.schedule(function () { return subscriber.error(err); }));
30849 });
30850 }));
30851 return sub;
30852 });
30853}
30854//# sourceMappingURL=schedulePromise.js.map
30855
30856
30857/***/ }),
30858/* 245 */
30859/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30860
30861"use strict";
30862__webpack_require__.r(__webpack_exports__);
30863/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30864/* harmony export */ "isIterable": () => /* binding */ isIterable
30865/* harmony export */ });
30866/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(233);
30867/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */
30868
30869function isIterable(input) {
30870 return input && typeof input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__.iterator] === 'function';
30871}
30872//# sourceMappingURL=isIterable.js.map
30873
30874
30875/***/ }),
30876/* 246 */
30877/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30878
30879"use strict";
30880__webpack_require__.r(__webpack_exports__);
30881/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30882/* harmony export */ "scheduleIterable": () => /* binding */ scheduleIterable
30883/* harmony export */ });
30884/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
30885/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
30886/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(233);
30887/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_iterator PURE_IMPORTS_END */
30888
30889
30890
30891function scheduleIterable(input, scheduler) {
30892 if (!input) {
30893 throw new Error('Iterable cannot be null');
30894 }
30895 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
30896 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
30897 var iterator;
30898 sub.add(function () {
30899 if (iterator && typeof iterator.return === 'function') {
30900 iterator.return();
30901 }
30902 });
30903 sub.add(scheduler.schedule(function () {
30904 iterator = input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_2__.iterator]();
30905 sub.add(scheduler.schedule(function () {
30906 if (subscriber.closed) {
30907 return;
30908 }
30909 var value;
30910 var done;
30911 try {
30912 var result = iterator.next();
30913 value = result.value;
30914 done = result.done;
30915 }
30916 catch (err) {
30917 subscriber.error(err);
30918 return;
30919 }
30920 if (done) {
30921 subscriber.complete();
30922 }
30923 else {
30924 subscriber.next(value);
30925 this.schedule();
30926 }
30927 }));
30928 }));
30929 return sub;
30930 });
30931}
30932//# sourceMappingURL=scheduleIterable.js.map
30933
30934
30935/***/ }),
30936/* 247 */
30937/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30938
30939"use strict";
30940__webpack_require__.r(__webpack_exports__);
30941/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30942/* harmony export */ "defer": () => /* binding */ defer
30943/* harmony export */ });
30944/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
30945/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(240);
30946/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(199);
30947/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */
30948
30949
30950
30951function defer(observableFactory) {
30952 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
30953 var input;
30954 try {
30955 input = observableFactory();
30956 }
30957 catch (err) {
30958 subscriber.error(err);
30959 return undefined;
30960 }
30961 var source = input ? (0,_from__WEBPACK_IMPORTED_MODULE_1__.from)(input) : (0,_empty__WEBPACK_IMPORTED_MODULE_2__.empty)();
30962 return source.subscribe(subscriber);
30963 });
30964}
30965//# sourceMappingURL=defer.js.map
30966
30967
30968/***/ }),
30969/* 248 */
30970/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30971
30972"use strict";
30973__webpack_require__.r(__webpack_exports__);
30974/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30975/* harmony export */ "forkJoin": () => /* binding */ forkJoin
30976/* harmony export */ });
30977/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(166);
30978/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(177);
30979/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(223);
30980/* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(178);
30981/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(240);
30982/** PURE_IMPORTS_START _Observable,_util_isArray,_operators_map,_util_isObject,_from PURE_IMPORTS_END */
30983
30984
30985
30986
30987
30988function forkJoin() {
30989 var sources = [];
30990 for (var _i = 0; _i < arguments.length; _i++) {
30991 sources[_i] = arguments[_i];
30992 }
30993 if (sources.length === 1) {
30994 var first_1 = sources[0];
30995 if ((0,_util_isArray__WEBPACK_IMPORTED_MODULE_0__.isArray)(first_1)) {
30996 return forkJoinInternal(first_1, null);
30997 }
30998 if ((0,_util_isObject__WEBPACK_IMPORTED_MODULE_1__.isObject)(first_1) && Object.getPrototypeOf(first_1) === Object.prototype) {
30999 var keys = Object.keys(first_1);
31000 return forkJoinInternal(keys.map(function (key) { return first_1[key]; }), keys);
31001 }
31002 }
31003 if (typeof sources[sources.length - 1] === 'function') {
31004 var resultSelector_1 = sources.pop();
31005 sources = (sources.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_0__.isArray)(sources[0])) ? sources[0] : sources;
31006 return forkJoinInternal(sources, null).pipe((0,_operators_map__WEBPACK_IMPORTED_MODULE_2__.map)(function (args) { return resultSelector_1.apply(void 0, args); }));
31007 }
31008 return forkJoinInternal(sources, null);
31009}
31010function forkJoinInternal(sources, keys) {
31011 return new _Observable__WEBPACK_IMPORTED_MODULE_3__.Observable(function (subscriber) {
31012 var len = sources.length;
31013 if (len === 0) {
31014 subscriber.complete();
31015 return;
31016 }
31017 var values = new Array(len);
31018 var completed = 0;
31019 var emitted = 0;
31020 var _loop_1 = function (i) {
31021 var source = (0,_from__WEBPACK_IMPORTED_MODULE_4__.from)(sources[i]);
31022 var hasValue = false;
31023 subscriber.add(source.subscribe({
31024 next: function (value) {
31025 if (!hasValue) {
31026 hasValue = true;
31027 emitted++;
31028 }
31029 values[i] = value;
31030 },
31031 error: function (err) { return subscriber.error(err); },
31032 complete: function () {
31033 completed++;
31034 if (completed === len || !hasValue) {
31035 if (emitted === len) {
31036 subscriber.next(keys ?
31037 keys.reduce(function (result, key, i) { return (result[key] = values[i], result); }, {}) :
31038 values);
31039 }
31040 subscriber.complete();
31041 }
31042 }
31043 }));
31044 };
31045 for (var i = 0; i < len; i++) {
31046 _loop_1(i);
31047 }
31048 });
31049}
31050//# sourceMappingURL=forkJoin.js.map
31051
31052
31053/***/ }),
31054/* 249 */
31055/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31056
31057"use strict";
31058__webpack_require__.r(__webpack_exports__);
31059/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31060/* harmony export */ "fromEvent": () => /* binding */ fromEvent
31061/* harmony export */ });
31062/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(166);
31063/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(177);
31064/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(175);
31065/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(223);
31066/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */
31067
31068
31069
31070
31071var toString = /*@__PURE__*/ (function () { return Object.prototype.toString; })();
31072function fromEvent(target, eventName, options, resultSelector) {
31073 if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(options)) {
31074 resultSelector = options;
31075 options = undefined;
31076 }
31077 if (resultSelector) {
31078 return fromEvent(target, eventName, options).pipe((0,_operators_map__WEBPACK_IMPORTED_MODULE_1__.map)(function (args) { return (0,_util_isArray__WEBPACK_IMPORTED_MODULE_2__.isArray)(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
31079 }
31080 return new _Observable__WEBPACK_IMPORTED_MODULE_3__.Observable(function (subscriber) {
31081 function handler(e) {
31082 if (arguments.length > 1) {
31083 subscriber.next(Array.prototype.slice.call(arguments));
31084 }
31085 else {
31086 subscriber.next(e);
31087 }
31088 }
31089 setupSubscription(target, eventName, handler, subscriber, options);
31090 });
31091}
31092function setupSubscription(sourceObj, eventName, handler, subscriber, options) {
31093 var unsubscribe;
31094 if (isEventTarget(sourceObj)) {
31095 var source_1 = sourceObj;
31096 sourceObj.addEventListener(eventName, handler, options);
31097 unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); };
31098 }
31099 else if (isJQueryStyleEventEmitter(sourceObj)) {
31100 var source_2 = sourceObj;
31101 sourceObj.on(eventName, handler);
31102 unsubscribe = function () { return source_2.off(eventName, handler); };
31103 }
31104 else if (isNodeStyleEventEmitter(sourceObj)) {
31105 var source_3 = sourceObj;
31106 sourceObj.addListener(eventName, handler);
31107 unsubscribe = function () { return source_3.removeListener(eventName, handler); };
31108 }
31109 else if (sourceObj && sourceObj.length) {
31110 for (var i = 0, len = sourceObj.length; i < len; i++) {
31111 setupSubscription(sourceObj[i], eventName, handler, subscriber, options);
31112 }
31113 }
31114 else {
31115 throw new TypeError('Invalid event target');
31116 }
31117 subscriber.add(unsubscribe);
31118}
31119function isNodeStyleEventEmitter(sourceObj) {
31120 return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';
31121}
31122function isJQueryStyleEventEmitter(sourceObj) {
31123 return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';
31124}
31125function isEventTarget(sourceObj) {
31126 return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';
31127}
31128//# sourceMappingURL=fromEvent.js.map
31129
31130
31131/***/ }),
31132/* 250 */
31133/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31134
31135"use strict";
31136__webpack_require__.r(__webpack_exports__);
31137/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31138/* harmony export */ "fromEventPattern": () => /* binding */ fromEventPattern
31139/* harmony export */ });
31140/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(166);
31141/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(177);
31142/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(175);
31143/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(223);
31144/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */
31145
31146
31147
31148
31149function fromEventPattern(addHandler, removeHandler, resultSelector) {
31150 if (resultSelector) {
31151 return fromEventPattern(addHandler, removeHandler).pipe((0,_operators_map__WEBPACK_IMPORTED_MODULE_0__.map)(function (args) { return (0,_util_isArray__WEBPACK_IMPORTED_MODULE_1__.isArray)(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
31152 }
31153 return new _Observable__WEBPACK_IMPORTED_MODULE_2__.Observable(function (subscriber) {
31154 var handler = function () {
31155 var e = [];
31156 for (var _i = 0; _i < arguments.length; _i++) {
31157 e[_i] = arguments[_i];
31158 }
31159 return subscriber.next(e.length === 1 ? e[0] : e);
31160 };
31161 var retValue;
31162 try {
31163 retValue = addHandler(handler);
31164 }
31165 catch (err) {
31166 subscriber.error(err);
31167 return undefined;
31168 }
31169 if (!(0,_util_isFunction__WEBPACK_IMPORTED_MODULE_3__.isFunction)(removeHandler)) {
31170 return undefined;
31171 }
31172 return function () { return removeHandler(handler, retValue); };
31173 });
31174}
31175//# sourceMappingURL=fromEventPattern.js.map
31176
31177
31178/***/ }),
31179/* 251 */
31180/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31181
31182"use strict";
31183__webpack_require__.r(__webpack_exports__);
31184/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31185/* harmony export */ "generate": () => /* binding */ generate
31186/* harmony export */ });
31187/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(166);
31188/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(182);
31189/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
31190/** PURE_IMPORTS_START _Observable,_util_identity,_util_isScheduler PURE_IMPORTS_END */
31191
31192
31193
31194function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
31195 var resultSelector;
31196 var initialState;
31197 if (arguments.length == 1) {
31198 var options = initialStateOrOptions;
31199 initialState = options.initialState;
31200 condition = options.condition;
31201 iterate = options.iterate;
31202 resultSelector = options.resultSelector || _util_identity__WEBPACK_IMPORTED_MODULE_0__.identity;
31203 scheduler = options.scheduler;
31204 }
31205 else if (resultSelectorOrObservable === undefined || (0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__.isScheduler)(resultSelectorOrObservable)) {
31206 initialState = initialStateOrOptions;
31207 resultSelector = _util_identity__WEBPACK_IMPORTED_MODULE_0__.identity;
31208 scheduler = resultSelectorOrObservable;
31209 }
31210 else {
31211 initialState = initialStateOrOptions;
31212 resultSelector = resultSelectorOrObservable;
31213 }
31214 return new _Observable__WEBPACK_IMPORTED_MODULE_2__.Observable(function (subscriber) {
31215 var state = initialState;
31216 if (scheduler) {
31217 return scheduler.schedule(dispatch, 0, {
31218 subscriber: subscriber,
31219 iterate: iterate,
31220 condition: condition,
31221 resultSelector: resultSelector,
31222 state: state
31223 });
31224 }
31225 do {
31226 if (condition) {
31227 var conditionResult = void 0;
31228 try {
31229 conditionResult = condition(state);
31230 }
31231 catch (err) {
31232 subscriber.error(err);
31233 return undefined;
31234 }
31235 if (!conditionResult) {
31236 subscriber.complete();
31237 break;
31238 }
31239 }
31240 var value = void 0;
31241 try {
31242 value = resultSelector(state);
31243 }
31244 catch (err) {
31245 subscriber.error(err);
31246 return undefined;
31247 }
31248 subscriber.next(value);
31249 if (subscriber.closed) {
31250 break;
31251 }
31252 try {
31253 state = iterate(state);
31254 }
31255 catch (err) {
31256 subscriber.error(err);
31257 return undefined;
31258 }
31259 } while (true);
31260 return undefined;
31261 });
31262}
31263function dispatch(state) {
31264 var subscriber = state.subscriber, condition = state.condition;
31265 if (subscriber.closed) {
31266 return undefined;
31267 }
31268 if (state.needIterate) {
31269 try {
31270 state.state = state.iterate(state.state);
31271 }
31272 catch (err) {
31273 subscriber.error(err);
31274 return undefined;
31275 }
31276 }
31277 else {
31278 state.needIterate = true;
31279 }
31280 if (condition) {
31281 var conditionResult = void 0;
31282 try {
31283 conditionResult = condition(state.state);
31284 }
31285 catch (err) {
31286 subscriber.error(err);
31287 return undefined;
31288 }
31289 if (!conditionResult) {
31290 subscriber.complete();
31291 return undefined;
31292 }
31293 if (subscriber.closed) {
31294 return undefined;
31295 }
31296 }
31297 var value;
31298 try {
31299 value = state.resultSelector(state.state);
31300 }
31301 catch (err) {
31302 subscriber.error(err);
31303 return undefined;
31304 }
31305 if (subscriber.closed) {
31306 return undefined;
31307 }
31308 subscriber.next(value);
31309 if (subscriber.closed) {
31310 return undefined;
31311 }
31312 return this.schedule(state);
31313}
31314//# sourceMappingURL=generate.js.map
31315
31316
31317/***/ }),
31318/* 252 */
31319/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31320
31321"use strict";
31322__webpack_require__.r(__webpack_exports__);
31323/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31324/* harmony export */ "iif": () => /* binding */ iif
31325/* harmony export */ });
31326/* harmony import */ var _defer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(247);
31327/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(199);
31328/** PURE_IMPORTS_START _defer,_empty PURE_IMPORTS_END */
31329
31330
31331function iif(condition, trueResult, falseResult) {
31332 if (trueResult === void 0) {
31333 trueResult = _empty__WEBPACK_IMPORTED_MODULE_0__.EMPTY;
31334 }
31335 if (falseResult === void 0) {
31336 falseResult = _empty__WEBPACK_IMPORTED_MODULE_0__.EMPTY;
31337 }
31338 return (0,_defer__WEBPACK_IMPORTED_MODULE_1__.defer)(function () { return condition() ? trueResult : falseResult; });
31339}
31340//# sourceMappingURL=iif.js.map
31341
31342
31343/***/ }),
31344/* 253 */
31345/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31346
31347"use strict";
31348__webpack_require__.r(__webpack_exports__);
31349/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31350/* harmony export */ "interval": () => /* binding */ interval
31351/* harmony export */ });
31352/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(166);
31353/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(212);
31354/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(254);
31355/** PURE_IMPORTS_START _Observable,_scheduler_async,_util_isNumeric PURE_IMPORTS_END */
31356
31357
31358
31359function interval(period, scheduler) {
31360 if (period === void 0) {
31361 period = 0;
31362 }
31363 if (scheduler === void 0) {
31364 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async;
31365 }
31366 if (!(0,_util_isNumeric__WEBPACK_IMPORTED_MODULE_1__.isNumeric)(period) || period < 0) {
31367 period = 0;
31368 }
31369 if (!scheduler || typeof scheduler.schedule !== 'function') {
31370 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async;
31371 }
31372 return new _Observable__WEBPACK_IMPORTED_MODULE_2__.Observable(function (subscriber) {
31373 subscriber.add(scheduler.schedule(dispatch, period, { subscriber: subscriber, counter: 0, period: period }));
31374 return subscriber;
31375 });
31376}
31377function dispatch(state) {
31378 var subscriber = state.subscriber, counter = state.counter, period = state.period;
31379 subscriber.next(counter);
31380 this.schedule({ subscriber: subscriber, counter: counter + 1, period: period }, period);
31381}
31382//# sourceMappingURL=interval.js.map
31383
31384
31385/***/ }),
31386/* 254 */
31387/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31388
31389"use strict";
31390__webpack_require__.r(__webpack_exports__);
31391/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31392/* harmony export */ "isNumeric": () => /* binding */ isNumeric
31393/* harmony export */ });
31394/* harmony import */ var _isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(177);
31395/** PURE_IMPORTS_START _isArray PURE_IMPORTS_END */
31396
31397function isNumeric(val) {
31398 return !(0,_isArray__WEBPACK_IMPORTED_MODULE_0__.isArray)(val) && (val - parseFloat(val) + 1) >= 0;
31399}
31400//# sourceMappingURL=isNumeric.js.map
31401
31402
31403/***/ }),
31404/* 255 */
31405/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31406
31407"use strict";
31408__webpack_require__.r(__webpack_exports__);
31409/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31410/* harmony export */ "merge": () => /* binding */ merge
31411/* harmony export */ });
31412/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(166);
31413/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(194);
31414/* harmony import */ var _operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(238);
31415/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(196);
31416/** PURE_IMPORTS_START _Observable,_util_isScheduler,_operators_mergeAll,_fromArray PURE_IMPORTS_END */
31417
31418
31419
31420
31421function merge() {
31422 var observables = [];
31423 for (var _i = 0; _i < arguments.length; _i++) {
31424 observables[_i] = arguments[_i];
31425 }
31426 var concurrent = Number.POSITIVE_INFINITY;
31427 var scheduler = null;
31428 var last = observables[observables.length - 1];
31429 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__.isScheduler)(last)) {
31430 scheduler = observables.pop();
31431 if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {
31432 concurrent = observables.pop();
31433 }
31434 }
31435 else if (typeof last === 'number') {
31436 concurrent = observables.pop();
31437 }
31438 if (scheduler === null && observables.length === 1 && observables[0] instanceof _Observable__WEBPACK_IMPORTED_MODULE_1__.Observable) {
31439 return observables[0];
31440 }
31441 return (0,_operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__.mergeAll)(concurrent)((0,_fromArray__WEBPACK_IMPORTED_MODULE_3__.fromArray)(observables, scheduler));
31442}
31443//# sourceMappingURL=merge.js.map
31444
31445
31446/***/ }),
31447/* 256 */
31448/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31449
31450"use strict";
31451__webpack_require__.r(__webpack_exports__);
31452/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31453/* harmony export */ "NEVER": () => /* binding */ NEVER,
31454/* harmony export */ "never": () => /* binding */ never
31455/* harmony export */ });
31456/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
31457/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(217);
31458/** PURE_IMPORTS_START _Observable,_util_noop PURE_IMPORTS_END */
31459
31460
31461var NEVER = /*@__PURE__*/ new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(_util_noop__WEBPACK_IMPORTED_MODULE_1__.noop);
31462function never() {
31463 return NEVER;
31464}
31465//# sourceMappingURL=never.js.map
31466
31467
31468/***/ }),
31469/* 257 */
31470/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31471
31472"use strict";
31473__webpack_require__.r(__webpack_exports__);
31474/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31475/* harmony export */ "onErrorResumeNext": () => /* binding */ onErrorResumeNext
31476/* harmony export */ });
31477/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(166);
31478/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(240);
31479/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(177);
31480/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(199);
31481/** PURE_IMPORTS_START _Observable,_from,_util_isArray,_empty PURE_IMPORTS_END */
31482
31483
31484
31485
31486function onErrorResumeNext() {
31487 var sources = [];
31488 for (var _i = 0; _i < arguments.length; _i++) {
31489 sources[_i] = arguments[_i];
31490 }
31491 if (sources.length === 0) {
31492 return _empty__WEBPACK_IMPORTED_MODULE_0__.EMPTY;
31493 }
31494 var first = sources[0], remainder = sources.slice(1);
31495 if (sources.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_1__.isArray)(first)) {
31496 return onErrorResumeNext.apply(void 0, first);
31497 }
31498 return new _Observable__WEBPACK_IMPORTED_MODULE_2__.Observable(function (subscriber) {
31499 var subNext = function () { return subscriber.add(onErrorResumeNext.apply(void 0, remainder).subscribe(subscriber)); };
31500 return (0,_from__WEBPACK_IMPORTED_MODULE_3__.from)(first).subscribe({
31501 next: function (value) { subscriber.next(value); },
31502 error: subNext,
31503 complete: subNext,
31504 });
31505 });
31506}
31507//# sourceMappingURL=onErrorResumeNext.js.map
31508
31509
31510/***/ }),
31511/* 258 */
31512/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31513
31514"use strict";
31515__webpack_require__.r(__webpack_exports__);
31516/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31517/* harmony export */ "pairs": () => /* binding */ pairs,
31518/* harmony export */ "dispatch": () => /* binding */ dispatch
31519/* harmony export */ });
31520/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
31521/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
31522/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
31523
31524
31525function pairs(obj, scheduler) {
31526 if (!scheduler) {
31527 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
31528 var keys = Object.keys(obj);
31529 for (var i = 0; i < keys.length && !subscriber.closed; i++) {
31530 var key = keys[i];
31531 if (obj.hasOwnProperty(key)) {
31532 subscriber.next([key, obj[key]]);
31533 }
31534 }
31535 subscriber.complete();
31536 });
31537 }
31538 else {
31539 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
31540 var keys = Object.keys(obj);
31541 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
31542 subscription.add(scheduler.schedule(dispatch, 0, { keys: keys, index: 0, subscriber: subscriber, subscription: subscription, obj: obj }));
31543 return subscription;
31544 });
31545 }
31546}
31547function dispatch(state) {
31548 var keys = state.keys, index = state.index, subscriber = state.subscriber, subscription = state.subscription, obj = state.obj;
31549 if (!subscriber.closed) {
31550 if (index < keys.length) {
31551 var key = keys[index];
31552 subscriber.next([key, obj[key]]);
31553 subscription.add(this.schedule({ keys: keys, index: index + 1, subscriber: subscriber, subscription: subscription, obj: obj }));
31554 }
31555 else {
31556 subscriber.complete();
31557 }
31558 }
31559}
31560//# sourceMappingURL=pairs.js.map
31561
31562
31563/***/ }),
31564/* 259 */
31565/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31566
31567"use strict";
31568__webpack_require__.r(__webpack_exports__);
31569/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31570/* harmony export */ "partition": () => /* binding */ partition
31571/* harmony export */ });
31572/* harmony import */ var _util_not__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(261);
31573/* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
31574/* harmony import */ var _operators_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(260);
31575/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(166);
31576/** PURE_IMPORTS_START _util_not,_util_subscribeTo,_operators_filter,_Observable PURE_IMPORTS_END */
31577
31578
31579
31580
31581function partition(source, predicate, thisArg) {
31582 return [
31583 (0,_operators_filter__WEBPACK_IMPORTED_MODULE_0__.filter)(predicate, thisArg)(new _Observable__WEBPACK_IMPORTED_MODULE_1__.Observable((0,_util_subscribeTo__WEBPACK_IMPORTED_MODULE_2__.subscribeTo)(source))),
31584 (0,_operators_filter__WEBPACK_IMPORTED_MODULE_0__.filter)((0,_util_not__WEBPACK_IMPORTED_MODULE_3__.not)(predicate, thisArg))(new _Observable__WEBPACK_IMPORTED_MODULE_1__.Observable((0,_util_subscribeTo__WEBPACK_IMPORTED_MODULE_2__.subscribeTo)(source)))
31585 ];
31586}
31587//# sourceMappingURL=partition.js.map
31588
31589
31590/***/ }),
31591/* 260 */
31592/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31593
31594"use strict";
31595__webpack_require__.r(__webpack_exports__);
31596/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31597/* harmony export */ "filter": () => /* binding */ filter
31598/* harmony export */ });
31599/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
31600/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
31601/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
31602
31603
31604function filter(predicate, thisArg) {
31605 return function filterOperatorFunction(source) {
31606 return source.lift(new FilterOperator(predicate, thisArg));
31607 };
31608}
31609var FilterOperator = /*@__PURE__*/ (function () {
31610 function FilterOperator(predicate, thisArg) {
31611 this.predicate = predicate;
31612 this.thisArg = thisArg;
31613 }
31614 FilterOperator.prototype.call = function (subscriber, source) {
31615 return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));
31616 };
31617 return FilterOperator;
31618}());
31619var FilterSubscriber = /*@__PURE__*/ (function (_super) {
31620 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(FilterSubscriber, _super);
31621 function FilterSubscriber(destination, predicate, thisArg) {
31622 var _this = _super.call(this, destination) || this;
31623 _this.predicate = predicate;
31624 _this.thisArg = thisArg;
31625 _this.count = 0;
31626 return _this;
31627 }
31628 FilterSubscriber.prototype._next = function (value) {
31629 var result;
31630 try {
31631 result = this.predicate.call(this.thisArg, value, this.count++);
31632 }
31633 catch (err) {
31634 this.destination.error(err);
31635 return;
31636 }
31637 if (result) {
31638 this.destination.next(value);
31639 }
31640 };
31641 return FilterSubscriber;
31642}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
31643//# sourceMappingURL=filter.js.map
31644
31645
31646/***/ }),
31647/* 261 */
31648/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31649
31650"use strict";
31651__webpack_require__.r(__webpack_exports__);
31652/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31653/* harmony export */ "not": () => /* binding */ not
31654/* harmony export */ });
31655/** PURE_IMPORTS_START PURE_IMPORTS_END */
31656function not(pred, thisArg) {
31657 function notPred() {
31658 return !(notPred.pred.apply(notPred.thisArg, arguments));
31659 }
31660 notPred.pred = pred;
31661 notPred.thisArg = thisArg;
31662 return notPred;
31663}
31664//# sourceMappingURL=not.js.map
31665
31666
31667/***/ }),
31668/* 262 */
31669/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31670
31671"use strict";
31672__webpack_require__.r(__webpack_exports__);
31673/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31674/* harmony export */ "race": () => /* binding */ race,
31675/* harmony export */ "RaceOperator": () => /* binding */ RaceOperator,
31676/* harmony export */ "RaceSubscriber": () => /* binding */ RaceSubscriber
31677/* harmony export */ });
31678/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
31679/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(177);
31680/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(196);
31681/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(235);
31682/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(226);
31683/** PURE_IMPORTS_START tslib,_util_isArray,_fromArray,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
31684
31685
31686
31687
31688
31689function race() {
31690 var observables = [];
31691 for (var _i = 0; _i < arguments.length; _i++) {
31692 observables[_i] = arguments[_i];
31693 }
31694 if (observables.length === 1) {
31695 if ((0,_util_isArray__WEBPACK_IMPORTED_MODULE_1__.isArray)(observables[0])) {
31696 observables = observables[0];
31697 }
31698 else {
31699 return observables[0];
31700 }
31701 }
31702 return (0,_fromArray__WEBPACK_IMPORTED_MODULE_2__.fromArray)(observables, undefined).lift(new RaceOperator());
31703}
31704var RaceOperator = /*@__PURE__*/ (function () {
31705 function RaceOperator() {
31706 }
31707 RaceOperator.prototype.call = function (subscriber, source) {
31708 return source.subscribe(new RaceSubscriber(subscriber));
31709 };
31710 return RaceOperator;
31711}());
31712
31713var RaceSubscriber = /*@__PURE__*/ (function (_super) {
31714 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RaceSubscriber, _super);
31715 function RaceSubscriber(destination) {
31716 var _this = _super.call(this, destination) || this;
31717 _this.hasFirst = false;
31718 _this.observables = [];
31719 _this.subscriptions = [];
31720 return _this;
31721 }
31722 RaceSubscriber.prototype._next = function (observable) {
31723 this.observables.push(observable);
31724 };
31725 RaceSubscriber.prototype._complete = function () {
31726 var observables = this.observables;
31727 var len = observables.length;
31728 if (len === 0) {
31729 this.destination.complete();
31730 }
31731 else {
31732 for (var i = 0; i < len && !this.hasFirst; i++) {
31733 var observable = observables[i];
31734 var subscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__.subscribeToResult)(this, observable, observable, i);
31735 if (this.subscriptions) {
31736 this.subscriptions.push(subscription);
31737 }
31738 this.add(subscription);
31739 }
31740 this.observables = null;
31741 }
31742 };
31743 RaceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
31744 if (!this.hasFirst) {
31745 this.hasFirst = true;
31746 for (var i = 0; i < this.subscriptions.length; i++) {
31747 if (i !== outerIndex) {
31748 var subscription = this.subscriptions[i];
31749 subscription.unsubscribe();
31750 this.remove(subscription);
31751 }
31752 }
31753 this.subscriptions = null;
31754 }
31755 this.destination.next(innerValue);
31756 };
31757 return RaceSubscriber;
31758}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__.OuterSubscriber));
31759
31760//# sourceMappingURL=race.js.map
31761
31762
31763/***/ }),
31764/* 263 */
31765/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31766
31767"use strict";
31768__webpack_require__.r(__webpack_exports__);
31769/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31770/* harmony export */ "range": () => /* binding */ range,
31771/* harmony export */ "dispatch": () => /* binding */ dispatch
31772/* harmony export */ });
31773/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
31774/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
31775
31776function range(start, count, scheduler) {
31777 if (start === void 0) {
31778 start = 0;
31779 }
31780 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
31781 if (count === undefined) {
31782 count = start;
31783 start = 0;
31784 }
31785 var index = 0;
31786 var current = start;
31787 if (scheduler) {
31788 return scheduler.schedule(dispatch, 0, {
31789 index: index, count: count, start: start, subscriber: subscriber
31790 });
31791 }
31792 else {
31793 do {
31794 if (index++ >= count) {
31795 subscriber.complete();
31796 break;
31797 }
31798 subscriber.next(current++);
31799 if (subscriber.closed) {
31800 break;
31801 }
31802 } while (true);
31803 }
31804 return undefined;
31805 });
31806}
31807function dispatch(state) {
31808 var start = state.start, index = state.index, count = state.count, subscriber = state.subscriber;
31809 if (index >= count) {
31810 subscriber.complete();
31811 return;
31812 }
31813 subscriber.next(start);
31814 if (subscriber.closed) {
31815 return;
31816 }
31817 state.index = index + 1;
31818 state.start = start + 1;
31819 this.schedule(state);
31820}
31821//# sourceMappingURL=range.js.map
31822
31823
31824/***/ }),
31825/* 264 */
31826/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31827
31828"use strict";
31829__webpack_require__.r(__webpack_exports__);
31830/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31831/* harmony export */ "timer": () => /* binding */ timer
31832/* harmony export */ });
31833/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(166);
31834/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(212);
31835/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(254);
31836/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
31837/** PURE_IMPORTS_START _Observable,_scheduler_async,_util_isNumeric,_util_isScheduler PURE_IMPORTS_END */
31838
31839
31840
31841
31842function timer(dueTime, periodOrScheduler, scheduler) {
31843 if (dueTime === void 0) {
31844 dueTime = 0;
31845 }
31846 var period = -1;
31847 if ((0,_util_isNumeric__WEBPACK_IMPORTED_MODULE_0__.isNumeric)(periodOrScheduler)) {
31848 period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler);
31849 }
31850 else if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__.isScheduler)(periodOrScheduler)) {
31851 scheduler = periodOrScheduler;
31852 }
31853 if (!(0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__.isScheduler)(scheduler)) {
31854 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__.async;
31855 }
31856 return new _Observable__WEBPACK_IMPORTED_MODULE_3__.Observable(function (subscriber) {
31857 var due = (0,_util_isNumeric__WEBPACK_IMPORTED_MODULE_0__.isNumeric)(dueTime)
31858 ? dueTime
31859 : (+dueTime - scheduler.now());
31860 return scheduler.schedule(dispatch, due, {
31861 index: 0, period: period, subscriber: subscriber
31862 });
31863 });
31864}
31865function dispatch(state) {
31866 var index = state.index, period = state.period, subscriber = state.subscriber;
31867 subscriber.next(index);
31868 if (subscriber.closed) {
31869 return;
31870 }
31871 else if (period === -1) {
31872 return subscriber.complete();
31873 }
31874 state.index = index + 1;
31875 this.schedule(state, period);
31876}
31877//# sourceMappingURL=timer.js.map
31878
31879
31880/***/ }),
31881/* 265 */
31882/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31883
31884"use strict";
31885__webpack_require__.r(__webpack_exports__);
31886/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31887/* harmony export */ "using": () => /* binding */ using
31888/* harmony export */ });
31889/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
31890/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(240);
31891/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(199);
31892/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */
31893
31894
31895
31896function using(resourceFactory, observableFactory) {
31897 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
31898 var resource;
31899 try {
31900 resource = resourceFactory();
31901 }
31902 catch (err) {
31903 subscriber.error(err);
31904 return undefined;
31905 }
31906 var result;
31907 try {
31908 result = observableFactory(resource);
31909 }
31910 catch (err) {
31911 subscriber.error(err);
31912 return undefined;
31913 }
31914 var source = result ? (0,_from__WEBPACK_IMPORTED_MODULE_1__.from)(result) : _empty__WEBPACK_IMPORTED_MODULE_2__.EMPTY;
31915 var subscription = source.subscribe(subscriber);
31916 return function () {
31917 subscription.unsubscribe();
31918 if (resource) {
31919 resource.unsubscribe();
31920 }
31921 };
31922 });
31923}
31924//# sourceMappingURL=using.js.map
31925
31926
31927/***/ }),
31928/* 266 */
31929/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31930
31931"use strict";
31932__webpack_require__.r(__webpack_exports__);
31933/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31934/* harmony export */ "zip": () => /* binding */ zip,
31935/* harmony export */ "ZipOperator": () => /* binding */ ZipOperator,
31936/* harmony export */ "ZipSubscriber": () => /* binding */ ZipSubscriber
31937/* harmony export */ });
31938/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
31939/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(196);
31940/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(177);
31941/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(168);
31942/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(235);
31943/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(226);
31944/* harmony import */ var _internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(233);
31945/** PURE_IMPORTS_START tslib,_fromArray,_util_isArray,_Subscriber,_OuterSubscriber,_util_subscribeToResult,_.._internal_symbol_iterator PURE_IMPORTS_END */
31946
31947
31948
31949
31950
31951
31952
31953function zip() {
31954 var observables = [];
31955 for (var _i = 0; _i < arguments.length; _i++) {
31956 observables[_i] = arguments[_i];
31957 }
31958 var resultSelector = observables[observables.length - 1];
31959 if (typeof resultSelector === 'function') {
31960 observables.pop();
31961 }
31962 return (0,_fromArray__WEBPACK_IMPORTED_MODULE_1__.fromArray)(observables, undefined).lift(new ZipOperator(resultSelector));
31963}
31964var ZipOperator = /*@__PURE__*/ (function () {
31965 function ZipOperator(resultSelector) {
31966 this.resultSelector = resultSelector;
31967 }
31968 ZipOperator.prototype.call = function (subscriber, source) {
31969 return source.subscribe(new ZipSubscriber(subscriber, this.resultSelector));
31970 };
31971 return ZipOperator;
31972}());
31973
31974var ZipSubscriber = /*@__PURE__*/ (function (_super) {
31975 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ZipSubscriber, _super);
31976 function ZipSubscriber(destination, resultSelector, values) {
31977 if (values === void 0) {
31978 values = Object.create(null);
31979 }
31980 var _this = _super.call(this, destination) || this;
31981 _this.iterators = [];
31982 _this.active = 0;
31983 _this.resultSelector = (typeof resultSelector === 'function') ? resultSelector : null;
31984 _this.values = values;
31985 return _this;
31986 }
31987 ZipSubscriber.prototype._next = function (value) {
31988 var iterators = this.iterators;
31989 if ((0,_util_isArray__WEBPACK_IMPORTED_MODULE_2__.isArray)(value)) {
31990 iterators.push(new StaticArrayIterator(value));
31991 }
31992 else if (typeof value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__.iterator] === 'function') {
31993 iterators.push(new StaticIterator(value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__.iterator]()));
31994 }
31995 else {
31996 iterators.push(new ZipBufferIterator(this.destination, this, value));
31997 }
31998 };
31999 ZipSubscriber.prototype._complete = function () {
32000 var iterators = this.iterators;
32001 var len = iterators.length;
32002 this.unsubscribe();
32003 if (len === 0) {
32004 this.destination.complete();
32005 return;
32006 }
32007 this.active = len;
32008 for (var i = 0; i < len; i++) {
32009 var iterator = iterators[i];
32010 if (iterator.stillUnsubscribed) {
32011 var destination = this.destination;
32012 destination.add(iterator.subscribe(iterator, i));
32013 }
32014 else {
32015 this.active--;
32016 }
32017 }
32018 };
32019 ZipSubscriber.prototype.notifyInactive = function () {
32020 this.active--;
32021 if (this.active === 0) {
32022 this.destination.complete();
32023 }
32024 };
32025 ZipSubscriber.prototype.checkIterators = function () {
32026 var iterators = this.iterators;
32027 var len = iterators.length;
32028 var destination = this.destination;
32029 for (var i = 0; i < len; i++) {
32030 var iterator = iterators[i];
32031 if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {
32032 return;
32033 }
32034 }
32035 var shouldComplete = false;
32036 var args = [];
32037 for (var i = 0; i < len; i++) {
32038 var iterator = iterators[i];
32039 var result = iterator.next();
32040 if (iterator.hasCompleted()) {
32041 shouldComplete = true;
32042 }
32043 if (result.done) {
32044 destination.complete();
32045 return;
32046 }
32047 args.push(result.value);
32048 }
32049 if (this.resultSelector) {
32050 this._tryresultSelector(args);
32051 }
32052 else {
32053 destination.next(args);
32054 }
32055 if (shouldComplete) {
32056 destination.complete();
32057 }
32058 };
32059 ZipSubscriber.prototype._tryresultSelector = function (args) {
32060 var result;
32061 try {
32062 result = this.resultSelector.apply(this, args);
32063 }
32064 catch (err) {
32065 this.destination.error(err);
32066 return;
32067 }
32068 this.destination.next(result);
32069 };
32070 return ZipSubscriber;
32071}(_Subscriber__WEBPACK_IMPORTED_MODULE_4__.Subscriber));
32072
32073var StaticIterator = /*@__PURE__*/ (function () {
32074 function StaticIterator(iterator) {
32075 this.iterator = iterator;
32076 this.nextResult = iterator.next();
32077 }
32078 StaticIterator.prototype.hasValue = function () {
32079 return true;
32080 };
32081 StaticIterator.prototype.next = function () {
32082 var result = this.nextResult;
32083 this.nextResult = this.iterator.next();
32084 return result;
32085 };
32086 StaticIterator.prototype.hasCompleted = function () {
32087 var nextResult = this.nextResult;
32088 return nextResult && nextResult.done;
32089 };
32090 return StaticIterator;
32091}());
32092var StaticArrayIterator = /*@__PURE__*/ (function () {
32093 function StaticArrayIterator(array) {
32094 this.array = array;
32095 this.index = 0;
32096 this.length = 0;
32097 this.length = array.length;
32098 }
32099 StaticArrayIterator.prototype[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__.iterator] = function () {
32100 return this;
32101 };
32102 StaticArrayIterator.prototype.next = function (value) {
32103 var i = this.index++;
32104 var array = this.array;
32105 return i < this.length ? { value: array[i], done: false } : { value: null, done: true };
32106 };
32107 StaticArrayIterator.prototype.hasValue = function () {
32108 return this.array.length > this.index;
32109 };
32110 StaticArrayIterator.prototype.hasCompleted = function () {
32111 return this.array.length === this.index;
32112 };
32113 return StaticArrayIterator;
32114}());
32115var ZipBufferIterator = /*@__PURE__*/ (function (_super) {
32116 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ZipBufferIterator, _super);
32117 function ZipBufferIterator(destination, parent, observable) {
32118 var _this = _super.call(this, destination) || this;
32119 _this.parent = parent;
32120 _this.observable = observable;
32121 _this.stillUnsubscribed = true;
32122 _this.buffer = [];
32123 _this.isComplete = false;
32124 return _this;
32125 }
32126 ZipBufferIterator.prototype[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__.iterator] = function () {
32127 return this;
32128 };
32129 ZipBufferIterator.prototype.next = function () {
32130 var buffer = this.buffer;
32131 if (buffer.length === 0 && this.isComplete) {
32132 return { value: null, done: true };
32133 }
32134 else {
32135 return { value: buffer.shift(), done: false };
32136 }
32137 };
32138 ZipBufferIterator.prototype.hasValue = function () {
32139 return this.buffer.length > 0;
32140 };
32141 ZipBufferIterator.prototype.hasCompleted = function () {
32142 return this.buffer.length === 0 && this.isComplete;
32143 };
32144 ZipBufferIterator.prototype.notifyComplete = function () {
32145 if (this.buffer.length > 0) {
32146 this.isComplete = true;
32147 this.parent.notifyInactive();
32148 }
32149 else {
32150 this.destination.complete();
32151 }
32152 };
32153 ZipBufferIterator.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
32154 this.buffer.push(innerValue);
32155 this.parent.checkIterators();
32156 };
32157 ZipBufferIterator.prototype.subscribe = function (value, index) {
32158 return (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__.subscribeToResult)(this, this.observable, this, index);
32159 };
32160 return ZipBufferIterator;
32161}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_6__.OuterSubscriber));
32162//# sourceMappingURL=zip.js.map
32163
32164
32165/***/ }),
32166/* 267 */
32167/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
32168
32169"use strict";
32170
32171Object.defineProperty(exports, "__esModule", ({ value: true }));
32172var rxjs_1 = __webpack_require__(165);
32173/**
32174 *
32175 * only keep the lastest source observable value until the inner observable complete,
32176 * then trigger the lastest source observable value
32177 *
32178 * @param isAbandon - is abandon inner observable value when there is newer source observable value
32179 *
32180 */
32181function waitMap(fn, isAbandon) {
32182 if (isAbandon === void 0) { isAbandon = true; }
32183 return function (preObs) {
32184 return rxjs_1.Observable.create(function (observer) {
32185 var closed = false;
32186 var latestRes;
32187 var resultSubp;
32188 var subp;
32189 var run = function (res) {
32190 var obs = fn(res);
32191 return obs.subscribe({
32192 next: function (res) {
32193 if (latestRes !== undefined && isAbandon) {
32194 return;
32195 }
32196 observer.next(res);
32197 },
32198 error: function (err) {
32199 closed = true;
32200 observer.error(err);
32201 resultSubp.unsubscribe();
32202 },
32203 complete: function () {
32204 if (latestRes && !closed) {
32205 var res_1 = latestRes;
32206 latestRes = undefined;
32207 run(res_1);
32208 }
32209 }
32210 });
32211 };
32212 resultSubp = preObs.subscribe({
32213 next: function (res) {
32214 latestRes = res;
32215 if (!subp || subp.closed) {
32216 latestRes = undefined;
32217 subp = run(res);
32218 }
32219 },
32220 error: function (err) {
32221 closed = true;
32222 observer.error(err);
32223 },
32224 complete: function () {
32225 closed = true;
32226 observer.complete();
32227 }
32228 });
32229 return resultSubp;
32230 });
32231 };
32232}
32233exports.waitMap = waitMap;
32234
32235
32236/***/ }),
32237/* 268 */
32238/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32239
32240"use strict";
32241__webpack_require__.r(__webpack_exports__);
32242/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32243/* harmony export */ "audit": () => /* reexport safe */ _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__.audit,
32244/* harmony export */ "auditTime": () => /* reexport safe */ _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__.auditTime,
32245/* harmony export */ "buffer": () => /* reexport safe */ _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__.buffer,
32246/* harmony export */ "bufferCount": () => /* reexport safe */ _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__.bufferCount,
32247/* harmony export */ "bufferTime": () => /* reexport safe */ _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__.bufferTime,
32248/* harmony export */ "bufferToggle": () => /* reexport safe */ _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__.bufferToggle,
32249/* harmony export */ "bufferWhen": () => /* reexport safe */ _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__.bufferWhen,
32250/* harmony export */ "catchError": () => /* reexport safe */ _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__.catchError,
32251/* harmony export */ "combineAll": () => /* reexport safe */ _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__.combineAll,
32252/* harmony export */ "combineLatest": () => /* reexport safe */ _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__.combineLatest,
32253/* harmony export */ "concat": () => /* reexport safe */ _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__.concat,
32254/* harmony export */ "concatAll": () => /* reexport safe */ _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__.concatAll,
32255/* harmony export */ "concatMap": () => /* reexport safe */ _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__.concatMap,
32256/* harmony export */ "concatMapTo": () => /* reexport safe */ _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__.concatMapTo,
32257/* harmony export */ "count": () => /* reexport safe */ _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__.count,
32258/* harmony export */ "debounce": () => /* reexport safe */ _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__.debounce,
32259/* harmony export */ "debounceTime": () => /* reexport safe */ _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__.debounceTime,
32260/* harmony export */ "defaultIfEmpty": () => /* reexport safe */ _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__.defaultIfEmpty,
32261/* harmony export */ "delay": () => /* reexport safe */ _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__.delay,
32262/* harmony export */ "delayWhen": () => /* reexport safe */ _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__.delayWhen,
32263/* harmony export */ "dematerialize": () => /* reexport safe */ _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__.dematerialize,
32264/* harmony export */ "distinct": () => /* reexport safe */ _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__.distinct,
32265/* harmony export */ "distinctUntilChanged": () => /* reexport safe */ _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__.distinctUntilChanged,
32266/* harmony export */ "distinctUntilKeyChanged": () => /* reexport safe */ _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__.distinctUntilKeyChanged,
32267/* harmony export */ "elementAt": () => /* reexport safe */ _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__.elementAt,
32268/* harmony export */ "endWith": () => /* reexport safe */ _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__.endWith,
32269/* harmony export */ "every": () => /* reexport safe */ _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__.every,
32270/* harmony export */ "exhaust": () => /* reexport safe */ _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__.exhaust,
32271/* harmony export */ "exhaustMap": () => /* reexport safe */ _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__.exhaustMap,
32272/* harmony export */ "expand": () => /* reexport safe */ _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__.expand,
32273/* harmony export */ "filter": () => /* reexport safe */ _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__.filter,
32274/* harmony export */ "finalize": () => /* reexport safe */ _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__.finalize,
32275/* harmony export */ "find": () => /* reexport safe */ _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__.find,
32276/* harmony export */ "findIndex": () => /* reexport safe */ _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__.findIndex,
32277/* harmony export */ "first": () => /* reexport safe */ _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__.first,
32278/* harmony export */ "groupBy": () => /* reexport safe */ _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__.groupBy,
32279/* harmony export */ "ignoreElements": () => /* reexport safe */ _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__.ignoreElements,
32280/* harmony export */ "isEmpty": () => /* reexport safe */ _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__.isEmpty,
32281/* harmony export */ "last": () => /* reexport safe */ _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__.last,
32282/* harmony export */ "map": () => /* reexport safe */ _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__.map,
32283/* harmony export */ "mapTo": () => /* reexport safe */ _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__.mapTo,
32284/* harmony export */ "materialize": () => /* reexport safe */ _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__.materialize,
32285/* harmony export */ "max": () => /* reexport safe */ _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__.max,
32286/* harmony export */ "merge": () => /* reexport safe */ _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__.merge,
32287/* harmony export */ "mergeAll": () => /* reexport safe */ _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__.mergeAll,
32288/* harmony export */ "mergeMap": () => /* reexport safe */ _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__.mergeMap,
32289/* harmony export */ "flatMap": () => /* reexport safe */ _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__.mergeMap,
32290/* harmony export */ "mergeMapTo": () => /* reexport safe */ _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__.mergeMapTo,
32291/* harmony export */ "mergeScan": () => /* reexport safe */ _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__.mergeScan,
32292/* harmony export */ "min": () => /* reexport safe */ _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__.min,
32293/* harmony export */ "multicast": () => /* reexport safe */ _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__.multicast,
32294/* harmony export */ "observeOn": () => /* reexport safe */ _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__.observeOn,
32295/* harmony export */ "onErrorResumeNext": () => /* reexport safe */ _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__.onErrorResumeNext,
32296/* harmony export */ "pairwise": () => /* reexport safe */ _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__.pairwise,
32297/* harmony export */ "partition": () => /* reexport safe */ _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__.partition,
32298/* harmony export */ "pluck": () => /* reexport safe */ _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__.pluck,
32299/* harmony export */ "publish": () => /* reexport safe */ _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__.publish,
32300/* harmony export */ "publishBehavior": () => /* reexport safe */ _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__.publishBehavior,
32301/* harmony export */ "publishLast": () => /* reexport safe */ _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__.publishLast,
32302/* harmony export */ "publishReplay": () => /* reexport safe */ _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__.publishReplay,
32303/* harmony export */ "race": () => /* reexport safe */ _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__.race,
32304/* harmony export */ "reduce": () => /* reexport safe */ _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__.reduce,
32305/* harmony export */ "repeat": () => /* reexport safe */ _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__.repeat,
32306/* harmony export */ "repeatWhen": () => /* reexport safe */ _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__.repeatWhen,
32307/* harmony export */ "retry": () => /* reexport safe */ _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__.retry,
32308/* harmony export */ "retryWhen": () => /* reexport safe */ _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__.retryWhen,
32309/* harmony export */ "refCount": () => /* reexport safe */ _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__.refCount,
32310/* harmony export */ "sample": () => /* reexport safe */ _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__.sample,
32311/* harmony export */ "sampleTime": () => /* reexport safe */ _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__.sampleTime,
32312/* harmony export */ "scan": () => /* reexport safe */ _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__.scan,
32313/* harmony export */ "sequenceEqual": () => /* reexport safe */ _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__.sequenceEqual,
32314/* harmony export */ "share": () => /* reexport safe */ _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__.share,
32315/* harmony export */ "shareReplay": () => /* reexport safe */ _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__.shareReplay,
32316/* harmony export */ "single": () => /* reexport safe */ _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__.single,
32317/* harmony export */ "skip": () => /* reexport safe */ _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__.skip,
32318/* harmony export */ "skipLast": () => /* reexport safe */ _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__.skipLast,
32319/* harmony export */ "skipUntil": () => /* reexport safe */ _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__.skipUntil,
32320/* harmony export */ "skipWhile": () => /* reexport safe */ _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__.skipWhile,
32321/* harmony export */ "startWith": () => /* reexport safe */ _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__.startWith,
32322/* harmony export */ "subscribeOn": () => /* reexport safe */ _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__.subscribeOn,
32323/* harmony export */ "switchAll": () => /* reexport safe */ _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__.switchAll,
32324/* harmony export */ "switchMap": () => /* reexport safe */ _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__.switchMap,
32325/* harmony export */ "switchMapTo": () => /* reexport safe */ _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__.switchMapTo,
32326/* harmony export */ "take": () => /* reexport safe */ _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__.take,
32327/* harmony export */ "takeLast": () => /* reexport safe */ _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__.takeLast,
32328/* harmony export */ "takeUntil": () => /* reexport safe */ _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__.takeUntil,
32329/* harmony export */ "takeWhile": () => /* reexport safe */ _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__.takeWhile,
32330/* harmony export */ "tap": () => /* reexport safe */ _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__.tap,
32331/* harmony export */ "throttle": () => /* reexport safe */ _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__.throttle,
32332/* harmony export */ "throttleTime": () => /* reexport safe */ _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__.throttleTime,
32333/* harmony export */ "throwIfEmpty": () => /* reexport safe */ _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__.throwIfEmpty,
32334/* harmony export */ "timeInterval": () => /* reexport safe */ _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__.timeInterval,
32335/* harmony export */ "timeout": () => /* reexport safe */ _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__.timeout,
32336/* harmony export */ "timeoutWith": () => /* reexport safe */ _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__.timeoutWith,
32337/* harmony export */ "timestamp": () => /* reexport safe */ _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__.timestamp,
32338/* harmony export */ "toArray": () => /* reexport safe */ _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__.toArray,
32339/* harmony export */ "window": () => /* reexport safe */ _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__.window,
32340/* harmony export */ "windowCount": () => /* reexport safe */ _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__.windowCount,
32341/* harmony export */ "windowTime": () => /* reexport safe */ _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__.windowTime,
32342/* harmony export */ "windowToggle": () => /* reexport safe */ _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__.windowToggle,
32343/* harmony export */ "windowWhen": () => /* reexport safe */ _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__.windowWhen,
32344/* harmony export */ "withLatestFrom": () => /* reexport safe */ _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__.withLatestFrom,
32345/* harmony export */ "zip": () => /* reexport safe */ _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__.zip,
32346/* harmony export */ "zipAll": () => /* reexport safe */ _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__.zipAll
32347/* harmony export */ });
32348/* harmony import */ var _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(269);
32349/* harmony import */ var _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(270);
32350/* harmony import */ var _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(271);
32351/* harmony import */ var _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(272);
32352/* harmony import */ var _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(273);
32353/* harmony import */ var _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(274);
32354/* harmony import */ var _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(275);
32355/* harmony import */ var _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(276);
32356/* harmony import */ var _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(277);
32357/* harmony import */ var _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(278);
32358/* harmony import */ var _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(279);
32359/* harmony import */ var _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(237);
32360/* harmony import */ var _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(280);
32361/* harmony import */ var _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(281);
32362/* harmony import */ var _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(282);
32363/* harmony import */ var _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(283);
32364/* harmony import */ var _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(284);
32365/* harmony import */ var _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(285);
32366/* harmony import */ var _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(286);
32367/* harmony import */ var _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(288);
32368/* harmony import */ var _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(289);
32369/* harmony import */ var _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(290);
32370/* harmony import */ var _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(291);
32371/* harmony import */ var _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(292);
32372/* harmony import */ var _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(293);
32373/* harmony import */ var _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(296);
32374/* harmony import */ var _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(297);
32375/* harmony import */ var _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(298);
32376/* harmony import */ var _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(299);
32377/* harmony import */ var _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(300);
32378/* harmony import */ var _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(260);
32379/* harmony import */ var _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(301);
32380/* harmony import */ var _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(302);
32381/* harmony import */ var _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(303);
32382/* harmony import */ var _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(304);
32383/* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(188);
32384/* harmony import */ var _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(305);
32385/* harmony import */ var _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(306);
32386/* harmony import */ var _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(307);
32387/* harmony import */ var _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(223);
32388/* harmony import */ var _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(309);
32389/* harmony import */ var _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(310);
32390/* harmony import */ var _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(311);
32391/* harmony import */ var _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(314);
32392/* harmony import */ var _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(238);
32393/* harmony import */ var _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(239);
32394/* harmony import */ var _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(315);
32395/* harmony import */ var _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(316);
32396/* harmony import */ var _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(317);
32397/* harmony import */ var _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(318);
32398/* harmony import */ var _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(191);
32399/* harmony import */ var _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(319);
32400/* harmony import */ var _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(320);
32401/* harmony import */ var _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(321);
32402/* harmony import */ var _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(322);
32403/* harmony import */ var _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(323);
32404/* harmony import */ var _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(324);
32405/* harmony import */ var _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(325);
32406/* harmony import */ var _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(326);
32407/* harmony import */ var _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(327);
32408/* harmony import */ var _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(312);
32409/* harmony import */ var _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(328);
32410/* harmony import */ var _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(329);
32411/* harmony import */ var _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(330);
32412/* harmony import */ var _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(331);
32413/* harmony import */ var _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(184);
32414/* harmony import */ var _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(332);
32415/* harmony import */ var _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(333);
32416/* harmony import */ var _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(313);
32417/* harmony import */ var _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(334);
32418/* harmony import */ var _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(335);
32419/* harmony import */ var _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(336);
32420/* harmony import */ var _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(337);
32421/* harmony import */ var _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(338);
32422/* harmony import */ var _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(339);
32423/* harmony import */ var _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(340);
32424/* harmony import */ var _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(341);
32425/* harmony import */ var _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(342);
32426/* harmony import */ var _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(343);
32427/* harmony import */ var _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(345);
32428/* harmony import */ var _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(346);
32429/* harmony import */ var _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(347);
32430/* harmony import */ var _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(294);
32431/* harmony import */ var _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(308);
32432/* harmony import */ var _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(348);
32433/* harmony import */ var _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(349);
32434/* harmony import */ var _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(350);
32435/* harmony import */ var _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(351);
32436/* harmony import */ var _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(352);
32437/* harmony import */ var _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(295);
32438/* harmony import */ var _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(353);
32439/* harmony import */ var _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(354);
32440/* harmony import */ var _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(355);
32441/* harmony import */ var _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(356);
32442/* harmony import */ var _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(357);
32443/* harmony import */ var _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(358);
32444/* harmony import */ var _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(359);
32445/* harmony import */ var _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(360);
32446/* harmony import */ var _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(361);
32447/* harmony import */ var _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(362);
32448/* harmony import */ var _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(363);
32449/* harmony import */ var _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(364);
32450/* harmony import */ var _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(365);
32451/** PURE_IMPORTS_START PURE_IMPORTS_END */
32452
32453
32454
32455
32456
32457
32458
32459
32460
32461
32462
32463
32464
32465
32466
32467
32468
32469
32470
32471
32472
32473
32474
32475
32476
32477
32478
32479
32480
32481
32482
32483
32484
32485
32486
32487
32488
32489
32490
32491
32492
32493
32494
32495
32496
32497
32498
32499
32500
32501
32502
32503
32504
32505
32506
32507
32508
32509
32510
32511
32512
32513
32514
32515
32516
32517
32518
32519
32520
32521
32522
32523
32524
32525
32526
32527
32528
32529
32530
32531
32532
32533
32534
32535
32536
32537
32538
32539
32540
32541
32542
32543
32544
32545
32546
32547
32548
32549
32550
32551
32552
32553
32554
32555
32556//# sourceMappingURL=index.js.map
32557
32558
32559/***/ }),
32560/* 269 */
32561/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32562
32563"use strict";
32564__webpack_require__.r(__webpack_exports__);
32565/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32566/* harmony export */ "audit": () => /* binding */ audit
32567/* harmony export */ });
32568/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
32569/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(235);
32570/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
32571/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
32572
32573
32574
32575function audit(durationSelector) {
32576 return function auditOperatorFunction(source) {
32577 return source.lift(new AuditOperator(durationSelector));
32578 };
32579}
32580var AuditOperator = /*@__PURE__*/ (function () {
32581 function AuditOperator(durationSelector) {
32582 this.durationSelector = durationSelector;
32583 }
32584 AuditOperator.prototype.call = function (subscriber, source) {
32585 return source.subscribe(new AuditSubscriber(subscriber, this.durationSelector));
32586 };
32587 return AuditOperator;
32588}());
32589var AuditSubscriber = /*@__PURE__*/ (function (_super) {
32590 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AuditSubscriber, _super);
32591 function AuditSubscriber(destination, durationSelector) {
32592 var _this = _super.call(this, destination) || this;
32593 _this.durationSelector = durationSelector;
32594 _this.hasValue = false;
32595 return _this;
32596 }
32597 AuditSubscriber.prototype._next = function (value) {
32598 this.value = value;
32599 this.hasValue = true;
32600 if (!this.throttled) {
32601 var duration = void 0;
32602 try {
32603 var durationSelector = this.durationSelector;
32604 duration = durationSelector(value);
32605 }
32606 catch (err) {
32607 return this.destination.error(err);
32608 }
32609 var innerSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(this, duration);
32610 if (!innerSubscription || innerSubscription.closed) {
32611 this.clearThrottle();
32612 }
32613 else {
32614 this.add(this.throttled = innerSubscription);
32615 }
32616 }
32617 };
32618 AuditSubscriber.prototype.clearThrottle = function () {
32619 var _a = this, value = _a.value, hasValue = _a.hasValue, throttled = _a.throttled;
32620 if (throttled) {
32621 this.remove(throttled);
32622 this.throttled = null;
32623 throttled.unsubscribe();
32624 }
32625 if (hasValue) {
32626 this.value = null;
32627 this.hasValue = false;
32628 this.destination.next(value);
32629 }
32630 };
32631 AuditSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex) {
32632 this.clearThrottle();
32633 };
32634 AuditSubscriber.prototype.notifyComplete = function () {
32635 this.clearThrottle();
32636 };
32637 return AuditSubscriber;
32638}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
32639//# sourceMappingURL=audit.js.map
32640
32641
32642/***/ }),
32643/* 270 */
32644/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32645
32646"use strict";
32647__webpack_require__.r(__webpack_exports__);
32648/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32649/* harmony export */ "auditTime": () => /* binding */ auditTime
32650/* harmony export */ });
32651/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(212);
32652/* harmony import */ var _audit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(269);
32653/* harmony import */ var _observable_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(264);
32654/** PURE_IMPORTS_START _scheduler_async,_audit,_observable_timer PURE_IMPORTS_END */
32655
32656
32657
32658function auditTime(duration, scheduler) {
32659 if (scheduler === void 0) {
32660 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async;
32661 }
32662 return (0,_audit__WEBPACK_IMPORTED_MODULE_1__.audit)(function () { return (0,_observable_timer__WEBPACK_IMPORTED_MODULE_2__.timer)(duration, scheduler); });
32663}
32664//# sourceMappingURL=auditTime.js.map
32665
32666
32667/***/ }),
32668/* 271 */
32669/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32670
32671"use strict";
32672__webpack_require__.r(__webpack_exports__);
32673/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32674/* harmony export */ "buffer": () => /* binding */ buffer
32675/* harmony export */ });
32676/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
32677/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(235);
32678/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
32679/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
32680
32681
32682
32683function buffer(closingNotifier) {
32684 return function bufferOperatorFunction(source) {
32685 return source.lift(new BufferOperator(closingNotifier));
32686 };
32687}
32688var BufferOperator = /*@__PURE__*/ (function () {
32689 function BufferOperator(closingNotifier) {
32690 this.closingNotifier = closingNotifier;
32691 }
32692 BufferOperator.prototype.call = function (subscriber, source) {
32693 return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier));
32694 };
32695 return BufferOperator;
32696}());
32697var BufferSubscriber = /*@__PURE__*/ (function (_super) {
32698 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BufferSubscriber, _super);
32699 function BufferSubscriber(destination, closingNotifier) {
32700 var _this = _super.call(this, destination) || this;
32701 _this.buffer = [];
32702 _this.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(_this, closingNotifier));
32703 return _this;
32704 }
32705 BufferSubscriber.prototype._next = function (value) {
32706 this.buffer.push(value);
32707 };
32708 BufferSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
32709 var buffer = this.buffer;
32710 this.buffer = [];
32711 this.destination.next(buffer);
32712 };
32713 return BufferSubscriber;
32714}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
32715//# sourceMappingURL=buffer.js.map
32716
32717
32718/***/ }),
32719/* 272 */
32720/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32721
32722"use strict";
32723__webpack_require__.r(__webpack_exports__);
32724/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32725/* harmony export */ "bufferCount": () => /* binding */ bufferCount
32726/* harmony export */ });
32727/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
32728/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
32729/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
32730
32731
32732function bufferCount(bufferSize, startBufferEvery) {
32733 if (startBufferEvery === void 0) {
32734 startBufferEvery = null;
32735 }
32736 return function bufferCountOperatorFunction(source) {
32737 return source.lift(new BufferCountOperator(bufferSize, startBufferEvery));
32738 };
32739}
32740var BufferCountOperator = /*@__PURE__*/ (function () {
32741 function BufferCountOperator(bufferSize, startBufferEvery) {
32742 this.bufferSize = bufferSize;
32743 this.startBufferEvery = startBufferEvery;
32744 if (!startBufferEvery || bufferSize === startBufferEvery) {
32745 this.subscriberClass = BufferCountSubscriber;
32746 }
32747 else {
32748 this.subscriberClass = BufferSkipCountSubscriber;
32749 }
32750 }
32751 BufferCountOperator.prototype.call = function (subscriber, source) {
32752 return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));
32753 };
32754 return BufferCountOperator;
32755}());
32756var BufferCountSubscriber = /*@__PURE__*/ (function (_super) {
32757 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BufferCountSubscriber, _super);
32758 function BufferCountSubscriber(destination, bufferSize) {
32759 var _this = _super.call(this, destination) || this;
32760 _this.bufferSize = bufferSize;
32761 _this.buffer = [];
32762 return _this;
32763 }
32764 BufferCountSubscriber.prototype._next = function (value) {
32765 var buffer = this.buffer;
32766 buffer.push(value);
32767 if (buffer.length == this.bufferSize) {
32768 this.destination.next(buffer);
32769 this.buffer = [];
32770 }
32771 };
32772 BufferCountSubscriber.prototype._complete = function () {
32773 var buffer = this.buffer;
32774 if (buffer.length > 0) {
32775 this.destination.next(buffer);
32776 }
32777 _super.prototype._complete.call(this);
32778 };
32779 return BufferCountSubscriber;
32780}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
32781var BufferSkipCountSubscriber = /*@__PURE__*/ (function (_super) {
32782 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BufferSkipCountSubscriber, _super);
32783 function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) {
32784 var _this = _super.call(this, destination) || this;
32785 _this.bufferSize = bufferSize;
32786 _this.startBufferEvery = startBufferEvery;
32787 _this.buffers = [];
32788 _this.count = 0;
32789 return _this;
32790 }
32791 BufferSkipCountSubscriber.prototype._next = function (value) {
32792 var _a = this, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers, count = _a.count;
32793 this.count++;
32794 if (count % startBufferEvery === 0) {
32795 buffers.push([]);
32796 }
32797 for (var i = buffers.length; i--;) {
32798 var buffer = buffers[i];
32799 buffer.push(value);
32800 if (buffer.length === bufferSize) {
32801 buffers.splice(i, 1);
32802 this.destination.next(buffer);
32803 }
32804 }
32805 };
32806 BufferSkipCountSubscriber.prototype._complete = function () {
32807 var _a = this, buffers = _a.buffers, destination = _a.destination;
32808 while (buffers.length > 0) {
32809 var buffer = buffers.shift();
32810 if (buffer.length > 0) {
32811 destination.next(buffer);
32812 }
32813 }
32814 _super.prototype._complete.call(this);
32815 };
32816 return BufferSkipCountSubscriber;
32817}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
32818//# sourceMappingURL=bufferCount.js.map
32819
32820
32821/***/ }),
32822/* 273 */
32823/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32824
32825"use strict";
32826__webpack_require__.r(__webpack_exports__);
32827/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32828/* harmony export */ "bufferTime": () => /* binding */ bufferTime
32829/* harmony export */ });
32830/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
32831/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
32832/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(168);
32833/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(194);
32834/** PURE_IMPORTS_START tslib,_scheduler_async,_Subscriber,_util_isScheduler PURE_IMPORTS_END */
32835
32836
32837
32838
32839function bufferTime(bufferTimeSpan) {
32840 var length = arguments.length;
32841 var scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
32842 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__.isScheduler)(arguments[arguments.length - 1])) {
32843 scheduler = arguments[arguments.length - 1];
32844 length--;
32845 }
32846 var bufferCreationInterval = null;
32847 if (length >= 2) {
32848 bufferCreationInterval = arguments[1];
32849 }
32850 var maxBufferSize = Number.POSITIVE_INFINITY;
32851 if (length >= 3) {
32852 maxBufferSize = arguments[2];
32853 }
32854 return function bufferTimeOperatorFunction(source) {
32855 return source.lift(new BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler));
32856 };
32857}
32858var BufferTimeOperator = /*@__PURE__*/ (function () {
32859 function BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
32860 this.bufferTimeSpan = bufferTimeSpan;
32861 this.bufferCreationInterval = bufferCreationInterval;
32862 this.maxBufferSize = maxBufferSize;
32863 this.scheduler = scheduler;
32864 }
32865 BufferTimeOperator.prototype.call = function (subscriber, source) {
32866 return source.subscribe(new BufferTimeSubscriber(subscriber, this.bufferTimeSpan, this.bufferCreationInterval, this.maxBufferSize, this.scheduler));
32867 };
32868 return BufferTimeOperator;
32869}());
32870var Context = /*@__PURE__*/ (function () {
32871 function Context() {
32872 this.buffer = [];
32873 }
32874 return Context;
32875}());
32876var BufferTimeSubscriber = /*@__PURE__*/ (function (_super) {
32877 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BufferTimeSubscriber, _super);
32878 function BufferTimeSubscriber(destination, bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
32879 var _this = _super.call(this, destination) || this;
32880 _this.bufferTimeSpan = bufferTimeSpan;
32881 _this.bufferCreationInterval = bufferCreationInterval;
32882 _this.maxBufferSize = maxBufferSize;
32883 _this.scheduler = scheduler;
32884 _this.contexts = [];
32885 var context = _this.openContext();
32886 _this.timespanOnly = bufferCreationInterval == null || bufferCreationInterval < 0;
32887 if (_this.timespanOnly) {
32888 var timeSpanOnlyState = { subscriber: _this, context: context, bufferTimeSpan: bufferTimeSpan };
32889 _this.add(context.closeAction = scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
32890 }
32891 else {
32892 var closeState = { subscriber: _this, context: context };
32893 var creationState = { bufferTimeSpan: bufferTimeSpan, bufferCreationInterval: bufferCreationInterval, subscriber: _this, scheduler: scheduler };
32894 _this.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, closeState));
32895 _this.add(scheduler.schedule(dispatchBufferCreation, bufferCreationInterval, creationState));
32896 }
32897 return _this;
32898 }
32899 BufferTimeSubscriber.prototype._next = function (value) {
32900 var contexts = this.contexts;
32901 var len = contexts.length;
32902 var filledBufferContext;
32903 for (var i = 0; i < len; i++) {
32904 var context_1 = contexts[i];
32905 var buffer = context_1.buffer;
32906 buffer.push(value);
32907 if (buffer.length == this.maxBufferSize) {
32908 filledBufferContext = context_1;
32909 }
32910 }
32911 if (filledBufferContext) {
32912 this.onBufferFull(filledBufferContext);
32913 }
32914 };
32915 BufferTimeSubscriber.prototype._error = function (err) {
32916 this.contexts.length = 0;
32917 _super.prototype._error.call(this, err);
32918 };
32919 BufferTimeSubscriber.prototype._complete = function () {
32920 var _a = this, contexts = _a.contexts, destination = _a.destination;
32921 while (contexts.length > 0) {
32922 var context_2 = contexts.shift();
32923 destination.next(context_2.buffer);
32924 }
32925 _super.prototype._complete.call(this);
32926 };
32927 BufferTimeSubscriber.prototype._unsubscribe = function () {
32928 this.contexts = null;
32929 };
32930 BufferTimeSubscriber.prototype.onBufferFull = function (context) {
32931 this.closeContext(context);
32932 var closeAction = context.closeAction;
32933 closeAction.unsubscribe();
32934 this.remove(closeAction);
32935 if (!this.closed && this.timespanOnly) {
32936 context = this.openContext();
32937 var bufferTimeSpan = this.bufferTimeSpan;
32938 var timeSpanOnlyState = { subscriber: this, context: context, bufferTimeSpan: bufferTimeSpan };
32939 this.add(context.closeAction = this.scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
32940 }
32941 };
32942 BufferTimeSubscriber.prototype.openContext = function () {
32943 var context = new Context();
32944 this.contexts.push(context);
32945 return context;
32946 };
32947 BufferTimeSubscriber.prototype.closeContext = function (context) {
32948 this.destination.next(context.buffer);
32949 var contexts = this.contexts;
32950 var spliceIndex = contexts ? contexts.indexOf(context) : -1;
32951 if (spliceIndex >= 0) {
32952 contexts.splice(contexts.indexOf(context), 1);
32953 }
32954 };
32955 return BufferTimeSubscriber;
32956}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__.Subscriber));
32957function dispatchBufferTimeSpanOnly(state) {
32958 var subscriber = state.subscriber;
32959 var prevContext = state.context;
32960 if (prevContext) {
32961 subscriber.closeContext(prevContext);
32962 }
32963 if (!subscriber.closed) {
32964 state.context = subscriber.openContext();
32965 state.context.closeAction = this.schedule(state, state.bufferTimeSpan);
32966 }
32967}
32968function dispatchBufferCreation(state) {
32969 var bufferCreationInterval = state.bufferCreationInterval, bufferTimeSpan = state.bufferTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler;
32970 var context = subscriber.openContext();
32971 var action = this;
32972 if (!subscriber.closed) {
32973 subscriber.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, { subscriber: subscriber, context: context }));
32974 action.schedule(state, bufferCreationInterval);
32975 }
32976}
32977function dispatchBufferClose(arg) {
32978 var subscriber = arg.subscriber, context = arg.context;
32979 subscriber.closeContext(context);
32980}
32981//# sourceMappingURL=bufferTime.js.map
32982
32983
32984/***/ }),
32985/* 274 */
32986/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32987
32988"use strict";
32989__webpack_require__.r(__webpack_exports__);
32990/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32991/* harmony export */ "bufferToggle": () => /* binding */ bufferToggle
32992/* harmony export */ });
32993/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
32994/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(174);
32995/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
32996/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(235);
32997/** PURE_IMPORTS_START tslib,_Subscription,_util_subscribeToResult,_OuterSubscriber PURE_IMPORTS_END */
32998
32999
33000
33001
33002function bufferToggle(openings, closingSelector) {
33003 return function bufferToggleOperatorFunction(source) {
33004 return source.lift(new BufferToggleOperator(openings, closingSelector));
33005 };
33006}
33007var BufferToggleOperator = /*@__PURE__*/ (function () {
33008 function BufferToggleOperator(openings, closingSelector) {
33009 this.openings = openings;
33010 this.closingSelector = closingSelector;
33011 }
33012 BufferToggleOperator.prototype.call = function (subscriber, source) {
33013 return source.subscribe(new BufferToggleSubscriber(subscriber, this.openings, this.closingSelector));
33014 };
33015 return BufferToggleOperator;
33016}());
33017var BufferToggleSubscriber = /*@__PURE__*/ (function (_super) {
33018 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BufferToggleSubscriber, _super);
33019 function BufferToggleSubscriber(destination, openings, closingSelector) {
33020 var _this = _super.call(this, destination) || this;
33021 _this.openings = openings;
33022 _this.closingSelector = closingSelector;
33023 _this.contexts = [];
33024 _this.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(_this, openings));
33025 return _this;
33026 }
33027 BufferToggleSubscriber.prototype._next = function (value) {
33028 var contexts = this.contexts;
33029 var len = contexts.length;
33030 for (var i = 0; i < len; i++) {
33031 contexts[i].buffer.push(value);
33032 }
33033 };
33034 BufferToggleSubscriber.prototype._error = function (err) {
33035 var contexts = this.contexts;
33036 while (contexts.length > 0) {
33037 var context_1 = contexts.shift();
33038 context_1.subscription.unsubscribe();
33039 context_1.buffer = null;
33040 context_1.subscription = null;
33041 }
33042 this.contexts = null;
33043 _super.prototype._error.call(this, err);
33044 };
33045 BufferToggleSubscriber.prototype._complete = function () {
33046 var contexts = this.contexts;
33047 while (contexts.length > 0) {
33048 var context_2 = contexts.shift();
33049 this.destination.next(context_2.buffer);
33050 context_2.subscription.unsubscribe();
33051 context_2.buffer = null;
33052 context_2.subscription = null;
33053 }
33054 this.contexts = null;
33055 _super.prototype._complete.call(this);
33056 };
33057 BufferToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33058 outerValue ? this.closeBuffer(outerValue) : this.openBuffer(innerValue);
33059 };
33060 BufferToggleSubscriber.prototype.notifyComplete = function (innerSub) {
33061 this.closeBuffer(innerSub.context);
33062 };
33063 BufferToggleSubscriber.prototype.openBuffer = function (value) {
33064 try {
33065 var closingSelector = this.closingSelector;
33066 var closingNotifier = closingSelector.call(this, value);
33067 if (closingNotifier) {
33068 this.trySubscribe(closingNotifier);
33069 }
33070 }
33071 catch (err) {
33072 this._error(err);
33073 }
33074 };
33075 BufferToggleSubscriber.prototype.closeBuffer = function (context) {
33076 var contexts = this.contexts;
33077 if (contexts && context) {
33078 var buffer = context.buffer, subscription = context.subscription;
33079 this.destination.next(buffer);
33080 contexts.splice(contexts.indexOf(context), 1);
33081 this.remove(subscription);
33082 subscription.unsubscribe();
33083 }
33084 };
33085 BufferToggleSubscriber.prototype.trySubscribe = function (closingNotifier) {
33086 var contexts = this.contexts;
33087 var buffer = [];
33088 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_2__.Subscription();
33089 var context = { buffer: buffer, subscription: subscription };
33090 contexts.push(context);
33091 var innerSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(this, closingNotifier, context);
33092 if (!innerSubscription || innerSubscription.closed) {
33093 this.closeBuffer(context);
33094 }
33095 else {
33096 innerSubscription.context = context;
33097 this.add(innerSubscription);
33098 subscription.add(innerSubscription);
33099 }
33100 };
33101 return BufferToggleSubscriber;
33102}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__.OuterSubscriber));
33103//# sourceMappingURL=bufferToggle.js.map
33104
33105
33106/***/ }),
33107/* 275 */
33108/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33109
33110"use strict";
33111__webpack_require__.r(__webpack_exports__);
33112/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33113/* harmony export */ "bufferWhen": () => /* binding */ bufferWhen
33114/* harmony export */ });
33115/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
33116/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
33117/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(235);
33118/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(226);
33119/** PURE_IMPORTS_START tslib,_Subscription,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33120
33121
33122
33123
33124function bufferWhen(closingSelector) {
33125 return function (source) {
33126 return source.lift(new BufferWhenOperator(closingSelector));
33127 };
33128}
33129var BufferWhenOperator = /*@__PURE__*/ (function () {
33130 function BufferWhenOperator(closingSelector) {
33131 this.closingSelector = closingSelector;
33132 }
33133 BufferWhenOperator.prototype.call = function (subscriber, source) {
33134 return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));
33135 };
33136 return BufferWhenOperator;
33137}());
33138var BufferWhenSubscriber = /*@__PURE__*/ (function (_super) {
33139 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BufferWhenSubscriber, _super);
33140 function BufferWhenSubscriber(destination, closingSelector) {
33141 var _this = _super.call(this, destination) || this;
33142 _this.closingSelector = closingSelector;
33143 _this.subscribing = false;
33144 _this.openBuffer();
33145 return _this;
33146 }
33147 BufferWhenSubscriber.prototype._next = function (value) {
33148 this.buffer.push(value);
33149 };
33150 BufferWhenSubscriber.prototype._complete = function () {
33151 var buffer = this.buffer;
33152 if (buffer) {
33153 this.destination.next(buffer);
33154 }
33155 _super.prototype._complete.call(this);
33156 };
33157 BufferWhenSubscriber.prototype._unsubscribe = function () {
33158 this.buffer = null;
33159 this.subscribing = false;
33160 };
33161 BufferWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33162 this.openBuffer();
33163 };
33164 BufferWhenSubscriber.prototype.notifyComplete = function () {
33165 if (this.subscribing) {
33166 this.complete();
33167 }
33168 else {
33169 this.openBuffer();
33170 }
33171 };
33172 BufferWhenSubscriber.prototype.openBuffer = function () {
33173 var closingSubscription = this.closingSubscription;
33174 if (closingSubscription) {
33175 this.remove(closingSubscription);
33176 closingSubscription.unsubscribe();
33177 }
33178 var buffer = this.buffer;
33179 if (this.buffer) {
33180 this.destination.next(buffer);
33181 }
33182 this.buffer = [];
33183 var closingNotifier;
33184 try {
33185 var closingSelector = this.closingSelector;
33186 closingNotifier = closingSelector();
33187 }
33188 catch (err) {
33189 return this.error(err);
33190 }
33191 closingSubscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
33192 this.closingSubscription = closingSubscription;
33193 this.add(closingSubscription);
33194 this.subscribing = true;
33195 closingSubscription.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__.subscribeToResult)(this, closingNotifier));
33196 this.subscribing = false;
33197 };
33198 return BufferWhenSubscriber;
33199}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__.OuterSubscriber));
33200//# sourceMappingURL=bufferWhen.js.map
33201
33202
33203/***/ }),
33204/* 276 */
33205/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33206
33207"use strict";
33208__webpack_require__.r(__webpack_exports__);
33209/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33210/* harmony export */ "catchError": () => /* binding */ catchError
33211/* harmony export */ });
33212/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
33213/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(235);
33214/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
33215/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(226);
33216/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33217
33218
33219
33220
33221function catchError(selector) {
33222 return function catchErrorOperatorFunction(source) {
33223 var operator = new CatchOperator(selector);
33224 var caught = source.lift(operator);
33225 return (operator.caught = caught);
33226 };
33227}
33228var CatchOperator = /*@__PURE__*/ (function () {
33229 function CatchOperator(selector) {
33230 this.selector = selector;
33231 }
33232 CatchOperator.prototype.call = function (subscriber, source) {
33233 return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));
33234 };
33235 return CatchOperator;
33236}());
33237var CatchSubscriber = /*@__PURE__*/ (function (_super) {
33238 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(CatchSubscriber, _super);
33239 function CatchSubscriber(destination, selector, caught) {
33240 var _this = _super.call(this, destination) || this;
33241 _this.selector = selector;
33242 _this.caught = caught;
33243 return _this;
33244 }
33245 CatchSubscriber.prototype.error = function (err) {
33246 if (!this.isStopped) {
33247 var result = void 0;
33248 try {
33249 result = this.selector(err, this.caught);
33250 }
33251 catch (err2) {
33252 _super.prototype.error.call(this, err2);
33253 return;
33254 }
33255 this._unsubscribeAndRecycle();
33256 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__.InnerSubscriber(this, undefined, undefined);
33257 this.add(innerSubscriber);
33258 var innerSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__.subscribeToResult)(this, result, undefined, undefined, innerSubscriber);
33259 if (innerSubscription !== innerSubscriber) {
33260 this.add(innerSubscription);
33261 }
33262 }
33263 };
33264 return CatchSubscriber;
33265}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__.OuterSubscriber));
33266//# sourceMappingURL=catchError.js.map
33267
33268
33269/***/ }),
33270/* 277 */
33271/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33272
33273"use strict";
33274__webpack_require__.r(__webpack_exports__);
33275/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33276/* harmony export */ "combineAll": () => /* binding */ combineAll
33277/* harmony export */ });
33278/* harmony import */ var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(225);
33279/** PURE_IMPORTS_START _observable_combineLatest PURE_IMPORTS_END */
33280
33281function combineAll(project) {
33282 return function (source) { return source.lift(new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__.CombineLatestOperator(project)); };
33283}
33284//# sourceMappingURL=combineAll.js.map
33285
33286
33287/***/ }),
33288/* 278 */
33289/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33290
33291"use strict";
33292__webpack_require__.r(__webpack_exports__);
33293/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33294/* harmony export */ "combineLatest": () => /* binding */ combineLatest
33295/* harmony export */ });
33296/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(177);
33297/* harmony import */ var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(225);
33298/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(240);
33299/** PURE_IMPORTS_START _util_isArray,_observable_combineLatest,_observable_from PURE_IMPORTS_END */
33300
33301
33302
33303var none = {};
33304function combineLatest() {
33305 var observables = [];
33306 for (var _i = 0; _i < arguments.length; _i++) {
33307 observables[_i] = arguments[_i];
33308 }
33309 var project = null;
33310 if (typeof observables[observables.length - 1] === 'function') {
33311 project = observables.pop();
33312 }
33313 if (observables.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_0__.isArray)(observables[0])) {
33314 observables = observables[0].slice();
33315 }
33316 return function (source) { return source.lift.call((0,_observable_from__WEBPACK_IMPORTED_MODULE_1__.from)([source].concat(observables)), new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_2__.CombineLatestOperator(project)); };
33317}
33318//# sourceMappingURL=combineLatest.js.map
33319
33320
33321/***/ }),
33322/* 279 */
33323/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33324
33325"use strict";
33326__webpack_require__.r(__webpack_exports__);
33327/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33328/* harmony export */ "concat": () => /* binding */ concat
33329/* harmony export */ });
33330/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(236);
33331/** PURE_IMPORTS_START _observable_concat PURE_IMPORTS_END */
33332
33333function concat() {
33334 var observables = [];
33335 for (var _i = 0; _i < arguments.length; _i++) {
33336 observables[_i] = arguments[_i];
33337 }
33338 return function (source) { return source.lift.call(_observable_concat__WEBPACK_IMPORTED_MODULE_0__.concat.apply(void 0, [source].concat(observables))); };
33339}
33340//# sourceMappingURL=concat.js.map
33341
33342
33343/***/ }),
33344/* 280 */
33345/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33346
33347"use strict";
33348__webpack_require__.r(__webpack_exports__);
33349/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33350/* harmony export */ "concatMap": () => /* binding */ concatMap
33351/* harmony export */ });
33352/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(239);
33353/** PURE_IMPORTS_START _mergeMap PURE_IMPORTS_END */
33354
33355function concatMap(project, resultSelector) {
33356 return (0,_mergeMap__WEBPACK_IMPORTED_MODULE_0__.mergeMap)(project, resultSelector, 1);
33357}
33358//# sourceMappingURL=concatMap.js.map
33359
33360
33361/***/ }),
33362/* 281 */
33363/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33364
33365"use strict";
33366__webpack_require__.r(__webpack_exports__);
33367/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33368/* harmony export */ "concatMapTo": () => /* binding */ concatMapTo
33369/* harmony export */ });
33370/* harmony import */ var _concatMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(280);
33371/** PURE_IMPORTS_START _concatMap PURE_IMPORTS_END */
33372
33373function concatMapTo(innerObservable, resultSelector) {
33374 return (0,_concatMap__WEBPACK_IMPORTED_MODULE_0__.concatMap)(function () { return innerObservable; }, resultSelector);
33375}
33376//# sourceMappingURL=concatMapTo.js.map
33377
33378
33379/***/ }),
33380/* 282 */
33381/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33382
33383"use strict";
33384__webpack_require__.r(__webpack_exports__);
33385/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33386/* harmony export */ "count": () => /* binding */ count
33387/* harmony export */ });
33388/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
33389/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
33390/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33391
33392
33393function count(predicate) {
33394 return function (source) { return source.lift(new CountOperator(predicate, source)); };
33395}
33396var CountOperator = /*@__PURE__*/ (function () {
33397 function CountOperator(predicate, source) {
33398 this.predicate = predicate;
33399 this.source = source;
33400 }
33401 CountOperator.prototype.call = function (subscriber, source) {
33402 return source.subscribe(new CountSubscriber(subscriber, this.predicate, this.source));
33403 };
33404 return CountOperator;
33405}());
33406var CountSubscriber = /*@__PURE__*/ (function (_super) {
33407 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(CountSubscriber, _super);
33408 function CountSubscriber(destination, predicate, source) {
33409 var _this = _super.call(this, destination) || this;
33410 _this.predicate = predicate;
33411 _this.source = source;
33412 _this.count = 0;
33413 _this.index = 0;
33414 return _this;
33415 }
33416 CountSubscriber.prototype._next = function (value) {
33417 if (this.predicate) {
33418 this._tryPredicate(value);
33419 }
33420 else {
33421 this.count++;
33422 }
33423 };
33424 CountSubscriber.prototype._tryPredicate = function (value) {
33425 var result;
33426 try {
33427 result = this.predicate(value, this.index++, this.source);
33428 }
33429 catch (err) {
33430 this.destination.error(err);
33431 return;
33432 }
33433 if (result) {
33434 this.count++;
33435 }
33436 };
33437 CountSubscriber.prototype._complete = function () {
33438 this.destination.next(this.count);
33439 this.destination.complete();
33440 };
33441 return CountSubscriber;
33442}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
33443//# sourceMappingURL=count.js.map
33444
33445
33446/***/ }),
33447/* 283 */
33448/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33449
33450"use strict";
33451__webpack_require__.r(__webpack_exports__);
33452/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33453/* harmony export */ "debounce": () => /* binding */ debounce
33454/* harmony export */ });
33455/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
33456/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(235);
33457/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
33458/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33459
33460
33461
33462function debounce(durationSelector) {
33463 return function (source) { return source.lift(new DebounceOperator(durationSelector)); };
33464}
33465var DebounceOperator = /*@__PURE__*/ (function () {
33466 function DebounceOperator(durationSelector) {
33467 this.durationSelector = durationSelector;
33468 }
33469 DebounceOperator.prototype.call = function (subscriber, source) {
33470 return source.subscribe(new DebounceSubscriber(subscriber, this.durationSelector));
33471 };
33472 return DebounceOperator;
33473}());
33474var DebounceSubscriber = /*@__PURE__*/ (function (_super) {
33475 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DebounceSubscriber, _super);
33476 function DebounceSubscriber(destination, durationSelector) {
33477 var _this = _super.call(this, destination) || this;
33478 _this.durationSelector = durationSelector;
33479 _this.hasValue = false;
33480 _this.durationSubscription = null;
33481 return _this;
33482 }
33483 DebounceSubscriber.prototype._next = function (value) {
33484 try {
33485 var result = this.durationSelector.call(this, value);
33486 if (result) {
33487 this._tryNext(value, result);
33488 }
33489 }
33490 catch (err) {
33491 this.destination.error(err);
33492 }
33493 };
33494 DebounceSubscriber.prototype._complete = function () {
33495 this.emitValue();
33496 this.destination.complete();
33497 };
33498 DebounceSubscriber.prototype._tryNext = function (value, duration) {
33499 var subscription = this.durationSubscription;
33500 this.value = value;
33501 this.hasValue = true;
33502 if (subscription) {
33503 subscription.unsubscribe();
33504 this.remove(subscription);
33505 }
33506 subscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(this, duration);
33507 if (subscription && !subscription.closed) {
33508 this.add(this.durationSubscription = subscription);
33509 }
33510 };
33511 DebounceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33512 this.emitValue();
33513 };
33514 DebounceSubscriber.prototype.notifyComplete = function () {
33515 this.emitValue();
33516 };
33517 DebounceSubscriber.prototype.emitValue = function () {
33518 if (this.hasValue) {
33519 var value = this.value;
33520 var subscription = this.durationSubscription;
33521 if (subscription) {
33522 this.durationSubscription = null;
33523 subscription.unsubscribe();
33524 this.remove(subscription);
33525 }
33526 this.value = null;
33527 this.hasValue = false;
33528 _super.prototype._next.call(this, value);
33529 }
33530 };
33531 return DebounceSubscriber;
33532}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
33533//# sourceMappingURL=debounce.js.map
33534
33535
33536/***/ }),
33537/* 284 */
33538/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33539
33540"use strict";
33541__webpack_require__.r(__webpack_exports__);
33542/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33543/* harmony export */ "debounceTime": () => /* binding */ debounceTime
33544/* harmony export */ });
33545/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
33546/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(168);
33547/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
33548/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async PURE_IMPORTS_END */
33549
33550
33551
33552function debounceTime(dueTime, scheduler) {
33553 if (scheduler === void 0) {
33554 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
33555 }
33556 return function (source) { return source.lift(new DebounceTimeOperator(dueTime, scheduler)); };
33557}
33558var DebounceTimeOperator = /*@__PURE__*/ (function () {
33559 function DebounceTimeOperator(dueTime, scheduler) {
33560 this.dueTime = dueTime;
33561 this.scheduler = scheduler;
33562 }
33563 DebounceTimeOperator.prototype.call = function (subscriber, source) {
33564 return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));
33565 };
33566 return DebounceTimeOperator;
33567}());
33568var DebounceTimeSubscriber = /*@__PURE__*/ (function (_super) {
33569 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DebounceTimeSubscriber, _super);
33570 function DebounceTimeSubscriber(destination, dueTime, scheduler) {
33571 var _this = _super.call(this, destination) || this;
33572 _this.dueTime = dueTime;
33573 _this.scheduler = scheduler;
33574 _this.debouncedSubscription = null;
33575 _this.lastValue = null;
33576 _this.hasValue = false;
33577 return _this;
33578 }
33579 DebounceTimeSubscriber.prototype._next = function (value) {
33580 this.clearDebounce();
33581 this.lastValue = value;
33582 this.hasValue = true;
33583 this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));
33584 };
33585 DebounceTimeSubscriber.prototype._complete = function () {
33586 this.debouncedNext();
33587 this.destination.complete();
33588 };
33589 DebounceTimeSubscriber.prototype.debouncedNext = function () {
33590 this.clearDebounce();
33591 if (this.hasValue) {
33592 var lastValue = this.lastValue;
33593 this.lastValue = null;
33594 this.hasValue = false;
33595 this.destination.next(lastValue);
33596 }
33597 };
33598 DebounceTimeSubscriber.prototype.clearDebounce = function () {
33599 var debouncedSubscription = this.debouncedSubscription;
33600 if (debouncedSubscription !== null) {
33601 this.remove(debouncedSubscription);
33602 debouncedSubscription.unsubscribe();
33603 this.debouncedSubscription = null;
33604 }
33605 };
33606 return DebounceTimeSubscriber;
33607}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
33608function dispatchNext(subscriber) {
33609 subscriber.debouncedNext();
33610}
33611//# sourceMappingURL=debounceTime.js.map
33612
33613
33614/***/ }),
33615/* 285 */
33616/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33617
33618"use strict";
33619__webpack_require__.r(__webpack_exports__);
33620/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33621/* harmony export */ "defaultIfEmpty": () => /* binding */ defaultIfEmpty
33622/* harmony export */ });
33623/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
33624/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
33625/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33626
33627
33628function defaultIfEmpty(defaultValue) {
33629 if (defaultValue === void 0) {
33630 defaultValue = null;
33631 }
33632 return function (source) { return source.lift(new DefaultIfEmptyOperator(defaultValue)); };
33633}
33634var DefaultIfEmptyOperator = /*@__PURE__*/ (function () {
33635 function DefaultIfEmptyOperator(defaultValue) {
33636 this.defaultValue = defaultValue;
33637 }
33638 DefaultIfEmptyOperator.prototype.call = function (subscriber, source) {
33639 return source.subscribe(new DefaultIfEmptySubscriber(subscriber, this.defaultValue));
33640 };
33641 return DefaultIfEmptyOperator;
33642}());
33643var DefaultIfEmptySubscriber = /*@__PURE__*/ (function (_super) {
33644 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DefaultIfEmptySubscriber, _super);
33645 function DefaultIfEmptySubscriber(destination, defaultValue) {
33646 var _this = _super.call(this, destination) || this;
33647 _this.defaultValue = defaultValue;
33648 _this.isEmpty = true;
33649 return _this;
33650 }
33651 DefaultIfEmptySubscriber.prototype._next = function (value) {
33652 this.isEmpty = false;
33653 this.destination.next(value);
33654 };
33655 DefaultIfEmptySubscriber.prototype._complete = function () {
33656 if (this.isEmpty) {
33657 this.destination.next(this.defaultValue);
33658 }
33659 this.destination.complete();
33660 };
33661 return DefaultIfEmptySubscriber;
33662}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
33663//# sourceMappingURL=defaultIfEmpty.js.map
33664
33665
33666/***/ }),
33667/* 286 */
33668/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33669
33670"use strict";
33671__webpack_require__.r(__webpack_exports__);
33672/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33673/* harmony export */ "delay": () => /* binding */ delay
33674/* harmony export */ });
33675/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
33676/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
33677/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(287);
33678/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(168);
33679/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(192);
33680/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_Subscriber,_Notification PURE_IMPORTS_END */
33681
33682
33683
33684
33685
33686function delay(delay, scheduler) {
33687 if (scheduler === void 0) {
33688 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
33689 }
33690 var absoluteDelay = (0,_util_isDate__WEBPACK_IMPORTED_MODULE_2__.isDate)(delay);
33691 var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);
33692 return function (source) { return source.lift(new DelayOperator(delayFor, scheduler)); };
33693}
33694var DelayOperator = /*@__PURE__*/ (function () {
33695 function DelayOperator(delay, scheduler) {
33696 this.delay = delay;
33697 this.scheduler = scheduler;
33698 }
33699 DelayOperator.prototype.call = function (subscriber, source) {
33700 return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));
33701 };
33702 return DelayOperator;
33703}());
33704var DelaySubscriber = /*@__PURE__*/ (function (_super) {
33705 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DelaySubscriber, _super);
33706 function DelaySubscriber(destination, delay, scheduler) {
33707 var _this = _super.call(this, destination) || this;
33708 _this.delay = delay;
33709 _this.scheduler = scheduler;
33710 _this.queue = [];
33711 _this.active = false;
33712 _this.errored = false;
33713 return _this;
33714 }
33715 DelaySubscriber.dispatch = function (state) {
33716 var source = state.source;
33717 var queue = source.queue;
33718 var scheduler = state.scheduler;
33719 var destination = state.destination;
33720 while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {
33721 queue.shift().notification.observe(destination);
33722 }
33723 if (queue.length > 0) {
33724 var delay_1 = Math.max(0, queue[0].time - scheduler.now());
33725 this.schedule(state, delay_1);
33726 }
33727 else {
33728 this.unsubscribe();
33729 source.active = false;
33730 }
33731 };
33732 DelaySubscriber.prototype._schedule = function (scheduler) {
33733 this.active = true;
33734 var destination = this.destination;
33735 destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {
33736 source: this, destination: this.destination, scheduler: scheduler
33737 }));
33738 };
33739 DelaySubscriber.prototype.scheduleNotification = function (notification) {
33740 if (this.errored === true) {
33741 return;
33742 }
33743 var scheduler = this.scheduler;
33744 var message = new DelayMessage(scheduler.now() + this.delay, notification);
33745 this.queue.push(message);
33746 if (this.active === false) {
33747 this._schedule(scheduler);
33748 }
33749 };
33750 DelaySubscriber.prototype._next = function (value) {
33751 this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_3__.Notification.createNext(value));
33752 };
33753 DelaySubscriber.prototype._error = function (err) {
33754 this.errored = true;
33755 this.queue = [];
33756 this.destination.error(err);
33757 this.unsubscribe();
33758 };
33759 DelaySubscriber.prototype._complete = function () {
33760 this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_3__.Notification.createComplete());
33761 this.unsubscribe();
33762 };
33763 return DelaySubscriber;
33764}(_Subscriber__WEBPACK_IMPORTED_MODULE_4__.Subscriber));
33765var DelayMessage = /*@__PURE__*/ (function () {
33766 function DelayMessage(time, notification) {
33767 this.time = time;
33768 this.notification = notification;
33769 }
33770 return DelayMessage;
33771}());
33772//# sourceMappingURL=delay.js.map
33773
33774
33775/***/ }),
33776/* 287 */
33777/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33778
33779"use strict";
33780__webpack_require__.r(__webpack_exports__);
33781/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33782/* harmony export */ "isDate": () => /* binding */ isDate
33783/* harmony export */ });
33784/** PURE_IMPORTS_START PURE_IMPORTS_END */
33785function isDate(value) {
33786 return value instanceof Date && !isNaN(+value);
33787}
33788//# sourceMappingURL=isDate.js.map
33789
33790
33791/***/ }),
33792/* 288 */
33793/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33794
33795"use strict";
33796__webpack_require__.r(__webpack_exports__);
33797/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33798/* harmony export */ "delayWhen": () => /* binding */ delayWhen
33799/* harmony export */ });
33800/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
33801/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(168);
33802/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(166);
33803/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(235);
33804/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
33805/** PURE_IMPORTS_START tslib,_Subscriber,_Observable,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33806
33807
33808
33809
33810
33811function delayWhen(delayDurationSelector, subscriptionDelay) {
33812 if (subscriptionDelay) {
33813 return function (source) {
33814 return new SubscriptionDelayObservable(source, subscriptionDelay)
33815 .lift(new DelayWhenOperator(delayDurationSelector));
33816 };
33817 }
33818 return function (source) { return source.lift(new DelayWhenOperator(delayDurationSelector)); };
33819}
33820var DelayWhenOperator = /*@__PURE__*/ (function () {
33821 function DelayWhenOperator(delayDurationSelector) {
33822 this.delayDurationSelector = delayDurationSelector;
33823 }
33824 DelayWhenOperator.prototype.call = function (subscriber, source) {
33825 return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector));
33826 };
33827 return DelayWhenOperator;
33828}());
33829var DelayWhenSubscriber = /*@__PURE__*/ (function (_super) {
33830 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DelayWhenSubscriber, _super);
33831 function DelayWhenSubscriber(destination, delayDurationSelector) {
33832 var _this = _super.call(this, destination) || this;
33833 _this.delayDurationSelector = delayDurationSelector;
33834 _this.completed = false;
33835 _this.delayNotifierSubscriptions = [];
33836 _this.index = 0;
33837 return _this;
33838 }
33839 DelayWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33840 this.destination.next(outerValue);
33841 this.removeSubscription(innerSub);
33842 this.tryComplete();
33843 };
33844 DelayWhenSubscriber.prototype.notifyError = function (error, innerSub) {
33845 this._error(error);
33846 };
33847 DelayWhenSubscriber.prototype.notifyComplete = function (innerSub) {
33848 var value = this.removeSubscription(innerSub);
33849 if (value) {
33850 this.destination.next(value);
33851 }
33852 this.tryComplete();
33853 };
33854 DelayWhenSubscriber.prototype._next = function (value) {
33855 var index = this.index++;
33856 try {
33857 var delayNotifier = this.delayDurationSelector(value, index);
33858 if (delayNotifier) {
33859 this.tryDelay(delayNotifier, value);
33860 }
33861 }
33862 catch (err) {
33863 this.destination.error(err);
33864 }
33865 };
33866 DelayWhenSubscriber.prototype._complete = function () {
33867 this.completed = true;
33868 this.tryComplete();
33869 this.unsubscribe();
33870 };
33871 DelayWhenSubscriber.prototype.removeSubscription = function (subscription) {
33872 subscription.unsubscribe();
33873 var subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription);
33874 if (subscriptionIdx !== -1) {
33875 this.delayNotifierSubscriptions.splice(subscriptionIdx, 1);
33876 }
33877 return subscription.outerValue;
33878 };
33879 DelayWhenSubscriber.prototype.tryDelay = function (delayNotifier, value) {
33880 var notifierSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(this, delayNotifier, value);
33881 if (notifierSubscription && !notifierSubscription.closed) {
33882 var destination = this.destination;
33883 destination.add(notifierSubscription);
33884 this.delayNotifierSubscriptions.push(notifierSubscription);
33885 }
33886 };
33887 DelayWhenSubscriber.prototype.tryComplete = function () {
33888 if (this.completed && this.delayNotifierSubscriptions.length === 0) {
33889 this.destination.complete();
33890 }
33891 };
33892 return DelayWhenSubscriber;
33893}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
33894var SubscriptionDelayObservable = /*@__PURE__*/ (function (_super) {
33895 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SubscriptionDelayObservable, _super);
33896 function SubscriptionDelayObservable(source, subscriptionDelay) {
33897 var _this = _super.call(this) || this;
33898 _this.source = source;
33899 _this.subscriptionDelay = subscriptionDelay;
33900 return _this;
33901 }
33902 SubscriptionDelayObservable.prototype._subscribe = function (subscriber) {
33903 this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source));
33904 };
33905 return SubscriptionDelayObservable;
33906}(_Observable__WEBPACK_IMPORTED_MODULE_3__.Observable));
33907var SubscriptionDelaySubscriber = /*@__PURE__*/ (function (_super) {
33908 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SubscriptionDelaySubscriber, _super);
33909 function SubscriptionDelaySubscriber(parent, source) {
33910 var _this = _super.call(this) || this;
33911 _this.parent = parent;
33912 _this.source = source;
33913 _this.sourceSubscribed = false;
33914 return _this;
33915 }
33916 SubscriptionDelaySubscriber.prototype._next = function (unused) {
33917 this.subscribeToSource();
33918 };
33919 SubscriptionDelaySubscriber.prototype._error = function (err) {
33920 this.unsubscribe();
33921 this.parent.error(err);
33922 };
33923 SubscriptionDelaySubscriber.prototype._complete = function () {
33924 this.unsubscribe();
33925 this.subscribeToSource();
33926 };
33927 SubscriptionDelaySubscriber.prototype.subscribeToSource = function () {
33928 if (!this.sourceSubscribed) {
33929 this.sourceSubscribed = true;
33930 this.unsubscribe();
33931 this.source.subscribe(this.parent);
33932 }
33933 };
33934 return SubscriptionDelaySubscriber;
33935}(_Subscriber__WEBPACK_IMPORTED_MODULE_4__.Subscriber));
33936//# sourceMappingURL=delayWhen.js.map
33937
33938
33939/***/ }),
33940/* 289 */
33941/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33942
33943"use strict";
33944__webpack_require__.r(__webpack_exports__);
33945/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33946/* harmony export */ "dematerialize": () => /* binding */ dematerialize
33947/* harmony export */ });
33948/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
33949/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
33950/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33951
33952
33953function dematerialize() {
33954 return function dematerializeOperatorFunction(source) {
33955 return source.lift(new DeMaterializeOperator());
33956 };
33957}
33958var DeMaterializeOperator = /*@__PURE__*/ (function () {
33959 function DeMaterializeOperator() {
33960 }
33961 DeMaterializeOperator.prototype.call = function (subscriber, source) {
33962 return source.subscribe(new DeMaterializeSubscriber(subscriber));
33963 };
33964 return DeMaterializeOperator;
33965}());
33966var DeMaterializeSubscriber = /*@__PURE__*/ (function (_super) {
33967 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DeMaterializeSubscriber, _super);
33968 function DeMaterializeSubscriber(destination) {
33969 return _super.call(this, destination) || this;
33970 }
33971 DeMaterializeSubscriber.prototype._next = function (value) {
33972 value.observe(this.destination);
33973 };
33974 return DeMaterializeSubscriber;
33975}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
33976//# sourceMappingURL=dematerialize.js.map
33977
33978
33979/***/ }),
33980/* 290 */
33981/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33982
33983"use strict";
33984__webpack_require__.r(__webpack_exports__);
33985/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33986/* harmony export */ "distinct": () => /* binding */ distinct,
33987/* harmony export */ "DistinctSubscriber": () => /* binding */ DistinctSubscriber
33988/* harmony export */ });
33989/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
33990/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(235);
33991/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
33992/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33993
33994
33995
33996function distinct(keySelector, flushes) {
33997 return function (source) { return source.lift(new DistinctOperator(keySelector, flushes)); };
33998}
33999var DistinctOperator = /*@__PURE__*/ (function () {
34000 function DistinctOperator(keySelector, flushes) {
34001 this.keySelector = keySelector;
34002 this.flushes = flushes;
34003 }
34004 DistinctOperator.prototype.call = function (subscriber, source) {
34005 return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
34006 };
34007 return DistinctOperator;
34008}());
34009var DistinctSubscriber = /*@__PURE__*/ (function (_super) {
34010 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DistinctSubscriber, _super);
34011 function DistinctSubscriber(destination, keySelector, flushes) {
34012 var _this = _super.call(this, destination) || this;
34013 _this.keySelector = keySelector;
34014 _this.values = new Set();
34015 if (flushes) {
34016 _this.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(_this, flushes));
34017 }
34018 return _this;
34019 }
34020 DistinctSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
34021 this.values.clear();
34022 };
34023 DistinctSubscriber.prototype.notifyError = function (error, innerSub) {
34024 this._error(error);
34025 };
34026 DistinctSubscriber.prototype._next = function (value) {
34027 if (this.keySelector) {
34028 this._useKeySelector(value);
34029 }
34030 else {
34031 this._finalizeNext(value, value);
34032 }
34033 };
34034 DistinctSubscriber.prototype._useKeySelector = function (value) {
34035 var key;
34036 var destination = this.destination;
34037 try {
34038 key = this.keySelector(value);
34039 }
34040 catch (err) {
34041 destination.error(err);
34042 return;
34043 }
34044 this._finalizeNext(key, value);
34045 };
34046 DistinctSubscriber.prototype._finalizeNext = function (key, value) {
34047 var values = this.values;
34048 if (!values.has(key)) {
34049 values.add(key);
34050 this.destination.next(value);
34051 }
34052 };
34053 return DistinctSubscriber;
34054}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
34055
34056//# sourceMappingURL=distinct.js.map
34057
34058
34059/***/ }),
34060/* 291 */
34061/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34062
34063"use strict";
34064__webpack_require__.r(__webpack_exports__);
34065/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34066/* harmony export */ "distinctUntilChanged": () => /* binding */ distinctUntilChanged
34067/* harmony export */ });
34068/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
34069/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
34070/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34071
34072
34073function distinctUntilChanged(compare, keySelector) {
34074 return function (source) { return source.lift(new DistinctUntilChangedOperator(compare, keySelector)); };
34075}
34076var DistinctUntilChangedOperator = /*@__PURE__*/ (function () {
34077 function DistinctUntilChangedOperator(compare, keySelector) {
34078 this.compare = compare;
34079 this.keySelector = keySelector;
34080 }
34081 DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {
34082 return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));
34083 };
34084 return DistinctUntilChangedOperator;
34085}());
34086var DistinctUntilChangedSubscriber = /*@__PURE__*/ (function (_super) {
34087 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DistinctUntilChangedSubscriber, _super);
34088 function DistinctUntilChangedSubscriber(destination, compare, keySelector) {
34089 var _this = _super.call(this, destination) || this;
34090 _this.keySelector = keySelector;
34091 _this.hasKey = false;
34092 if (typeof compare === 'function') {
34093 _this.compare = compare;
34094 }
34095 return _this;
34096 }
34097 DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {
34098 return x === y;
34099 };
34100 DistinctUntilChangedSubscriber.prototype._next = function (value) {
34101 var key;
34102 try {
34103 var keySelector = this.keySelector;
34104 key = keySelector ? keySelector(value) : value;
34105 }
34106 catch (err) {
34107 return this.destination.error(err);
34108 }
34109 var result = false;
34110 if (this.hasKey) {
34111 try {
34112 var compare = this.compare;
34113 result = compare(this.key, key);
34114 }
34115 catch (err) {
34116 return this.destination.error(err);
34117 }
34118 }
34119 else {
34120 this.hasKey = true;
34121 }
34122 if (!result) {
34123 this.key = key;
34124 this.destination.next(value);
34125 }
34126 };
34127 return DistinctUntilChangedSubscriber;
34128}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
34129//# sourceMappingURL=distinctUntilChanged.js.map
34130
34131
34132/***/ }),
34133/* 292 */
34134/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34135
34136"use strict";
34137__webpack_require__.r(__webpack_exports__);
34138/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34139/* harmony export */ "distinctUntilKeyChanged": () => /* binding */ distinctUntilKeyChanged
34140/* harmony export */ });
34141/* harmony import */ var _distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(291);
34142/** PURE_IMPORTS_START _distinctUntilChanged PURE_IMPORTS_END */
34143
34144function distinctUntilKeyChanged(key, compare) {
34145 return (0,_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__.distinctUntilChanged)(function (x, y) { return compare ? compare(x[key], y[key]) : x[key] === y[key]; });
34146}
34147//# sourceMappingURL=distinctUntilKeyChanged.js.map
34148
34149
34150/***/ }),
34151/* 293 */
34152/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34153
34154"use strict";
34155__webpack_require__.r(__webpack_exports__);
34156/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34157/* harmony export */ "elementAt": () => /* binding */ elementAt
34158/* harmony export */ });
34159/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(219);
34160/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(260);
34161/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(295);
34162/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(285);
34163/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(294);
34164/** PURE_IMPORTS_START _util_ArgumentOutOfRangeError,_filter,_throwIfEmpty,_defaultIfEmpty,_take PURE_IMPORTS_END */
34165
34166
34167
34168
34169
34170function elementAt(index, defaultValue) {
34171 if (index < 0) {
34172 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__.ArgumentOutOfRangeError();
34173 }
34174 var hasDefaultValue = arguments.length >= 2;
34175 return function (source) {
34176 return source.pipe((0,_filter__WEBPACK_IMPORTED_MODULE_1__.filter)(function (v, i) { return i === index; }), (0,_take__WEBPACK_IMPORTED_MODULE_2__.take)(1), hasDefaultValue
34177 ? (0,_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__.defaultIfEmpty)(defaultValue)
34178 : (0,_throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__.throwIfEmpty)(function () { return new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__.ArgumentOutOfRangeError(); }));
34179 };
34180}
34181//# sourceMappingURL=elementAt.js.map
34182
34183
34184/***/ }),
34185/* 294 */
34186/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34187
34188"use strict";
34189__webpack_require__.r(__webpack_exports__);
34190/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34191/* harmony export */ "take": () => /* binding */ take
34192/* harmony export */ });
34193/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
34194/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(168);
34195/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(219);
34196/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(199);
34197/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */
34198
34199
34200
34201
34202function take(count) {
34203 return function (source) {
34204 if (count === 0) {
34205 return (0,_observable_empty__WEBPACK_IMPORTED_MODULE_1__.empty)();
34206 }
34207 else {
34208 return source.lift(new TakeOperator(count));
34209 }
34210 };
34211}
34212var TakeOperator = /*@__PURE__*/ (function () {
34213 function TakeOperator(total) {
34214 this.total = total;
34215 if (this.total < 0) {
34216 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__.ArgumentOutOfRangeError;
34217 }
34218 }
34219 TakeOperator.prototype.call = function (subscriber, source) {
34220 return source.subscribe(new TakeSubscriber(subscriber, this.total));
34221 };
34222 return TakeOperator;
34223}());
34224var TakeSubscriber = /*@__PURE__*/ (function (_super) {
34225 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(TakeSubscriber, _super);
34226 function TakeSubscriber(destination, total) {
34227 var _this = _super.call(this, destination) || this;
34228 _this.total = total;
34229 _this.count = 0;
34230 return _this;
34231 }
34232 TakeSubscriber.prototype._next = function (value) {
34233 var total = this.total;
34234 var count = ++this.count;
34235 if (count <= total) {
34236 this.destination.next(value);
34237 if (count === total) {
34238 this.destination.complete();
34239 this.unsubscribe();
34240 }
34241 }
34242 };
34243 return TakeSubscriber;
34244}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__.Subscriber));
34245//# sourceMappingURL=take.js.map
34246
34247
34248/***/ }),
34249/* 295 */
34250/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34251
34252"use strict";
34253__webpack_require__.r(__webpack_exports__);
34254/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34255/* harmony export */ "throwIfEmpty": () => /* binding */ throwIfEmpty
34256/* harmony export */ });
34257/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
34258/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(220);
34259/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
34260/** PURE_IMPORTS_START tslib,_util_EmptyError,_Subscriber PURE_IMPORTS_END */
34261
34262
34263
34264function throwIfEmpty(errorFactory) {
34265 if (errorFactory === void 0) {
34266 errorFactory = defaultErrorFactory;
34267 }
34268 return function (source) {
34269 return source.lift(new ThrowIfEmptyOperator(errorFactory));
34270 };
34271}
34272var ThrowIfEmptyOperator = /*@__PURE__*/ (function () {
34273 function ThrowIfEmptyOperator(errorFactory) {
34274 this.errorFactory = errorFactory;
34275 }
34276 ThrowIfEmptyOperator.prototype.call = function (subscriber, source) {
34277 return source.subscribe(new ThrowIfEmptySubscriber(subscriber, this.errorFactory));
34278 };
34279 return ThrowIfEmptyOperator;
34280}());
34281var ThrowIfEmptySubscriber = /*@__PURE__*/ (function (_super) {
34282 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ThrowIfEmptySubscriber, _super);
34283 function ThrowIfEmptySubscriber(destination, errorFactory) {
34284 var _this = _super.call(this, destination) || this;
34285 _this.errorFactory = errorFactory;
34286 _this.hasValue = false;
34287 return _this;
34288 }
34289 ThrowIfEmptySubscriber.prototype._next = function (value) {
34290 this.hasValue = true;
34291 this.destination.next(value);
34292 };
34293 ThrowIfEmptySubscriber.prototype._complete = function () {
34294 if (!this.hasValue) {
34295 var err = void 0;
34296 try {
34297 err = this.errorFactory();
34298 }
34299 catch (e) {
34300 err = e;
34301 }
34302 this.destination.error(err);
34303 }
34304 else {
34305 return this.destination.complete();
34306 }
34307 };
34308 return ThrowIfEmptySubscriber;
34309}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
34310function defaultErrorFactory() {
34311 return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_2__.EmptyError();
34312}
34313//# sourceMappingURL=throwIfEmpty.js.map
34314
34315
34316/***/ }),
34317/* 296 */
34318/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34319
34320"use strict";
34321__webpack_require__.r(__webpack_exports__);
34322/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34323/* harmony export */ "endWith": () => /* binding */ endWith
34324/* harmony export */ });
34325/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(236);
34326/* harmony import */ var _observable_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(193);
34327/** PURE_IMPORTS_START _observable_concat,_observable_of PURE_IMPORTS_END */
34328
34329
34330function endWith() {
34331 var array = [];
34332 for (var _i = 0; _i < arguments.length; _i++) {
34333 array[_i] = arguments[_i];
34334 }
34335 return function (source) { return (0,_observable_concat__WEBPACK_IMPORTED_MODULE_0__.concat)(source, _observable_of__WEBPACK_IMPORTED_MODULE_1__.of.apply(void 0, array)); };
34336}
34337//# sourceMappingURL=endWith.js.map
34338
34339
34340/***/ }),
34341/* 297 */
34342/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34343
34344"use strict";
34345__webpack_require__.r(__webpack_exports__);
34346/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34347/* harmony export */ "every": () => /* binding */ every
34348/* harmony export */ });
34349/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
34350/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
34351/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34352
34353
34354function every(predicate, thisArg) {
34355 return function (source) { return source.lift(new EveryOperator(predicate, thisArg, source)); };
34356}
34357var EveryOperator = /*@__PURE__*/ (function () {
34358 function EveryOperator(predicate, thisArg, source) {
34359 this.predicate = predicate;
34360 this.thisArg = thisArg;
34361 this.source = source;
34362 }
34363 EveryOperator.prototype.call = function (observer, source) {
34364 return source.subscribe(new EverySubscriber(observer, this.predicate, this.thisArg, this.source));
34365 };
34366 return EveryOperator;
34367}());
34368var EverySubscriber = /*@__PURE__*/ (function (_super) {
34369 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(EverySubscriber, _super);
34370 function EverySubscriber(destination, predicate, thisArg, source) {
34371 var _this = _super.call(this, destination) || this;
34372 _this.predicate = predicate;
34373 _this.thisArg = thisArg;
34374 _this.source = source;
34375 _this.index = 0;
34376 _this.thisArg = thisArg || _this;
34377 return _this;
34378 }
34379 EverySubscriber.prototype.notifyComplete = function (everyValueMatch) {
34380 this.destination.next(everyValueMatch);
34381 this.destination.complete();
34382 };
34383 EverySubscriber.prototype._next = function (value) {
34384 var result = false;
34385 try {
34386 result = this.predicate.call(this.thisArg, value, this.index++, this.source);
34387 }
34388 catch (err) {
34389 this.destination.error(err);
34390 return;
34391 }
34392 if (!result) {
34393 this.notifyComplete(false);
34394 }
34395 };
34396 EverySubscriber.prototype._complete = function () {
34397 this.notifyComplete(true);
34398 };
34399 return EverySubscriber;
34400}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
34401//# sourceMappingURL=every.js.map
34402
34403
34404/***/ }),
34405/* 298 */
34406/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34407
34408"use strict";
34409__webpack_require__.r(__webpack_exports__);
34410/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34411/* harmony export */ "exhaust": () => /* binding */ exhaust
34412/* harmony export */ });
34413/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
34414/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(235);
34415/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
34416/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
34417
34418
34419
34420function exhaust() {
34421 return function (source) { return source.lift(new SwitchFirstOperator()); };
34422}
34423var SwitchFirstOperator = /*@__PURE__*/ (function () {
34424 function SwitchFirstOperator() {
34425 }
34426 SwitchFirstOperator.prototype.call = function (subscriber, source) {
34427 return source.subscribe(new SwitchFirstSubscriber(subscriber));
34428 };
34429 return SwitchFirstOperator;
34430}());
34431var SwitchFirstSubscriber = /*@__PURE__*/ (function (_super) {
34432 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SwitchFirstSubscriber, _super);
34433 function SwitchFirstSubscriber(destination) {
34434 var _this = _super.call(this, destination) || this;
34435 _this.hasCompleted = false;
34436 _this.hasSubscription = false;
34437 return _this;
34438 }
34439 SwitchFirstSubscriber.prototype._next = function (value) {
34440 if (!this.hasSubscription) {
34441 this.hasSubscription = true;
34442 this.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(this, value));
34443 }
34444 };
34445 SwitchFirstSubscriber.prototype._complete = function () {
34446 this.hasCompleted = true;
34447 if (!this.hasSubscription) {
34448 this.destination.complete();
34449 }
34450 };
34451 SwitchFirstSubscriber.prototype.notifyComplete = function (innerSub) {
34452 this.remove(innerSub);
34453 this.hasSubscription = false;
34454 if (this.hasCompleted) {
34455 this.destination.complete();
34456 }
34457 };
34458 return SwitchFirstSubscriber;
34459}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
34460//# sourceMappingURL=exhaust.js.map
34461
34462
34463/***/ }),
34464/* 299 */
34465/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34466
34467"use strict";
34468__webpack_require__.r(__webpack_exports__);
34469/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34470/* harmony export */ "exhaustMap": () => /* binding */ exhaustMap
34471/* harmony export */ });
34472/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
34473/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(235);
34474/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
34475/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(226);
34476/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(223);
34477/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(240);
34478/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult,_map,_observable_from PURE_IMPORTS_END */
34479
34480
34481
34482
34483
34484
34485function exhaustMap(project, resultSelector) {
34486 if (resultSelector) {
34487 return function (source) { return source.pipe(exhaustMap(function (a, i) { return (0,_observable_from__WEBPACK_IMPORTED_MODULE_1__.from)(project(a, i)).pipe((0,_map__WEBPACK_IMPORTED_MODULE_2__.map)(function (b, ii) { return resultSelector(a, b, i, ii); })); })); };
34488 }
34489 return function (source) {
34490 return source.lift(new ExhaustMapOperator(project));
34491 };
34492}
34493var ExhaustMapOperator = /*@__PURE__*/ (function () {
34494 function ExhaustMapOperator(project) {
34495 this.project = project;
34496 }
34497 ExhaustMapOperator.prototype.call = function (subscriber, source) {
34498 return source.subscribe(new ExhaustMapSubscriber(subscriber, this.project));
34499 };
34500 return ExhaustMapOperator;
34501}());
34502var ExhaustMapSubscriber = /*@__PURE__*/ (function (_super) {
34503 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ExhaustMapSubscriber, _super);
34504 function ExhaustMapSubscriber(destination, project) {
34505 var _this = _super.call(this, destination) || this;
34506 _this.project = project;
34507 _this.hasSubscription = false;
34508 _this.hasCompleted = false;
34509 _this.index = 0;
34510 return _this;
34511 }
34512 ExhaustMapSubscriber.prototype._next = function (value) {
34513 if (!this.hasSubscription) {
34514 this.tryNext(value);
34515 }
34516 };
34517 ExhaustMapSubscriber.prototype.tryNext = function (value) {
34518 var result;
34519 var index = this.index++;
34520 try {
34521 result = this.project(value, index);
34522 }
34523 catch (err) {
34524 this.destination.error(err);
34525 return;
34526 }
34527 this.hasSubscription = true;
34528 this._innerSub(result, value, index);
34529 };
34530 ExhaustMapSubscriber.prototype._innerSub = function (result, value, index) {
34531 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__.InnerSubscriber(this, value, index);
34532 var destination = this.destination;
34533 destination.add(innerSubscriber);
34534 var innerSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__.subscribeToResult)(this, result, undefined, undefined, innerSubscriber);
34535 if (innerSubscription !== innerSubscriber) {
34536 destination.add(innerSubscription);
34537 }
34538 };
34539 ExhaustMapSubscriber.prototype._complete = function () {
34540 this.hasCompleted = true;
34541 if (!this.hasSubscription) {
34542 this.destination.complete();
34543 }
34544 this.unsubscribe();
34545 };
34546 ExhaustMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
34547 this.destination.next(innerValue);
34548 };
34549 ExhaustMapSubscriber.prototype.notifyError = function (err) {
34550 this.destination.error(err);
34551 };
34552 ExhaustMapSubscriber.prototype.notifyComplete = function (innerSub) {
34553 var destination = this.destination;
34554 destination.remove(innerSub);
34555 this.hasSubscription = false;
34556 if (this.hasCompleted) {
34557 this.destination.complete();
34558 }
34559 };
34560 return ExhaustMapSubscriber;
34561}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_5__.OuterSubscriber));
34562//# sourceMappingURL=exhaustMap.js.map
34563
34564
34565/***/ }),
34566/* 300 */
34567/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34568
34569"use strict";
34570__webpack_require__.r(__webpack_exports__);
34571/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34572/* harmony export */ "expand": () => /* binding */ expand,
34573/* harmony export */ "ExpandOperator": () => /* binding */ ExpandOperator,
34574/* harmony export */ "ExpandSubscriber": () => /* binding */ ExpandSubscriber
34575/* harmony export */ });
34576/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
34577/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(235);
34578/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
34579/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
34580
34581
34582
34583function expand(project, concurrent, scheduler) {
34584 if (concurrent === void 0) {
34585 concurrent = Number.POSITIVE_INFINITY;
34586 }
34587 if (scheduler === void 0) {
34588 scheduler = undefined;
34589 }
34590 concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;
34591 return function (source) { return source.lift(new ExpandOperator(project, concurrent, scheduler)); };
34592}
34593var ExpandOperator = /*@__PURE__*/ (function () {
34594 function ExpandOperator(project, concurrent, scheduler) {
34595 this.project = project;
34596 this.concurrent = concurrent;
34597 this.scheduler = scheduler;
34598 }
34599 ExpandOperator.prototype.call = function (subscriber, source) {
34600 return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler));
34601 };
34602 return ExpandOperator;
34603}());
34604
34605var ExpandSubscriber = /*@__PURE__*/ (function (_super) {
34606 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ExpandSubscriber, _super);
34607 function ExpandSubscriber(destination, project, concurrent, scheduler) {
34608 var _this = _super.call(this, destination) || this;
34609 _this.project = project;
34610 _this.concurrent = concurrent;
34611 _this.scheduler = scheduler;
34612 _this.index = 0;
34613 _this.active = 0;
34614 _this.hasCompleted = false;
34615 if (concurrent < Number.POSITIVE_INFINITY) {
34616 _this.buffer = [];
34617 }
34618 return _this;
34619 }
34620 ExpandSubscriber.dispatch = function (arg) {
34621 var subscriber = arg.subscriber, result = arg.result, value = arg.value, index = arg.index;
34622 subscriber.subscribeToProjection(result, value, index);
34623 };
34624 ExpandSubscriber.prototype._next = function (value) {
34625 var destination = this.destination;
34626 if (destination.closed) {
34627 this._complete();
34628 return;
34629 }
34630 var index = this.index++;
34631 if (this.active < this.concurrent) {
34632 destination.next(value);
34633 try {
34634 var project = this.project;
34635 var result = project(value, index);
34636 if (!this.scheduler) {
34637 this.subscribeToProjection(result, value, index);
34638 }
34639 else {
34640 var state = { subscriber: this, result: result, value: value, index: index };
34641 var destination_1 = this.destination;
34642 destination_1.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state));
34643 }
34644 }
34645 catch (e) {
34646 destination.error(e);
34647 }
34648 }
34649 else {
34650 this.buffer.push(value);
34651 }
34652 };
34653 ExpandSubscriber.prototype.subscribeToProjection = function (result, value, index) {
34654 this.active++;
34655 var destination = this.destination;
34656 destination.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(this, result, value, index));
34657 };
34658 ExpandSubscriber.prototype._complete = function () {
34659 this.hasCompleted = true;
34660 if (this.hasCompleted && this.active === 0) {
34661 this.destination.complete();
34662 }
34663 this.unsubscribe();
34664 };
34665 ExpandSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
34666 this._next(innerValue);
34667 };
34668 ExpandSubscriber.prototype.notifyComplete = function (innerSub) {
34669 var buffer = this.buffer;
34670 var destination = this.destination;
34671 destination.remove(innerSub);
34672 this.active--;
34673 if (buffer && buffer.length > 0) {
34674 this._next(buffer.shift());
34675 }
34676 if (this.hasCompleted && this.active === 0) {
34677 this.destination.complete();
34678 }
34679 };
34680 return ExpandSubscriber;
34681}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
34682
34683//# sourceMappingURL=expand.js.map
34684
34685
34686/***/ }),
34687/* 301 */
34688/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34689
34690"use strict";
34691__webpack_require__.r(__webpack_exports__);
34692/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34693/* harmony export */ "finalize": () => /* binding */ finalize
34694/* harmony export */ });
34695/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
34696/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(168);
34697/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
34698/** PURE_IMPORTS_START tslib,_Subscriber,_Subscription PURE_IMPORTS_END */
34699
34700
34701
34702function finalize(callback) {
34703 return function (source) { return source.lift(new FinallyOperator(callback)); };
34704}
34705var FinallyOperator = /*@__PURE__*/ (function () {
34706 function FinallyOperator(callback) {
34707 this.callback = callback;
34708 }
34709 FinallyOperator.prototype.call = function (subscriber, source) {
34710 return source.subscribe(new FinallySubscriber(subscriber, this.callback));
34711 };
34712 return FinallyOperator;
34713}());
34714var FinallySubscriber = /*@__PURE__*/ (function (_super) {
34715 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(FinallySubscriber, _super);
34716 function FinallySubscriber(destination, callback) {
34717 var _this = _super.call(this, destination) || this;
34718 _this.add(new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription(callback));
34719 return _this;
34720 }
34721 return FinallySubscriber;
34722}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
34723//# sourceMappingURL=finalize.js.map
34724
34725
34726/***/ }),
34727/* 302 */
34728/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34729
34730"use strict";
34731__webpack_require__.r(__webpack_exports__);
34732/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34733/* harmony export */ "find": () => /* binding */ find,
34734/* harmony export */ "FindValueOperator": () => /* binding */ FindValueOperator,
34735/* harmony export */ "FindValueSubscriber": () => /* binding */ FindValueSubscriber
34736/* harmony export */ });
34737/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
34738/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
34739/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34740
34741
34742function find(predicate, thisArg) {
34743 if (typeof predicate !== 'function') {
34744 throw new TypeError('predicate is not a function');
34745 }
34746 return function (source) { return source.lift(new FindValueOperator(predicate, source, false, thisArg)); };
34747}
34748var FindValueOperator = /*@__PURE__*/ (function () {
34749 function FindValueOperator(predicate, source, yieldIndex, thisArg) {
34750 this.predicate = predicate;
34751 this.source = source;
34752 this.yieldIndex = yieldIndex;
34753 this.thisArg = thisArg;
34754 }
34755 FindValueOperator.prototype.call = function (observer, source) {
34756 return source.subscribe(new FindValueSubscriber(observer, this.predicate, this.source, this.yieldIndex, this.thisArg));
34757 };
34758 return FindValueOperator;
34759}());
34760
34761var FindValueSubscriber = /*@__PURE__*/ (function (_super) {
34762 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(FindValueSubscriber, _super);
34763 function FindValueSubscriber(destination, predicate, source, yieldIndex, thisArg) {
34764 var _this = _super.call(this, destination) || this;
34765 _this.predicate = predicate;
34766 _this.source = source;
34767 _this.yieldIndex = yieldIndex;
34768 _this.thisArg = thisArg;
34769 _this.index = 0;
34770 return _this;
34771 }
34772 FindValueSubscriber.prototype.notifyComplete = function (value) {
34773 var destination = this.destination;
34774 destination.next(value);
34775 destination.complete();
34776 this.unsubscribe();
34777 };
34778 FindValueSubscriber.prototype._next = function (value) {
34779 var _a = this, predicate = _a.predicate, thisArg = _a.thisArg;
34780 var index = this.index++;
34781 try {
34782 var result = predicate.call(thisArg || this, value, index, this.source);
34783 if (result) {
34784 this.notifyComplete(this.yieldIndex ? index : value);
34785 }
34786 }
34787 catch (err) {
34788 this.destination.error(err);
34789 }
34790 };
34791 FindValueSubscriber.prototype._complete = function () {
34792 this.notifyComplete(this.yieldIndex ? -1 : undefined);
34793 };
34794 return FindValueSubscriber;
34795}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
34796
34797//# sourceMappingURL=find.js.map
34798
34799
34800/***/ }),
34801/* 303 */
34802/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34803
34804"use strict";
34805__webpack_require__.r(__webpack_exports__);
34806/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34807/* harmony export */ "findIndex": () => /* binding */ findIndex
34808/* harmony export */ });
34809/* harmony import */ var _operators_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(302);
34810/** PURE_IMPORTS_START _operators_find PURE_IMPORTS_END */
34811
34812function findIndex(predicate, thisArg) {
34813 return function (source) { return source.lift(new _operators_find__WEBPACK_IMPORTED_MODULE_0__.FindValueOperator(predicate, source, true, thisArg)); };
34814}
34815//# sourceMappingURL=findIndex.js.map
34816
34817
34818/***/ }),
34819/* 304 */
34820/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34821
34822"use strict";
34823__webpack_require__.r(__webpack_exports__);
34824/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34825/* harmony export */ "first": () => /* binding */ first
34826/* harmony export */ });
34827/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(220);
34828/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(260);
34829/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(294);
34830/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(285);
34831/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(295);
34832/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(182);
34833/** PURE_IMPORTS_START _util_EmptyError,_filter,_take,_defaultIfEmpty,_throwIfEmpty,_util_identity PURE_IMPORTS_END */
34834
34835
34836
34837
34838
34839
34840function first(predicate, defaultValue) {
34841 var hasDefaultValue = arguments.length >= 2;
34842 return function (source) { return source.pipe(predicate ? (0,_filter__WEBPACK_IMPORTED_MODULE_0__.filter)(function (v, i) { return predicate(v, i, source); }) : _util_identity__WEBPACK_IMPORTED_MODULE_1__.identity, (0,_take__WEBPACK_IMPORTED_MODULE_2__.take)(1), hasDefaultValue ? (0,_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__.defaultIfEmpty)(defaultValue) : (0,_throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__.throwIfEmpty)(function () { return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_5__.EmptyError(); })); };
34843}
34844//# sourceMappingURL=first.js.map
34845
34846
34847/***/ }),
34848/* 305 */
34849/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34850
34851"use strict";
34852__webpack_require__.r(__webpack_exports__);
34853/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34854/* harmony export */ "ignoreElements": () => /* binding */ ignoreElements
34855/* harmony export */ });
34856/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
34857/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
34858/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34859
34860
34861function ignoreElements() {
34862 return function ignoreElementsOperatorFunction(source) {
34863 return source.lift(new IgnoreElementsOperator());
34864 };
34865}
34866var IgnoreElementsOperator = /*@__PURE__*/ (function () {
34867 function IgnoreElementsOperator() {
34868 }
34869 IgnoreElementsOperator.prototype.call = function (subscriber, source) {
34870 return source.subscribe(new IgnoreElementsSubscriber(subscriber));
34871 };
34872 return IgnoreElementsOperator;
34873}());
34874var IgnoreElementsSubscriber = /*@__PURE__*/ (function (_super) {
34875 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(IgnoreElementsSubscriber, _super);
34876 function IgnoreElementsSubscriber() {
34877 return _super !== null && _super.apply(this, arguments) || this;
34878 }
34879 IgnoreElementsSubscriber.prototype._next = function (unused) {
34880 };
34881 return IgnoreElementsSubscriber;
34882}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
34883//# sourceMappingURL=ignoreElements.js.map
34884
34885
34886/***/ }),
34887/* 306 */
34888/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34889
34890"use strict";
34891__webpack_require__.r(__webpack_exports__);
34892/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34893/* harmony export */ "isEmpty": () => /* binding */ isEmpty
34894/* harmony export */ });
34895/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
34896/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
34897/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34898
34899
34900function isEmpty() {
34901 return function (source) { return source.lift(new IsEmptyOperator()); };
34902}
34903var IsEmptyOperator = /*@__PURE__*/ (function () {
34904 function IsEmptyOperator() {
34905 }
34906 IsEmptyOperator.prototype.call = function (observer, source) {
34907 return source.subscribe(new IsEmptySubscriber(observer));
34908 };
34909 return IsEmptyOperator;
34910}());
34911var IsEmptySubscriber = /*@__PURE__*/ (function (_super) {
34912 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(IsEmptySubscriber, _super);
34913 function IsEmptySubscriber(destination) {
34914 return _super.call(this, destination) || this;
34915 }
34916 IsEmptySubscriber.prototype.notifyComplete = function (isEmpty) {
34917 var destination = this.destination;
34918 destination.next(isEmpty);
34919 destination.complete();
34920 };
34921 IsEmptySubscriber.prototype._next = function (value) {
34922 this.notifyComplete(false);
34923 };
34924 IsEmptySubscriber.prototype._complete = function () {
34925 this.notifyComplete(true);
34926 };
34927 return IsEmptySubscriber;
34928}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
34929//# sourceMappingURL=isEmpty.js.map
34930
34931
34932/***/ }),
34933/* 307 */
34934/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34935
34936"use strict";
34937__webpack_require__.r(__webpack_exports__);
34938/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34939/* harmony export */ "last": () => /* binding */ last
34940/* harmony export */ });
34941/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(220);
34942/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(260);
34943/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(308);
34944/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(295);
34945/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(285);
34946/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(182);
34947/** PURE_IMPORTS_START _util_EmptyError,_filter,_takeLast,_throwIfEmpty,_defaultIfEmpty,_util_identity PURE_IMPORTS_END */
34948
34949
34950
34951
34952
34953
34954function last(predicate, defaultValue) {
34955 var hasDefaultValue = arguments.length >= 2;
34956 return function (source) { return source.pipe(predicate ? (0,_filter__WEBPACK_IMPORTED_MODULE_0__.filter)(function (v, i) { return predicate(v, i, source); }) : _util_identity__WEBPACK_IMPORTED_MODULE_1__.identity, (0,_takeLast__WEBPACK_IMPORTED_MODULE_2__.takeLast)(1), hasDefaultValue ? (0,_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__.defaultIfEmpty)(defaultValue) : (0,_throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__.throwIfEmpty)(function () { return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_5__.EmptyError(); })); };
34957}
34958//# sourceMappingURL=last.js.map
34959
34960
34961/***/ }),
34962/* 308 */
34963/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34964
34965"use strict";
34966__webpack_require__.r(__webpack_exports__);
34967/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34968/* harmony export */ "takeLast": () => /* binding */ takeLast
34969/* harmony export */ });
34970/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
34971/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(168);
34972/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(219);
34973/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(199);
34974/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */
34975
34976
34977
34978
34979function takeLast(count) {
34980 return function takeLastOperatorFunction(source) {
34981 if (count === 0) {
34982 return (0,_observable_empty__WEBPACK_IMPORTED_MODULE_1__.empty)();
34983 }
34984 else {
34985 return source.lift(new TakeLastOperator(count));
34986 }
34987 };
34988}
34989var TakeLastOperator = /*@__PURE__*/ (function () {
34990 function TakeLastOperator(total) {
34991 this.total = total;
34992 if (this.total < 0) {
34993 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__.ArgumentOutOfRangeError;
34994 }
34995 }
34996 TakeLastOperator.prototype.call = function (subscriber, source) {
34997 return source.subscribe(new TakeLastSubscriber(subscriber, this.total));
34998 };
34999 return TakeLastOperator;
35000}());
35001var TakeLastSubscriber = /*@__PURE__*/ (function (_super) {
35002 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(TakeLastSubscriber, _super);
35003 function TakeLastSubscriber(destination, total) {
35004 var _this = _super.call(this, destination) || this;
35005 _this.total = total;
35006 _this.ring = new Array();
35007 _this.count = 0;
35008 return _this;
35009 }
35010 TakeLastSubscriber.prototype._next = function (value) {
35011 var ring = this.ring;
35012 var total = this.total;
35013 var count = this.count++;
35014 if (ring.length < total) {
35015 ring.push(value);
35016 }
35017 else {
35018 var index = count % total;
35019 ring[index] = value;
35020 }
35021 };
35022 TakeLastSubscriber.prototype._complete = function () {
35023 var destination = this.destination;
35024 var count = this.count;
35025 if (count > 0) {
35026 var total = this.count >= this.total ? this.total : this.count;
35027 var ring = this.ring;
35028 for (var i = 0; i < total; i++) {
35029 var idx = (count++) % total;
35030 destination.next(ring[idx]);
35031 }
35032 }
35033 destination.complete();
35034 };
35035 return TakeLastSubscriber;
35036}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__.Subscriber));
35037//# sourceMappingURL=takeLast.js.map
35038
35039
35040/***/ }),
35041/* 309 */
35042/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35043
35044"use strict";
35045__webpack_require__.r(__webpack_exports__);
35046/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35047/* harmony export */ "mapTo": () => /* binding */ mapTo
35048/* harmony export */ });
35049/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
35050/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
35051/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
35052
35053
35054function mapTo(value) {
35055 return function (source) { return source.lift(new MapToOperator(value)); };
35056}
35057var MapToOperator = /*@__PURE__*/ (function () {
35058 function MapToOperator(value) {
35059 this.value = value;
35060 }
35061 MapToOperator.prototype.call = function (subscriber, source) {
35062 return source.subscribe(new MapToSubscriber(subscriber, this.value));
35063 };
35064 return MapToOperator;
35065}());
35066var MapToSubscriber = /*@__PURE__*/ (function (_super) {
35067 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(MapToSubscriber, _super);
35068 function MapToSubscriber(destination, value) {
35069 var _this = _super.call(this, destination) || this;
35070 _this.value = value;
35071 return _this;
35072 }
35073 MapToSubscriber.prototype._next = function (x) {
35074 this.destination.next(this.value);
35075 };
35076 return MapToSubscriber;
35077}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
35078//# sourceMappingURL=mapTo.js.map
35079
35080
35081/***/ }),
35082/* 310 */
35083/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35084
35085"use strict";
35086__webpack_require__.r(__webpack_exports__);
35087/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35088/* harmony export */ "materialize": () => /* binding */ materialize
35089/* harmony export */ });
35090/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
35091/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(168);
35092/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(192);
35093/** PURE_IMPORTS_START tslib,_Subscriber,_Notification PURE_IMPORTS_END */
35094
35095
35096
35097function materialize() {
35098 return function materializeOperatorFunction(source) {
35099 return source.lift(new MaterializeOperator());
35100 };
35101}
35102var MaterializeOperator = /*@__PURE__*/ (function () {
35103 function MaterializeOperator() {
35104 }
35105 MaterializeOperator.prototype.call = function (subscriber, source) {
35106 return source.subscribe(new MaterializeSubscriber(subscriber));
35107 };
35108 return MaterializeOperator;
35109}());
35110var MaterializeSubscriber = /*@__PURE__*/ (function (_super) {
35111 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(MaterializeSubscriber, _super);
35112 function MaterializeSubscriber(destination) {
35113 return _super.call(this, destination) || this;
35114 }
35115 MaterializeSubscriber.prototype._next = function (value) {
35116 this.destination.next(_Notification__WEBPACK_IMPORTED_MODULE_1__.Notification.createNext(value));
35117 };
35118 MaterializeSubscriber.prototype._error = function (err) {
35119 var destination = this.destination;
35120 destination.next(_Notification__WEBPACK_IMPORTED_MODULE_1__.Notification.createError(err));
35121 destination.complete();
35122 };
35123 MaterializeSubscriber.prototype._complete = function () {
35124 var destination = this.destination;
35125 destination.next(_Notification__WEBPACK_IMPORTED_MODULE_1__.Notification.createComplete());
35126 destination.complete();
35127 };
35128 return MaterializeSubscriber;
35129}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
35130//# sourceMappingURL=materialize.js.map
35131
35132
35133/***/ }),
35134/* 311 */
35135/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35136
35137"use strict";
35138__webpack_require__.r(__webpack_exports__);
35139/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35140/* harmony export */ "max": () => /* binding */ max
35141/* harmony export */ });
35142/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(312);
35143/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
35144
35145function max(comparer) {
35146 var max = (typeof comparer === 'function')
35147 ? function (x, y) { return comparer(x, y) > 0 ? x : y; }
35148 : function (x, y) { return x > y ? x : y; };
35149 return (0,_reduce__WEBPACK_IMPORTED_MODULE_0__.reduce)(max);
35150}
35151//# sourceMappingURL=max.js.map
35152
35153
35154/***/ }),
35155/* 312 */
35156/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35157
35158"use strict";
35159__webpack_require__.r(__webpack_exports__);
35160/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35161/* harmony export */ "reduce": () => /* binding */ reduce
35162/* harmony export */ });
35163/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(313);
35164/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(308);
35165/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(285);
35166/* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(181);
35167/** PURE_IMPORTS_START _scan,_takeLast,_defaultIfEmpty,_util_pipe PURE_IMPORTS_END */
35168
35169
35170
35171
35172function reduce(accumulator, seed) {
35173 if (arguments.length >= 2) {
35174 return function reduceOperatorFunctionWithSeed(source) {
35175 return (0,_util_pipe__WEBPACK_IMPORTED_MODULE_0__.pipe)((0,_scan__WEBPACK_IMPORTED_MODULE_1__.scan)(accumulator, seed), (0,_takeLast__WEBPACK_IMPORTED_MODULE_2__.takeLast)(1), (0,_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__.defaultIfEmpty)(seed))(source);
35176 };
35177 }
35178 return function reduceOperatorFunction(source) {
35179 return (0,_util_pipe__WEBPACK_IMPORTED_MODULE_0__.pipe)((0,_scan__WEBPACK_IMPORTED_MODULE_1__.scan)(function (acc, value, index) { return accumulator(acc, value, index + 1); }), (0,_takeLast__WEBPACK_IMPORTED_MODULE_2__.takeLast)(1))(source);
35180 };
35181}
35182//# sourceMappingURL=reduce.js.map
35183
35184
35185/***/ }),
35186/* 313 */
35187/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35188
35189"use strict";
35190__webpack_require__.r(__webpack_exports__);
35191/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35192/* harmony export */ "scan": () => /* binding */ scan
35193/* harmony export */ });
35194/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
35195/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
35196/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
35197
35198
35199function scan(accumulator, seed) {
35200 var hasSeed = false;
35201 if (arguments.length >= 2) {
35202 hasSeed = true;
35203 }
35204 return function scanOperatorFunction(source) {
35205 return source.lift(new ScanOperator(accumulator, seed, hasSeed));
35206 };
35207}
35208var ScanOperator = /*@__PURE__*/ (function () {
35209 function ScanOperator(accumulator, seed, hasSeed) {
35210 if (hasSeed === void 0) {
35211 hasSeed = false;
35212 }
35213 this.accumulator = accumulator;
35214 this.seed = seed;
35215 this.hasSeed = hasSeed;
35216 }
35217 ScanOperator.prototype.call = function (subscriber, source) {
35218 return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));
35219 };
35220 return ScanOperator;
35221}());
35222var ScanSubscriber = /*@__PURE__*/ (function (_super) {
35223 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ScanSubscriber, _super);
35224 function ScanSubscriber(destination, accumulator, _seed, hasSeed) {
35225 var _this = _super.call(this, destination) || this;
35226 _this.accumulator = accumulator;
35227 _this._seed = _seed;
35228 _this.hasSeed = hasSeed;
35229 _this.index = 0;
35230 return _this;
35231 }
35232 Object.defineProperty(ScanSubscriber.prototype, "seed", {
35233 get: function () {
35234 return this._seed;
35235 },
35236 set: function (value) {
35237 this.hasSeed = true;
35238 this._seed = value;
35239 },
35240 enumerable: true,
35241 configurable: true
35242 });
35243 ScanSubscriber.prototype._next = function (value) {
35244 if (!this.hasSeed) {
35245 this.seed = value;
35246 this.destination.next(value);
35247 }
35248 else {
35249 return this._tryNext(value);
35250 }
35251 };
35252 ScanSubscriber.prototype._tryNext = function (value) {
35253 var index = this.index++;
35254 var result;
35255 try {
35256 result = this.accumulator(this.seed, value, index);
35257 }
35258 catch (err) {
35259 this.destination.error(err);
35260 }
35261 this.seed = result;
35262 this.destination.next(result);
35263 };
35264 return ScanSubscriber;
35265}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
35266//# sourceMappingURL=scan.js.map
35267
35268
35269/***/ }),
35270/* 314 */
35271/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35272
35273"use strict";
35274__webpack_require__.r(__webpack_exports__);
35275/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35276/* harmony export */ "merge": () => /* binding */ merge
35277/* harmony export */ });
35278/* harmony import */ var _observable_merge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(255);
35279/** PURE_IMPORTS_START _observable_merge PURE_IMPORTS_END */
35280
35281function merge() {
35282 var observables = [];
35283 for (var _i = 0; _i < arguments.length; _i++) {
35284 observables[_i] = arguments[_i];
35285 }
35286 return function (source) { return source.lift.call(_observable_merge__WEBPACK_IMPORTED_MODULE_0__.merge.apply(void 0, [source].concat(observables))); };
35287}
35288//# sourceMappingURL=merge.js.map
35289
35290
35291/***/ }),
35292/* 315 */
35293/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35294
35295"use strict";
35296__webpack_require__.r(__webpack_exports__);
35297/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35298/* harmony export */ "mergeMapTo": () => /* binding */ mergeMapTo
35299/* harmony export */ });
35300/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(239);
35301/** PURE_IMPORTS_START _mergeMap PURE_IMPORTS_END */
35302
35303function mergeMapTo(innerObservable, resultSelector, concurrent) {
35304 if (concurrent === void 0) {
35305 concurrent = Number.POSITIVE_INFINITY;
35306 }
35307 if (typeof resultSelector === 'function') {
35308 return (0,_mergeMap__WEBPACK_IMPORTED_MODULE_0__.mergeMap)(function () { return innerObservable; }, resultSelector, concurrent);
35309 }
35310 if (typeof resultSelector === 'number') {
35311 concurrent = resultSelector;
35312 }
35313 return (0,_mergeMap__WEBPACK_IMPORTED_MODULE_0__.mergeMap)(function () { return innerObservable; }, concurrent);
35314}
35315//# sourceMappingURL=mergeMapTo.js.map
35316
35317
35318/***/ }),
35319/* 316 */
35320/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35321
35322"use strict";
35323__webpack_require__.r(__webpack_exports__);
35324/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35325/* harmony export */ "mergeScan": () => /* binding */ mergeScan,
35326/* harmony export */ "MergeScanOperator": () => /* binding */ MergeScanOperator,
35327/* harmony export */ "MergeScanSubscriber": () => /* binding */ MergeScanSubscriber
35328/* harmony export */ });
35329/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
35330/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(226);
35331/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(235);
35332/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
35333/** PURE_IMPORTS_START tslib,_util_subscribeToResult,_OuterSubscriber,_InnerSubscriber PURE_IMPORTS_END */
35334
35335
35336
35337
35338function mergeScan(accumulator, seed, concurrent) {
35339 if (concurrent === void 0) {
35340 concurrent = Number.POSITIVE_INFINITY;
35341 }
35342 return function (source) { return source.lift(new MergeScanOperator(accumulator, seed, concurrent)); };
35343}
35344var MergeScanOperator = /*@__PURE__*/ (function () {
35345 function MergeScanOperator(accumulator, seed, concurrent) {
35346 this.accumulator = accumulator;
35347 this.seed = seed;
35348 this.concurrent = concurrent;
35349 }
35350 MergeScanOperator.prototype.call = function (subscriber, source) {
35351 return source.subscribe(new MergeScanSubscriber(subscriber, this.accumulator, this.seed, this.concurrent));
35352 };
35353 return MergeScanOperator;
35354}());
35355
35356var MergeScanSubscriber = /*@__PURE__*/ (function (_super) {
35357 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(MergeScanSubscriber, _super);
35358 function MergeScanSubscriber(destination, accumulator, acc, concurrent) {
35359 var _this = _super.call(this, destination) || this;
35360 _this.accumulator = accumulator;
35361 _this.acc = acc;
35362 _this.concurrent = concurrent;
35363 _this.hasValue = false;
35364 _this.hasCompleted = false;
35365 _this.buffer = [];
35366 _this.active = 0;
35367 _this.index = 0;
35368 return _this;
35369 }
35370 MergeScanSubscriber.prototype._next = function (value) {
35371 if (this.active < this.concurrent) {
35372 var index = this.index++;
35373 var destination = this.destination;
35374 var ish = void 0;
35375 try {
35376 var accumulator = this.accumulator;
35377 ish = accumulator(this.acc, value, index);
35378 }
35379 catch (e) {
35380 return destination.error(e);
35381 }
35382 this.active++;
35383 this._innerSub(ish, value, index);
35384 }
35385 else {
35386 this.buffer.push(value);
35387 }
35388 };
35389 MergeScanSubscriber.prototype._innerSub = function (ish, value, index) {
35390 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__.InnerSubscriber(this, value, index);
35391 var destination = this.destination;
35392 destination.add(innerSubscriber);
35393 var innerSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__.subscribeToResult)(this, ish, undefined, undefined, innerSubscriber);
35394 if (innerSubscription !== innerSubscriber) {
35395 destination.add(innerSubscription);
35396 }
35397 };
35398 MergeScanSubscriber.prototype._complete = function () {
35399 this.hasCompleted = true;
35400 if (this.active === 0 && this.buffer.length === 0) {
35401 if (this.hasValue === false) {
35402 this.destination.next(this.acc);
35403 }
35404 this.destination.complete();
35405 }
35406 this.unsubscribe();
35407 };
35408 MergeScanSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
35409 var destination = this.destination;
35410 this.acc = innerValue;
35411 this.hasValue = true;
35412 destination.next(innerValue);
35413 };
35414 MergeScanSubscriber.prototype.notifyComplete = function (innerSub) {
35415 var buffer = this.buffer;
35416 var destination = this.destination;
35417 destination.remove(innerSub);
35418 this.active--;
35419 if (buffer.length > 0) {
35420 this._next(buffer.shift());
35421 }
35422 else if (this.active === 0 && this.hasCompleted) {
35423 if (this.hasValue === false) {
35424 this.destination.next(this.acc);
35425 }
35426 this.destination.complete();
35427 }
35428 };
35429 return MergeScanSubscriber;
35430}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__.OuterSubscriber));
35431
35432//# sourceMappingURL=mergeScan.js.map
35433
35434
35435/***/ }),
35436/* 317 */
35437/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35438
35439"use strict";
35440__webpack_require__.r(__webpack_exports__);
35441/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35442/* harmony export */ "min": () => /* binding */ min
35443/* harmony export */ });
35444/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(312);
35445/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
35446
35447function min(comparer) {
35448 var min = (typeof comparer === 'function')
35449 ? function (x, y) { return comparer(x, y) < 0 ? x : y; }
35450 : function (x, y) { return x < y ? x : y; };
35451 return (0,_reduce__WEBPACK_IMPORTED_MODULE_0__.reduce)(min);
35452}
35453//# sourceMappingURL=min.js.map
35454
35455
35456/***/ }),
35457/* 318 */
35458/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35459
35460"use strict";
35461__webpack_require__.r(__webpack_exports__);
35462/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35463/* harmony export */ "multicast": () => /* binding */ multicast,
35464/* harmony export */ "MulticastOperator": () => /* binding */ MulticastOperator
35465/* harmony export */ });
35466/* harmony import */ var _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(183);
35467/** PURE_IMPORTS_START _observable_ConnectableObservable PURE_IMPORTS_END */
35468
35469function multicast(subjectOrSubjectFactory, selector) {
35470 return function multicastOperatorFunction(source) {
35471 var subjectFactory;
35472 if (typeof subjectOrSubjectFactory === 'function') {
35473 subjectFactory = subjectOrSubjectFactory;
35474 }
35475 else {
35476 subjectFactory = function subjectFactory() {
35477 return subjectOrSubjectFactory;
35478 };
35479 }
35480 if (typeof selector === 'function') {
35481 return source.lift(new MulticastOperator(subjectFactory, selector));
35482 }
35483 var connectable = Object.create(source, _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__.connectableObservableDescriptor);
35484 connectable.source = source;
35485 connectable.subjectFactory = subjectFactory;
35486 return connectable;
35487 };
35488}
35489var MulticastOperator = /*@__PURE__*/ (function () {
35490 function MulticastOperator(subjectFactory, selector) {
35491 this.subjectFactory = subjectFactory;
35492 this.selector = selector;
35493 }
35494 MulticastOperator.prototype.call = function (subscriber, source) {
35495 var selector = this.selector;
35496 var subject = this.subjectFactory();
35497 var subscription = selector(subject).subscribe(subscriber);
35498 subscription.add(source.subscribe(subject));
35499 return subscription;
35500 };
35501 return MulticastOperator;
35502}());
35503
35504//# sourceMappingURL=multicast.js.map
35505
35506
35507/***/ }),
35508/* 319 */
35509/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35510
35511"use strict";
35512__webpack_require__.r(__webpack_exports__);
35513/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35514/* harmony export */ "onErrorResumeNext": () => /* binding */ onErrorResumeNext,
35515/* harmony export */ "onErrorResumeNextStatic": () => /* binding */ onErrorResumeNextStatic
35516/* harmony export */ });
35517/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
35518/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(240);
35519/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(177);
35520/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(235);
35521/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
35522/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(226);
35523/** PURE_IMPORTS_START tslib,_observable_from,_util_isArray,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
35524
35525
35526
35527
35528
35529
35530function onErrorResumeNext() {
35531 var nextSources = [];
35532 for (var _i = 0; _i < arguments.length; _i++) {
35533 nextSources[_i] = arguments[_i];
35534 }
35535 if (nextSources.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_1__.isArray)(nextSources[0])) {
35536 nextSources = nextSources[0];
35537 }
35538 return function (source) { return source.lift(new OnErrorResumeNextOperator(nextSources)); };
35539}
35540function onErrorResumeNextStatic() {
35541 var nextSources = [];
35542 for (var _i = 0; _i < arguments.length; _i++) {
35543 nextSources[_i] = arguments[_i];
35544 }
35545 var source = null;
35546 if (nextSources.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_1__.isArray)(nextSources[0])) {
35547 nextSources = nextSources[0];
35548 }
35549 source = nextSources.shift();
35550 return (0,_observable_from__WEBPACK_IMPORTED_MODULE_2__.from)(source, null).lift(new OnErrorResumeNextOperator(nextSources));
35551}
35552var OnErrorResumeNextOperator = /*@__PURE__*/ (function () {
35553 function OnErrorResumeNextOperator(nextSources) {
35554 this.nextSources = nextSources;
35555 }
35556 OnErrorResumeNextOperator.prototype.call = function (subscriber, source) {
35557 return source.subscribe(new OnErrorResumeNextSubscriber(subscriber, this.nextSources));
35558 };
35559 return OnErrorResumeNextOperator;
35560}());
35561var OnErrorResumeNextSubscriber = /*@__PURE__*/ (function (_super) {
35562 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(OnErrorResumeNextSubscriber, _super);
35563 function OnErrorResumeNextSubscriber(destination, nextSources) {
35564 var _this = _super.call(this, destination) || this;
35565 _this.destination = destination;
35566 _this.nextSources = nextSources;
35567 return _this;
35568 }
35569 OnErrorResumeNextSubscriber.prototype.notifyError = function (error, innerSub) {
35570 this.subscribeToNextSource();
35571 };
35572 OnErrorResumeNextSubscriber.prototype.notifyComplete = function (innerSub) {
35573 this.subscribeToNextSource();
35574 };
35575 OnErrorResumeNextSubscriber.prototype._error = function (err) {
35576 this.subscribeToNextSource();
35577 this.unsubscribe();
35578 };
35579 OnErrorResumeNextSubscriber.prototype._complete = function () {
35580 this.subscribeToNextSource();
35581 this.unsubscribe();
35582 };
35583 OnErrorResumeNextSubscriber.prototype.subscribeToNextSource = function () {
35584 var next = this.nextSources.shift();
35585 if (!!next) {
35586 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__.InnerSubscriber(this, undefined, undefined);
35587 var destination = this.destination;
35588 destination.add(innerSubscriber);
35589 var innerSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__.subscribeToResult)(this, next, undefined, undefined, innerSubscriber);
35590 if (innerSubscription !== innerSubscriber) {
35591 destination.add(innerSubscription);
35592 }
35593 }
35594 else {
35595 this.destination.complete();
35596 }
35597 };
35598 return OnErrorResumeNextSubscriber;
35599}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_5__.OuterSubscriber));
35600//# sourceMappingURL=onErrorResumeNext.js.map
35601
35602
35603/***/ }),
35604/* 320 */
35605/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35606
35607"use strict";
35608__webpack_require__.r(__webpack_exports__);
35609/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35610/* harmony export */ "pairwise": () => /* binding */ pairwise
35611/* harmony export */ });
35612/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
35613/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
35614/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
35615
35616
35617function pairwise() {
35618 return function (source) { return source.lift(new PairwiseOperator()); };
35619}
35620var PairwiseOperator = /*@__PURE__*/ (function () {
35621 function PairwiseOperator() {
35622 }
35623 PairwiseOperator.prototype.call = function (subscriber, source) {
35624 return source.subscribe(new PairwiseSubscriber(subscriber));
35625 };
35626 return PairwiseOperator;
35627}());
35628var PairwiseSubscriber = /*@__PURE__*/ (function (_super) {
35629 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(PairwiseSubscriber, _super);
35630 function PairwiseSubscriber(destination) {
35631 var _this = _super.call(this, destination) || this;
35632 _this.hasPrev = false;
35633 return _this;
35634 }
35635 PairwiseSubscriber.prototype._next = function (value) {
35636 var pair;
35637 if (this.hasPrev) {
35638 pair = [this.prev, value];
35639 }
35640 else {
35641 this.hasPrev = true;
35642 }
35643 this.prev = value;
35644 if (pair) {
35645 this.destination.next(pair);
35646 }
35647 };
35648 return PairwiseSubscriber;
35649}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
35650//# sourceMappingURL=pairwise.js.map
35651
35652
35653/***/ }),
35654/* 321 */
35655/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35656
35657"use strict";
35658__webpack_require__.r(__webpack_exports__);
35659/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35660/* harmony export */ "partition": () => /* binding */ partition
35661/* harmony export */ });
35662/* harmony import */ var _util_not__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(261);
35663/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(260);
35664/** PURE_IMPORTS_START _util_not,_filter PURE_IMPORTS_END */
35665
35666
35667function partition(predicate, thisArg) {
35668 return function (source) {
35669 return [
35670 (0,_filter__WEBPACK_IMPORTED_MODULE_0__.filter)(predicate, thisArg)(source),
35671 (0,_filter__WEBPACK_IMPORTED_MODULE_0__.filter)((0,_util_not__WEBPACK_IMPORTED_MODULE_1__.not)(predicate, thisArg))(source)
35672 ];
35673 };
35674}
35675//# sourceMappingURL=partition.js.map
35676
35677
35678/***/ }),
35679/* 322 */
35680/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35681
35682"use strict";
35683__webpack_require__.r(__webpack_exports__);
35684/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35685/* harmony export */ "pluck": () => /* binding */ pluck
35686/* harmony export */ });
35687/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(223);
35688/** PURE_IMPORTS_START _map PURE_IMPORTS_END */
35689
35690function pluck() {
35691 var properties = [];
35692 for (var _i = 0; _i < arguments.length; _i++) {
35693 properties[_i] = arguments[_i];
35694 }
35695 var length = properties.length;
35696 if (length === 0) {
35697 throw new Error('list of properties cannot be empty.');
35698 }
35699 return function (source) { return (0,_map__WEBPACK_IMPORTED_MODULE_0__.map)(plucker(properties, length))(source); };
35700}
35701function plucker(props, length) {
35702 var mapper = function (x) {
35703 var currentProp = x;
35704 for (var i = 0; i < length; i++) {
35705 var p = currentProp[props[i]];
35706 if (typeof p !== 'undefined') {
35707 currentProp = p;
35708 }
35709 else {
35710 return undefined;
35711 }
35712 }
35713 return currentProp;
35714 };
35715 return mapper;
35716}
35717//# sourceMappingURL=pluck.js.map
35718
35719
35720/***/ }),
35721/* 323 */
35722/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35723
35724"use strict";
35725__webpack_require__.r(__webpack_exports__);
35726/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35727/* harmony export */ "publish": () => /* binding */ publish
35728/* harmony export */ });
35729/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
35730/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(318);
35731/** PURE_IMPORTS_START _Subject,_multicast PURE_IMPORTS_END */
35732
35733
35734function publish(selector) {
35735 return selector ?
35736 (0,_multicast__WEBPACK_IMPORTED_MODULE_0__.multicast)(function () { return new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject(); }, selector) :
35737 (0,_multicast__WEBPACK_IMPORTED_MODULE_0__.multicast)(new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject());
35738}
35739//# sourceMappingURL=publish.js.map
35740
35741
35742/***/ }),
35743/* 324 */
35744/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35745
35746"use strict";
35747__webpack_require__.r(__webpack_exports__);
35748/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35749/* harmony export */ "publishBehavior": () => /* binding */ publishBehavior
35750/* harmony export */ });
35751/* harmony import */ var _BehaviorSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(189);
35752/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(318);
35753/** PURE_IMPORTS_START _BehaviorSubject,_multicast PURE_IMPORTS_END */
35754
35755
35756function publishBehavior(value) {
35757 return function (source) { return (0,_multicast__WEBPACK_IMPORTED_MODULE_0__.multicast)(new _BehaviorSubject__WEBPACK_IMPORTED_MODULE_1__.BehaviorSubject(value))(source); };
35758}
35759//# sourceMappingURL=publishBehavior.js.map
35760
35761
35762/***/ }),
35763/* 325 */
35764/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35765
35766"use strict";
35767__webpack_require__.r(__webpack_exports__);
35768/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35769/* harmony export */ "publishLast": () => /* binding */ publishLast
35770/* harmony export */ });
35771/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(207);
35772/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(318);
35773/** PURE_IMPORTS_START _AsyncSubject,_multicast PURE_IMPORTS_END */
35774
35775
35776function publishLast() {
35777 return function (source) { return (0,_multicast__WEBPACK_IMPORTED_MODULE_0__.multicast)(new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__.AsyncSubject())(source); };
35778}
35779//# sourceMappingURL=publishLast.js.map
35780
35781
35782/***/ }),
35783/* 326 */
35784/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35785
35786"use strict";
35787__webpack_require__.r(__webpack_exports__);
35788/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35789/* harmony export */ "publishReplay": () => /* binding */ publishReplay
35790/* harmony export */ });
35791/* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(190);
35792/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(318);
35793/** PURE_IMPORTS_START _ReplaySubject,_multicast PURE_IMPORTS_END */
35794
35795
35796function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) {
35797 if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') {
35798 scheduler = selectorOrScheduler;
35799 }
35800 var selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined;
35801 var subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__.ReplaySubject(bufferSize, windowTime, scheduler);
35802 return function (source) { return (0,_multicast__WEBPACK_IMPORTED_MODULE_1__.multicast)(function () { return subject; }, selector)(source); };
35803}
35804//# sourceMappingURL=publishReplay.js.map
35805
35806
35807/***/ }),
35808/* 327 */
35809/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35810
35811"use strict";
35812__webpack_require__.r(__webpack_exports__);
35813/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35814/* harmony export */ "race": () => /* binding */ race
35815/* harmony export */ });
35816/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(177);
35817/* harmony import */ var _observable_race__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(262);
35818/** PURE_IMPORTS_START _util_isArray,_observable_race PURE_IMPORTS_END */
35819
35820
35821function race() {
35822 var observables = [];
35823 for (var _i = 0; _i < arguments.length; _i++) {
35824 observables[_i] = arguments[_i];
35825 }
35826 return function raceOperatorFunction(source) {
35827 if (observables.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_0__.isArray)(observables[0])) {
35828 observables = observables[0];
35829 }
35830 return source.lift.call(_observable_race__WEBPACK_IMPORTED_MODULE_1__.race.apply(void 0, [source].concat(observables)));
35831 };
35832}
35833//# sourceMappingURL=race.js.map
35834
35835
35836/***/ }),
35837/* 328 */
35838/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35839
35840"use strict";
35841__webpack_require__.r(__webpack_exports__);
35842/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35843/* harmony export */ "repeat": () => /* binding */ repeat
35844/* harmony export */ });
35845/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
35846/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(168);
35847/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(199);
35848/** PURE_IMPORTS_START tslib,_Subscriber,_observable_empty PURE_IMPORTS_END */
35849
35850
35851
35852function repeat(count) {
35853 if (count === void 0) {
35854 count = -1;
35855 }
35856 return function (source) {
35857 if (count === 0) {
35858 return (0,_observable_empty__WEBPACK_IMPORTED_MODULE_1__.empty)();
35859 }
35860 else if (count < 0) {
35861 return source.lift(new RepeatOperator(-1, source));
35862 }
35863 else {
35864 return source.lift(new RepeatOperator(count - 1, source));
35865 }
35866 };
35867}
35868var RepeatOperator = /*@__PURE__*/ (function () {
35869 function RepeatOperator(count, source) {
35870 this.count = count;
35871 this.source = source;
35872 }
35873 RepeatOperator.prototype.call = function (subscriber, source) {
35874 return source.subscribe(new RepeatSubscriber(subscriber, this.count, this.source));
35875 };
35876 return RepeatOperator;
35877}());
35878var RepeatSubscriber = /*@__PURE__*/ (function (_super) {
35879 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RepeatSubscriber, _super);
35880 function RepeatSubscriber(destination, count, source) {
35881 var _this = _super.call(this, destination) || this;
35882 _this.count = count;
35883 _this.source = source;
35884 return _this;
35885 }
35886 RepeatSubscriber.prototype.complete = function () {
35887 if (!this.isStopped) {
35888 var _a = this, source = _a.source, count = _a.count;
35889 if (count === 0) {
35890 return _super.prototype.complete.call(this);
35891 }
35892 else if (count > -1) {
35893 this.count = count - 1;
35894 }
35895 source.subscribe(this._unsubscribeAndRecycle());
35896 }
35897 };
35898 return RepeatSubscriber;
35899}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
35900//# sourceMappingURL=repeat.js.map
35901
35902
35903/***/ }),
35904/* 329 */
35905/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35906
35907"use strict";
35908__webpack_require__.r(__webpack_exports__);
35909/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35910/* harmony export */ "repeatWhen": () => /* binding */ repeatWhen
35911/* harmony export */ });
35912/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
35913/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
35914/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(235);
35915/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(226);
35916/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
35917
35918
35919
35920
35921function repeatWhen(notifier) {
35922 return function (source) { return source.lift(new RepeatWhenOperator(notifier)); };
35923}
35924var RepeatWhenOperator = /*@__PURE__*/ (function () {
35925 function RepeatWhenOperator(notifier) {
35926 this.notifier = notifier;
35927 }
35928 RepeatWhenOperator.prototype.call = function (subscriber, source) {
35929 return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
35930 };
35931 return RepeatWhenOperator;
35932}());
35933var RepeatWhenSubscriber = /*@__PURE__*/ (function (_super) {
35934 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RepeatWhenSubscriber, _super);
35935 function RepeatWhenSubscriber(destination, notifier, source) {
35936 var _this = _super.call(this, destination) || this;
35937 _this.notifier = notifier;
35938 _this.source = source;
35939 _this.sourceIsBeingSubscribedTo = true;
35940 return _this;
35941 }
35942 RepeatWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
35943 this.sourceIsBeingSubscribedTo = true;
35944 this.source.subscribe(this);
35945 };
35946 RepeatWhenSubscriber.prototype.notifyComplete = function (innerSub) {
35947 if (this.sourceIsBeingSubscribedTo === false) {
35948 return _super.prototype.complete.call(this);
35949 }
35950 };
35951 RepeatWhenSubscriber.prototype.complete = function () {
35952 this.sourceIsBeingSubscribedTo = false;
35953 if (!this.isStopped) {
35954 if (!this.retries) {
35955 this.subscribeToRetries();
35956 }
35957 if (!this.retriesSubscription || this.retriesSubscription.closed) {
35958 return _super.prototype.complete.call(this);
35959 }
35960 this._unsubscribeAndRecycle();
35961 this.notifications.next();
35962 }
35963 };
35964 RepeatWhenSubscriber.prototype._unsubscribe = function () {
35965 var _a = this, notifications = _a.notifications, retriesSubscription = _a.retriesSubscription;
35966 if (notifications) {
35967 notifications.unsubscribe();
35968 this.notifications = null;
35969 }
35970 if (retriesSubscription) {
35971 retriesSubscription.unsubscribe();
35972 this.retriesSubscription = null;
35973 }
35974 this.retries = null;
35975 };
35976 RepeatWhenSubscriber.prototype._unsubscribeAndRecycle = function () {
35977 var _unsubscribe = this._unsubscribe;
35978 this._unsubscribe = null;
35979 _super.prototype._unsubscribeAndRecycle.call(this);
35980 this._unsubscribe = _unsubscribe;
35981 return this;
35982 };
35983 RepeatWhenSubscriber.prototype.subscribeToRetries = function () {
35984 this.notifications = new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject();
35985 var retries;
35986 try {
35987 var notifier = this.notifier;
35988 retries = notifier(this.notifications);
35989 }
35990 catch (e) {
35991 return _super.prototype.complete.call(this);
35992 }
35993 this.retries = retries;
35994 this.retriesSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__.subscribeToResult)(this, retries);
35995 };
35996 return RepeatWhenSubscriber;
35997}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__.OuterSubscriber));
35998//# sourceMappingURL=repeatWhen.js.map
35999
36000
36001/***/ }),
36002/* 330 */
36003/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36004
36005"use strict";
36006__webpack_require__.r(__webpack_exports__);
36007/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36008/* harmony export */ "retry": () => /* binding */ retry
36009/* harmony export */ });
36010/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
36011/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
36012/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36013
36014
36015function retry(count) {
36016 if (count === void 0) {
36017 count = -1;
36018 }
36019 return function (source) { return source.lift(new RetryOperator(count, source)); };
36020}
36021var RetryOperator = /*@__PURE__*/ (function () {
36022 function RetryOperator(count, source) {
36023 this.count = count;
36024 this.source = source;
36025 }
36026 RetryOperator.prototype.call = function (subscriber, source) {
36027 return source.subscribe(new RetrySubscriber(subscriber, this.count, this.source));
36028 };
36029 return RetryOperator;
36030}());
36031var RetrySubscriber = /*@__PURE__*/ (function (_super) {
36032 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RetrySubscriber, _super);
36033 function RetrySubscriber(destination, count, source) {
36034 var _this = _super.call(this, destination) || this;
36035 _this.count = count;
36036 _this.source = source;
36037 return _this;
36038 }
36039 RetrySubscriber.prototype.error = function (err) {
36040 if (!this.isStopped) {
36041 var _a = this, source = _a.source, count = _a.count;
36042 if (count === 0) {
36043 return _super.prototype.error.call(this, err);
36044 }
36045 else if (count > -1) {
36046 this.count = count - 1;
36047 }
36048 source.subscribe(this._unsubscribeAndRecycle());
36049 }
36050 };
36051 return RetrySubscriber;
36052}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
36053//# sourceMappingURL=retry.js.map
36054
36055
36056/***/ }),
36057/* 331 */
36058/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36059
36060"use strict";
36061__webpack_require__.r(__webpack_exports__);
36062/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36063/* harmony export */ "retryWhen": () => /* binding */ retryWhen
36064/* harmony export */ });
36065/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
36066/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
36067/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(235);
36068/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(226);
36069/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
36070
36071
36072
36073
36074function retryWhen(notifier) {
36075 return function (source) { return source.lift(new RetryWhenOperator(notifier, source)); };
36076}
36077var RetryWhenOperator = /*@__PURE__*/ (function () {
36078 function RetryWhenOperator(notifier, source) {
36079 this.notifier = notifier;
36080 this.source = source;
36081 }
36082 RetryWhenOperator.prototype.call = function (subscriber, source) {
36083 return source.subscribe(new RetryWhenSubscriber(subscriber, this.notifier, this.source));
36084 };
36085 return RetryWhenOperator;
36086}());
36087var RetryWhenSubscriber = /*@__PURE__*/ (function (_super) {
36088 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RetryWhenSubscriber, _super);
36089 function RetryWhenSubscriber(destination, notifier, source) {
36090 var _this = _super.call(this, destination) || this;
36091 _this.notifier = notifier;
36092 _this.source = source;
36093 return _this;
36094 }
36095 RetryWhenSubscriber.prototype.error = function (err) {
36096 if (!this.isStopped) {
36097 var errors = this.errors;
36098 var retries = this.retries;
36099 var retriesSubscription = this.retriesSubscription;
36100 if (!retries) {
36101 errors = new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject();
36102 try {
36103 var notifier = this.notifier;
36104 retries = notifier(errors);
36105 }
36106 catch (e) {
36107 return _super.prototype.error.call(this, e);
36108 }
36109 retriesSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__.subscribeToResult)(this, retries);
36110 }
36111 else {
36112 this.errors = null;
36113 this.retriesSubscription = null;
36114 }
36115 this._unsubscribeAndRecycle();
36116 this.errors = errors;
36117 this.retries = retries;
36118 this.retriesSubscription = retriesSubscription;
36119 errors.next(err);
36120 }
36121 };
36122 RetryWhenSubscriber.prototype._unsubscribe = function () {
36123 var _a = this, errors = _a.errors, retriesSubscription = _a.retriesSubscription;
36124 if (errors) {
36125 errors.unsubscribe();
36126 this.errors = null;
36127 }
36128 if (retriesSubscription) {
36129 retriesSubscription.unsubscribe();
36130 this.retriesSubscription = null;
36131 }
36132 this.retries = null;
36133 };
36134 RetryWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
36135 var _unsubscribe = this._unsubscribe;
36136 this._unsubscribe = null;
36137 this._unsubscribeAndRecycle();
36138 this._unsubscribe = _unsubscribe;
36139 this.source.subscribe(this);
36140 };
36141 return RetryWhenSubscriber;
36142}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__.OuterSubscriber));
36143//# sourceMappingURL=retryWhen.js.map
36144
36145
36146/***/ }),
36147/* 332 */
36148/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36149
36150"use strict";
36151__webpack_require__.r(__webpack_exports__);
36152/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36153/* harmony export */ "sample": () => /* binding */ sample
36154/* harmony export */ });
36155/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
36156/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(235);
36157/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
36158/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
36159
36160
36161
36162function sample(notifier) {
36163 return function (source) { return source.lift(new SampleOperator(notifier)); };
36164}
36165var SampleOperator = /*@__PURE__*/ (function () {
36166 function SampleOperator(notifier) {
36167 this.notifier = notifier;
36168 }
36169 SampleOperator.prototype.call = function (subscriber, source) {
36170 var sampleSubscriber = new SampleSubscriber(subscriber);
36171 var subscription = source.subscribe(sampleSubscriber);
36172 subscription.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(sampleSubscriber, this.notifier));
36173 return subscription;
36174 };
36175 return SampleOperator;
36176}());
36177var SampleSubscriber = /*@__PURE__*/ (function (_super) {
36178 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SampleSubscriber, _super);
36179 function SampleSubscriber() {
36180 var _this = _super !== null && _super.apply(this, arguments) || this;
36181 _this.hasValue = false;
36182 return _this;
36183 }
36184 SampleSubscriber.prototype._next = function (value) {
36185 this.value = value;
36186 this.hasValue = true;
36187 };
36188 SampleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
36189 this.emitValue();
36190 };
36191 SampleSubscriber.prototype.notifyComplete = function () {
36192 this.emitValue();
36193 };
36194 SampleSubscriber.prototype.emitValue = function () {
36195 if (this.hasValue) {
36196 this.hasValue = false;
36197 this.destination.next(this.value);
36198 }
36199 };
36200 return SampleSubscriber;
36201}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
36202//# sourceMappingURL=sample.js.map
36203
36204
36205/***/ }),
36206/* 333 */
36207/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36208
36209"use strict";
36210__webpack_require__.r(__webpack_exports__);
36211/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36212/* harmony export */ "sampleTime": () => /* binding */ sampleTime
36213/* harmony export */ });
36214/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
36215/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(168);
36216/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
36217/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async PURE_IMPORTS_END */
36218
36219
36220
36221function sampleTime(period, scheduler) {
36222 if (scheduler === void 0) {
36223 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
36224 }
36225 return function (source) { return source.lift(new SampleTimeOperator(period, scheduler)); };
36226}
36227var SampleTimeOperator = /*@__PURE__*/ (function () {
36228 function SampleTimeOperator(period, scheduler) {
36229 this.period = period;
36230 this.scheduler = scheduler;
36231 }
36232 SampleTimeOperator.prototype.call = function (subscriber, source) {
36233 return source.subscribe(new SampleTimeSubscriber(subscriber, this.period, this.scheduler));
36234 };
36235 return SampleTimeOperator;
36236}());
36237var SampleTimeSubscriber = /*@__PURE__*/ (function (_super) {
36238 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SampleTimeSubscriber, _super);
36239 function SampleTimeSubscriber(destination, period, scheduler) {
36240 var _this = _super.call(this, destination) || this;
36241 _this.period = period;
36242 _this.scheduler = scheduler;
36243 _this.hasValue = false;
36244 _this.add(scheduler.schedule(dispatchNotification, period, { subscriber: _this, period: period }));
36245 return _this;
36246 }
36247 SampleTimeSubscriber.prototype._next = function (value) {
36248 this.lastValue = value;
36249 this.hasValue = true;
36250 };
36251 SampleTimeSubscriber.prototype.notifyNext = function () {
36252 if (this.hasValue) {
36253 this.hasValue = false;
36254 this.destination.next(this.lastValue);
36255 }
36256 };
36257 return SampleTimeSubscriber;
36258}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
36259function dispatchNotification(state) {
36260 var subscriber = state.subscriber, period = state.period;
36261 subscriber.notifyNext();
36262 this.schedule(state, period);
36263}
36264//# sourceMappingURL=sampleTime.js.map
36265
36266
36267/***/ }),
36268/* 334 */
36269/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36270
36271"use strict";
36272__webpack_require__.r(__webpack_exports__);
36273/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36274/* harmony export */ "sequenceEqual": () => /* binding */ sequenceEqual,
36275/* harmony export */ "SequenceEqualOperator": () => /* binding */ SequenceEqualOperator,
36276/* harmony export */ "SequenceEqualSubscriber": () => /* binding */ SequenceEqualSubscriber
36277/* harmony export */ });
36278/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
36279/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
36280/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36281
36282
36283function sequenceEqual(compareTo, comparator) {
36284 return function (source) { return source.lift(new SequenceEqualOperator(compareTo, comparator)); };
36285}
36286var SequenceEqualOperator = /*@__PURE__*/ (function () {
36287 function SequenceEqualOperator(compareTo, comparator) {
36288 this.compareTo = compareTo;
36289 this.comparator = comparator;
36290 }
36291 SequenceEqualOperator.prototype.call = function (subscriber, source) {
36292 return source.subscribe(new SequenceEqualSubscriber(subscriber, this.compareTo, this.comparator));
36293 };
36294 return SequenceEqualOperator;
36295}());
36296
36297var SequenceEqualSubscriber = /*@__PURE__*/ (function (_super) {
36298 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SequenceEqualSubscriber, _super);
36299 function SequenceEqualSubscriber(destination, compareTo, comparator) {
36300 var _this = _super.call(this, destination) || this;
36301 _this.compareTo = compareTo;
36302 _this.comparator = comparator;
36303 _this._a = [];
36304 _this._b = [];
36305 _this._oneComplete = false;
36306 _this.destination.add(compareTo.subscribe(new SequenceEqualCompareToSubscriber(destination, _this)));
36307 return _this;
36308 }
36309 SequenceEqualSubscriber.prototype._next = function (value) {
36310 if (this._oneComplete && this._b.length === 0) {
36311 this.emit(false);
36312 }
36313 else {
36314 this._a.push(value);
36315 this.checkValues();
36316 }
36317 };
36318 SequenceEqualSubscriber.prototype._complete = function () {
36319 if (this._oneComplete) {
36320 this.emit(this._a.length === 0 && this._b.length === 0);
36321 }
36322 else {
36323 this._oneComplete = true;
36324 }
36325 this.unsubscribe();
36326 };
36327 SequenceEqualSubscriber.prototype.checkValues = function () {
36328 var _c = this, _a = _c._a, _b = _c._b, comparator = _c.comparator;
36329 while (_a.length > 0 && _b.length > 0) {
36330 var a = _a.shift();
36331 var b = _b.shift();
36332 var areEqual = false;
36333 try {
36334 areEqual = comparator ? comparator(a, b) : a === b;
36335 }
36336 catch (e) {
36337 this.destination.error(e);
36338 }
36339 if (!areEqual) {
36340 this.emit(false);
36341 }
36342 }
36343 };
36344 SequenceEqualSubscriber.prototype.emit = function (value) {
36345 var destination = this.destination;
36346 destination.next(value);
36347 destination.complete();
36348 };
36349 SequenceEqualSubscriber.prototype.nextB = function (value) {
36350 if (this._oneComplete && this._a.length === 0) {
36351 this.emit(false);
36352 }
36353 else {
36354 this._b.push(value);
36355 this.checkValues();
36356 }
36357 };
36358 SequenceEqualSubscriber.prototype.completeB = function () {
36359 if (this._oneComplete) {
36360 this.emit(this._a.length === 0 && this._b.length === 0);
36361 }
36362 else {
36363 this._oneComplete = true;
36364 }
36365 };
36366 return SequenceEqualSubscriber;
36367}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
36368
36369var SequenceEqualCompareToSubscriber = /*@__PURE__*/ (function (_super) {
36370 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SequenceEqualCompareToSubscriber, _super);
36371 function SequenceEqualCompareToSubscriber(destination, parent) {
36372 var _this = _super.call(this, destination) || this;
36373 _this.parent = parent;
36374 return _this;
36375 }
36376 SequenceEqualCompareToSubscriber.prototype._next = function (value) {
36377 this.parent.nextB(value);
36378 };
36379 SequenceEqualCompareToSubscriber.prototype._error = function (err) {
36380 this.parent.error(err);
36381 this.unsubscribe();
36382 };
36383 SequenceEqualCompareToSubscriber.prototype._complete = function () {
36384 this.parent.completeB();
36385 this.unsubscribe();
36386 };
36387 return SequenceEqualCompareToSubscriber;
36388}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
36389//# sourceMappingURL=sequenceEqual.js.map
36390
36391
36392/***/ }),
36393/* 335 */
36394/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36395
36396"use strict";
36397__webpack_require__.r(__webpack_exports__);
36398/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36399/* harmony export */ "share": () => /* binding */ share
36400/* harmony export */ });
36401/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(318);
36402/* harmony import */ var _refCount__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(184);
36403/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(185);
36404/** PURE_IMPORTS_START _multicast,_refCount,_Subject PURE_IMPORTS_END */
36405
36406
36407
36408function shareSubjectFactory() {
36409 return new _Subject__WEBPACK_IMPORTED_MODULE_0__.Subject();
36410}
36411function share() {
36412 return function (source) { return (0,_refCount__WEBPACK_IMPORTED_MODULE_1__.refCount)()((0,_multicast__WEBPACK_IMPORTED_MODULE_2__.multicast)(shareSubjectFactory)(source)); };
36413}
36414//# sourceMappingURL=share.js.map
36415
36416
36417/***/ }),
36418/* 336 */
36419/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36420
36421"use strict";
36422__webpack_require__.r(__webpack_exports__);
36423/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36424/* harmony export */ "shareReplay": () => /* binding */ shareReplay
36425/* harmony export */ });
36426/* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(190);
36427/** PURE_IMPORTS_START _ReplaySubject PURE_IMPORTS_END */
36428
36429function shareReplay(configOrBufferSize, windowTime, scheduler) {
36430 var config;
36431 if (configOrBufferSize && typeof configOrBufferSize === 'object') {
36432 config = configOrBufferSize;
36433 }
36434 else {
36435 config = {
36436 bufferSize: configOrBufferSize,
36437 windowTime: windowTime,
36438 refCount: false,
36439 scheduler: scheduler
36440 };
36441 }
36442 return function (source) { return source.lift(shareReplayOperator(config)); };
36443}
36444function shareReplayOperator(_a) {
36445 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;
36446 var subject;
36447 var refCount = 0;
36448 var subscription;
36449 var hasError = false;
36450 var isComplete = false;
36451 return function shareReplayOperation(source) {
36452 refCount++;
36453 if (!subject || hasError) {
36454 hasError = false;
36455 subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__.ReplaySubject(bufferSize, windowTime, scheduler);
36456 subscription = source.subscribe({
36457 next: function (value) { subject.next(value); },
36458 error: function (err) {
36459 hasError = true;
36460 subject.error(err);
36461 },
36462 complete: function () {
36463 isComplete = true;
36464 subscription = undefined;
36465 subject.complete();
36466 },
36467 });
36468 }
36469 var innerSub = subject.subscribe(this);
36470 this.add(function () {
36471 refCount--;
36472 innerSub.unsubscribe();
36473 if (subscription && !isComplete && useRefCount && refCount === 0) {
36474 subscription.unsubscribe();
36475 subscription = undefined;
36476 subject = undefined;
36477 }
36478 });
36479 };
36480}
36481//# sourceMappingURL=shareReplay.js.map
36482
36483
36484/***/ }),
36485/* 337 */
36486/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36487
36488"use strict";
36489__webpack_require__.r(__webpack_exports__);
36490/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36491/* harmony export */ "single": () => /* binding */ single
36492/* harmony export */ });
36493/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
36494/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(168);
36495/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(220);
36496/** PURE_IMPORTS_START tslib,_Subscriber,_util_EmptyError PURE_IMPORTS_END */
36497
36498
36499
36500function single(predicate) {
36501 return function (source) { return source.lift(new SingleOperator(predicate, source)); };
36502}
36503var SingleOperator = /*@__PURE__*/ (function () {
36504 function SingleOperator(predicate, source) {
36505 this.predicate = predicate;
36506 this.source = source;
36507 }
36508 SingleOperator.prototype.call = function (subscriber, source) {
36509 return source.subscribe(new SingleSubscriber(subscriber, this.predicate, this.source));
36510 };
36511 return SingleOperator;
36512}());
36513var SingleSubscriber = /*@__PURE__*/ (function (_super) {
36514 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SingleSubscriber, _super);
36515 function SingleSubscriber(destination, predicate, source) {
36516 var _this = _super.call(this, destination) || this;
36517 _this.predicate = predicate;
36518 _this.source = source;
36519 _this.seenValue = false;
36520 _this.index = 0;
36521 return _this;
36522 }
36523 SingleSubscriber.prototype.applySingleValue = function (value) {
36524 if (this.seenValue) {
36525 this.destination.error('Sequence contains more than one element');
36526 }
36527 else {
36528 this.seenValue = true;
36529 this.singleValue = value;
36530 }
36531 };
36532 SingleSubscriber.prototype._next = function (value) {
36533 var index = this.index++;
36534 if (this.predicate) {
36535 this.tryNext(value, index);
36536 }
36537 else {
36538 this.applySingleValue(value);
36539 }
36540 };
36541 SingleSubscriber.prototype.tryNext = function (value, index) {
36542 try {
36543 if (this.predicate(value, index, this.source)) {
36544 this.applySingleValue(value);
36545 }
36546 }
36547 catch (err) {
36548 this.destination.error(err);
36549 }
36550 };
36551 SingleSubscriber.prototype._complete = function () {
36552 var destination = this.destination;
36553 if (this.index > 0) {
36554 destination.next(this.seenValue ? this.singleValue : undefined);
36555 destination.complete();
36556 }
36557 else {
36558 destination.error(new _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__.EmptyError);
36559 }
36560 };
36561 return SingleSubscriber;
36562}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
36563//# sourceMappingURL=single.js.map
36564
36565
36566/***/ }),
36567/* 338 */
36568/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36569
36570"use strict";
36571__webpack_require__.r(__webpack_exports__);
36572/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36573/* harmony export */ "skip": () => /* binding */ skip
36574/* harmony export */ });
36575/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
36576/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
36577/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36578
36579
36580function skip(count) {
36581 return function (source) { return source.lift(new SkipOperator(count)); };
36582}
36583var SkipOperator = /*@__PURE__*/ (function () {
36584 function SkipOperator(total) {
36585 this.total = total;
36586 }
36587 SkipOperator.prototype.call = function (subscriber, source) {
36588 return source.subscribe(new SkipSubscriber(subscriber, this.total));
36589 };
36590 return SkipOperator;
36591}());
36592var SkipSubscriber = /*@__PURE__*/ (function (_super) {
36593 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SkipSubscriber, _super);
36594 function SkipSubscriber(destination, total) {
36595 var _this = _super.call(this, destination) || this;
36596 _this.total = total;
36597 _this.count = 0;
36598 return _this;
36599 }
36600 SkipSubscriber.prototype._next = function (x) {
36601 if (++this.count > this.total) {
36602 this.destination.next(x);
36603 }
36604 };
36605 return SkipSubscriber;
36606}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
36607//# sourceMappingURL=skip.js.map
36608
36609
36610/***/ }),
36611/* 339 */
36612/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36613
36614"use strict";
36615__webpack_require__.r(__webpack_exports__);
36616/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36617/* harmony export */ "skipLast": () => /* binding */ skipLast
36618/* harmony export */ });
36619/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
36620/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(168);
36621/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(219);
36622/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError PURE_IMPORTS_END */
36623
36624
36625
36626function skipLast(count) {
36627 return function (source) { return source.lift(new SkipLastOperator(count)); };
36628}
36629var SkipLastOperator = /*@__PURE__*/ (function () {
36630 function SkipLastOperator(_skipCount) {
36631 this._skipCount = _skipCount;
36632 if (this._skipCount < 0) {
36633 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__.ArgumentOutOfRangeError;
36634 }
36635 }
36636 SkipLastOperator.prototype.call = function (subscriber, source) {
36637 if (this._skipCount === 0) {
36638 return source.subscribe(new _Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber(subscriber));
36639 }
36640 else {
36641 return source.subscribe(new SkipLastSubscriber(subscriber, this._skipCount));
36642 }
36643 };
36644 return SkipLastOperator;
36645}());
36646var SkipLastSubscriber = /*@__PURE__*/ (function (_super) {
36647 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SkipLastSubscriber, _super);
36648 function SkipLastSubscriber(destination, _skipCount) {
36649 var _this = _super.call(this, destination) || this;
36650 _this._skipCount = _skipCount;
36651 _this._count = 0;
36652 _this._ring = new Array(_skipCount);
36653 return _this;
36654 }
36655 SkipLastSubscriber.prototype._next = function (value) {
36656 var skipCount = this._skipCount;
36657 var count = this._count++;
36658 if (count < skipCount) {
36659 this._ring[count] = value;
36660 }
36661 else {
36662 var currentIndex = count % skipCount;
36663 var ring = this._ring;
36664 var oldValue = ring[currentIndex];
36665 ring[currentIndex] = value;
36666 this.destination.next(oldValue);
36667 }
36668 };
36669 return SkipLastSubscriber;
36670}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
36671//# sourceMappingURL=skipLast.js.map
36672
36673
36674/***/ }),
36675/* 340 */
36676/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36677
36678"use strict";
36679__webpack_require__.r(__webpack_exports__);
36680/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36681/* harmony export */ "skipUntil": () => /* binding */ skipUntil
36682/* harmony export */ });
36683/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
36684/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(235);
36685/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
36686/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(226);
36687/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
36688
36689
36690
36691
36692function skipUntil(notifier) {
36693 return function (source) { return source.lift(new SkipUntilOperator(notifier)); };
36694}
36695var SkipUntilOperator = /*@__PURE__*/ (function () {
36696 function SkipUntilOperator(notifier) {
36697 this.notifier = notifier;
36698 }
36699 SkipUntilOperator.prototype.call = function (destination, source) {
36700 return source.subscribe(new SkipUntilSubscriber(destination, this.notifier));
36701 };
36702 return SkipUntilOperator;
36703}());
36704var SkipUntilSubscriber = /*@__PURE__*/ (function (_super) {
36705 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SkipUntilSubscriber, _super);
36706 function SkipUntilSubscriber(destination, notifier) {
36707 var _this = _super.call(this, destination) || this;
36708 _this.hasValue = false;
36709 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__.InnerSubscriber(_this, undefined, undefined);
36710 _this.add(innerSubscriber);
36711 _this.innerSubscription = innerSubscriber;
36712 var innerSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__.subscribeToResult)(_this, notifier, undefined, undefined, innerSubscriber);
36713 if (innerSubscription !== innerSubscriber) {
36714 _this.add(innerSubscription);
36715 _this.innerSubscription = innerSubscription;
36716 }
36717 return _this;
36718 }
36719 SkipUntilSubscriber.prototype._next = function (value) {
36720 if (this.hasValue) {
36721 _super.prototype._next.call(this, value);
36722 }
36723 };
36724 SkipUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
36725 this.hasValue = true;
36726 if (this.innerSubscription) {
36727 this.innerSubscription.unsubscribe();
36728 }
36729 };
36730 SkipUntilSubscriber.prototype.notifyComplete = function () {
36731 };
36732 return SkipUntilSubscriber;
36733}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__.OuterSubscriber));
36734//# sourceMappingURL=skipUntil.js.map
36735
36736
36737/***/ }),
36738/* 341 */
36739/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36740
36741"use strict";
36742__webpack_require__.r(__webpack_exports__);
36743/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36744/* harmony export */ "skipWhile": () => /* binding */ skipWhile
36745/* harmony export */ });
36746/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
36747/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
36748/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36749
36750
36751function skipWhile(predicate) {
36752 return function (source) { return source.lift(new SkipWhileOperator(predicate)); };
36753}
36754var SkipWhileOperator = /*@__PURE__*/ (function () {
36755 function SkipWhileOperator(predicate) {
36756 this.predicate = predicate;
36757 }
36758 SkipWhileOperator.prototype.call = function (subscriber, source) {
36759 return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));
36760 };
36761 return SkipWhileOperator;
36762}());
36763var SkipWhileSubscriber = /*@__PURE__*/ (function (_super) {
36764 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SkipWhileSubscriber, _super);
36765 function SkipWhileSubscriber(destination, predicate) {
36766 var _this = _super.call(this, destination) || this;
36767 _this.predicate = predicate;
36768 _this.skipping = true;
36769 _this.index = 0;
36770 return _this;
36771 }
36772 SkipWhileSubscriber.prototype._next = function (value) {
36773 var destination = this.destination;
36774 if (this.skipping) {
36775 this.tryCallPredicate(value);
36776 }
36777 if (!this.skipping) {
36778 destination.next(value);
36779 }
36780 };
36781 SkipWhileSubscriber.prototype.tryCallPredicate = function (value) {
36782 try {
36783 var result = this.predicate(value, this.index++);
36784 this.skipping = Boolean(result);
36785 }
36786 catch (err) {
36787 this.destination.error(err);
36788 }
36789 };
36790 return SkipWhileSubscriber;
36791}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
36792//# sourceMappingURL=skipWhile.js.map
36793
36794
36795/***/ }),
36796/* 342 */
36797/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36798
36799"use strict";
36800__webpack_require__.r(__webpack_exports__);
36801/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36802/* harmony export */ "startWith": () => /* binding */ startWith
36803/* harmony export */ });
36804/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(236);
36805/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(194);
36806/** PURE_IMPORTS_START _observable_concat,_util_isScheduler PURE_IMPORTS_END */
36807
36808
36809function startWith() {
36810 var array = [];
36811 for (var _i = 0; _i < arguments.length; _i++) {
36812 array[_i] = arguments[_i];
36813 }
36814 var scheduler = array[array.length - 1];
36815 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__.isScheduler)(scheduler)) {
36816 array.pop();
36817 return function (source) { return (0,_observable_concat__WEBPACK_IMPORTED_MODULE_1__.concat)(array, source, scheduler); };
36818 }
36819 else {
36820 return function (source) { return (0,_observable_concat__WEBPACK_IMPORTED_MODULE_1__.concat)(array, source); };
36821 }
36822}
36823//# sourceMappingURL=startWith.js.map
36824
36825
36826/***/ }),
36827/* 343 */
36828/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36829
36830"use strict";
36831__webpack_require__.r(__webpack_exports__);
36832/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36833/* harmony export */ "subscribeOn": () => /* binding */ subscribeOn
36834/* harmony export */ });
36835/* harmony import */ var _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(344);
36836/** PURE_IMPORTS_START _observable_SubscribeOnObservable PURE_IMPORTS_END */
36837
36838function subscribeOn(scheduler, delay) {
36839 if (delay === void 0) {
36840 delay = 0;
36841 }
36842 return function subscribeOnOperatorFunction(source) {
36843 return source.lift(new SubscribeOnOperator(scheduler, delay));
36844 };
36845}
36846var SubscribeOnOperator = /*@__PURE__*/ (function () {
36847 function SubscribeOnOperator(scheduler, delay) {
36848 this.scheduler = scheduler;
36849 this.delay = delay;
36850 }
36851 SubscribeOnOperator.prototype.call = function (subscriber, source) {
36852 return new _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__.SubscribeOnObservable(source, this.delay, this.scheduler).subscribe(subscriber);
36853 };
36854 return SubscribeOnOperator;
36855}());
36856//# sourceMappingURL=subscribeOn.js.map
36857
36858
36859/***/ }),
36860/* 344 */
36861/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36862
36863"use strict";
36864__webpack_require__.r(__webpack_exports__);
36865/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36866/* harmony export */ "SubscribeOnObservable": () => /* binding */ SubscribeOnObservable
36867/* harmony export */ });
36868/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
36869/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(166);
36870/* harmony import */ var _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(208);
36871/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(254);
36872/** PURE_IMPORTS_START tslib,_Observable,_scheduler_asap,_util_isNumeric PURE_IMPORTS_END */
36873
36874
36875
36876
36877var SubscribeOnObservable = /*@__PURE__*/ (function (_super) {
36878 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SubscribeOnObservable, _super);
36879 function SubscribeOnObservable(source, delayTime, scheduler) {
36880 if (delayTime === void 0) {
36881 delayTime = 0;
36882 }
36883 if (scheduler === void 0) {
36884 scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__.asap;
36885 }
36886 var _this = _super.call(this) || this;
36887 _this.source = source;
36888 _this.delayTime = delayTime;
36889 _this.scheduler = scheduler;
36890 if (!(0,_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__.isNumeric)(delayTime) || delayTime < 0) {
36891 _this.delayTime = 0;
36892 }
36893 if (!scheduler || typeof scheduler.schedule !== 'function') {
36894 _this.scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__.asap;
36895 }
36896 return _this;
36897 }
36898 SubscribeOnObservable.create = function (source, delay, scheduler) {
36899 if (delay === void 0) {
36900 delay = 0;
36901 }
36902 if (scheduler === void 0) {
36903 scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__.asap;
36904 }
36905 return new SubscribeOnObservable(source, delay, scheduler);
36906 };
36907 SubscribeOnObservable.dispatch = function (arg) {
36908 var source = arg.source, subscriber = arg.subscriber;
36909 return this.add(source.subscribe(subscriber));
36910 };
36911 SubscribeOnObservable.prototype._subscribe = function (subscriber) {
36912 var delay = this.delayTime;
36913 var source = this.source;
36914 var scheduler = this.scheduler;
36915 return scheduler.schedule(SubscribeOnObservable.dispatch, delay, {
36916 source: source, subscriber: subscriber
36917 });
36918 };
36919 return SubscribeOnObservable;
36920}(_Observable__WEBPACK_IMPORTED_MODULE_3__.Observable));
36921
36922//# sourceMappingURL=SubscribeOnObservable.js.map
36923
36924
36925/***/ }),
36926/* 345 */
36927/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36928
36929"use strict";
36930__webpack_require__.r(__webpack_exports__);
36931/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36932/* harmony export */ "switchAll": () => /* binding */ switchAll
36933/* harmony export */ });
36934/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(346);
36935/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(182);
36936/** PURE_IMPORTS_START _switchMap,_util_identity PURE_IMPORTS_END */
36937
36938
36939function switchAll() {
36940 return (0,_switchMap__WEBPACK_IMPORTED_MODULE_0__.switchMap)(_util_identity__WEBPACK_IMPORTED_MODULE_1__.identity);
36941}
36942//# sourceMappingURL=switchAll.js.map
36943
36944
36945/***/ }),
36946/* 346 */
36947/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36948
36949"use strict";
36950__webpack_require__.r(__webpack_exports__);
36951/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36952/* harmony export */ "switchMap": () => /* binding */ switchMap
36953/* harmony export */ });
36954/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
36955/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(235);
36956/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
36957/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(226);
36958/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(223);
36959/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(240);
36960/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult,_map,_observable_from PURE_IMPORTS_END */
36961
36962
36963
36964
36965
36966
36967function switchMap(project, resultSelector) {
36968 if (typeof resultSelector === 'function') {
36969 return function (source) { return source.pipe(switchMap(function (a, i) { return (0,_observable_from__WEBPACK_IMPORTED_MODULE_1__.from)(project(a, i)).pipe((0,_map__WEBPACK_IMPORTED_MODULE_2__.map)(function (b, ii) { return resultSelector(a, b, i, ii); })); })); };
36970 }
36971 return function (source) { return source.lift(new SwitchMapOperator(project)); };
36972}
36973var SwitchMapOperator = /*@__PURE__*/ (function () {
36974 function SwitchMapOperator(project) {
36975 this.project = project;
36976 }
36977 SwitchMapOperator.prototype.call = function (subscriber, source) {
36978 return source.subscribe(new SwitchMapSubscriber(subscriber, this.project));
36979 };
36980 return SwitchMapOperator;
36981}());
36982var SwitchMapSubscriber = /*@__PURE__*/ (function (_super) {
36983 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SwitchMapSubscriber, _super);
36984 function SwitchMapSubscriber(destination, project) {
36985 var _this = _super.call(this, destination) || this;
36986 _this.project = project;
36987 _this.index = 0;
36988 return _this;
36989 }
36990 SwitchMapSubscriber.prototype._next = function (value) {
36991 var result;
36992 var index = this.index++;
36993 try {
36994 result = this.project(value, index);
36995 }
36996 catch (error) {
36997 this.destination.error(error);
36998 return;
36999 }
37000 this._innerSub(result, value, index);
37001 };
37002 SwitchMapSubscriber.prototype._innerSub = function (result, value, index) {
37003 var innerSubscription = this.innerSubscription;
37004 if (innerSubscription) {
37005 innerSubscription.unsubscribe();
37006 }
37007 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__.InnerSubscriber(this, value, index);
37008 var destination = this.destination;
37009 destination.add(innerSubscriber);
37010 this.innerSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__.subscribeToResult)(this, result, undefined, undefined, innerSubscriber);
37011 if (this.innerSubscription !== innerSubscriber) {
37012 destination.add(this.innerSubscription);
37013 }
37014 };
37015 SwitchMapSubscriber.prototype._complete = function () {
37016 var innerSubscription = this.innerSubscription;
37017 if (!innerSubscription || innerSubscription.closed) {
37018 _super.prototype._complete.call(this);
37019 }
37020 this.unsubscribe();
37021 };
37022 SwitchMapSubscriber.prototype._unsubscribe = function () {
37023 this.innerSubscription = null;
37024 };
37025 SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) {
37026 var destination = this.destination;
37027 destination.remove(innerSub);
37028 this.innerSubscription = null;
37029 if (this.isStopped) {
37030 _super.prototype._complete.call(this);
37031 }
37032 };
37033 SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
37034 this.destination.next(innerValue);
37035 };
37036 return SwitchMapSubscriber;
37037}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_5__.OuterSubscriber));
37038//# sourceMappingURL=switchMap.js.map
37039
37040
37041/***/ }),
37042/* 347 */
37043/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37044
37045"use strict";
37046__webpack_require__.r(__webpack_exports__);
37047/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37048/* harmony export */ "switchMapTo": () => /* binding */ switchMapTo
37049/* harmony export */ });
37050/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(346);
37051/** PURE_IMPORTS_START _switchMap PURE_IMPORTS_END */
37052
37053function switchMapTo(innerObservable, resultSelector) {
37054 return resultSelector ? (0,_switchMap__WEBPACK_IMPORTED_MODULE_0__.switchMap)(function () { return innerObservable; }, resultSelector) : (0,_switchMap__WEBPACK_IMPORTED_MODULE_0__.switchMap)(function () { return innerObservable; });
37055}
37056//# sourceMappingURL=switchMapTo.js.map
37057
37058
37059/***/ }),
37060/* 348 */
37061/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37062
37063"use strict";
37064__webpack_require__.r(__webpack_exports__);
37065/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37066/* harmony export */ "takeUntil": () => /* binding */ takeUntil
37067/* harmony export */ });
37068/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
37069/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(235);
37070/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
37071/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37072
37073
37074
37075function takeUntil(notifier) {
37076 return function (source) { return source.lift(new TakeUntilOperator(notifier)); };
37077}
37078var TakeUntilOperator = /*@__PURE__*/ (function () {
37079 function TakeUntilOperator(notifier) {
37080 this.notifier = notifier;
37081 }
37082 TakeUntilOperator.prototype.call = function (subscriber, source) {
37083 var takeUntilSubscriber = new TakeUntilSubscriber(subscriber);
37084 var notifierSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(takeUntilSubscriber, this.notifier);
37085 if (notifierSubscription && !takeUntilSubscriber.seenValue) {
37086 takeUntilSubscriber.add(notifierSubscription);
37087 return source.subscribe(takeUntilSubscriber);
37088 }
37089 return takeUntilSubscriber;
37090 };
37091 return TakeUntilOperator;
37092}());
37093var TakeUntilSubscriber = /*@__PURE__*/ (function (_super) {
37094 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(TakeUntilSubscriber, _super);
37095 function TakeUntilSubscriber(destination) {
37096 var _this = _super.call(this, destination) || this;
37097 _this.seenValue = false;
37098 return _this;
37099 }
37100 TakeUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
37101 this.seenValue = true;
37102 this.complete();
37103 };
37104 TakeUntilSubscriber.prototype.notifyComplete = function () {
37105 };
37106 return TakeUntilSubscriber;
37107}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
37108//# sourceMappingURL=takeUntil.js.map
37109
37110
37111/***/ }),
37112/* 349 */
37113/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37114
37115"use strict";
37116__webpack_require__.r(__webpack_exports__);
37117/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37118/* harmony export */ "takeWhile": () => /* binding */ takeWhile
37119/* harmony export */ });
37120/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
37121/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(168);
37122/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
37123
37124
37125function takeWhile(predicate, inclusive) {
37126 if (inclusive === void 0) {
37127 inclusive = false;
37128 }
37129 return function (source) {
37130 return source.lift(new TakeWhileOperator(predicate, inclusive));
37131 };
37132}
37133var TakeWhileOperator = /*@__PURE__*/ (function () {
37134 function TakeWhileOperator(predicate, inclusive) {
37135 this.predicate = predicate;
37136 this.inclusive = inclusive;
37137 }
37138 TakeWhileOperator.prototype.call = function (subscriber, source) {
37139 return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate, this.inclusive));
37140 };
37141 return TakeWhileOperator;
37142}());
37143var TakeWhileSubscriber = /*@__PURE__*/ (function (_super) {
37144 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(TakeWhileSubscriber, _super);
37145 function TakeWhileSubscriber(destination, predicate, inclusive) {
37146 var _this = _super.call(this, destination) || this;
37147 _this.predicate = predicate;
37148 _this.inclusive = inclusive;
37149 _this.index = 0;
37150 return _this;
37151 }
37152 TakeWhileSubscriber.prototype._next = function (value) {
37153 var destination = this.destination;
37154 var result;
37155 try {
37156 result = this.predicate(value, this.index++);
37157 }
37158 catch (err) {
37159 destination.error(err);
37160 return;
37161 }
37162 this.nextOrComplete(value, result);
37163 };
37164 TakeWhileSubscriber.prototype.nextOrComplete = function (value, predicateResult) {
37165 var destination = this.destination;
37166 if (Boolean(predicateResult)) {
37167 destination.next(value);
37168 }
37169 else {
37170 if (this.inclusive) {
37171 destination.next(value);
37172 }
37173 destination.complete();
37174 }
37175 };
37176 return TakeWhileSubscriber;
37177}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
37178//# sourceMappingURL=takeWhile.js.map
37179
37180
37181/***/ }),
37182/* 350 */
37183/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37184
37185"use strict";
37186__webpack_require__.r(__webpack_exports__);
37187/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37188/* harmony export */ "tap": () => /* binding */ tap
37189/* harmony export */ });
37190/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
37191/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(168);
37192/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(217);
37193/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(175);
37194/** PURE_IMPORTS_START tslib,_Subscriber,_util_noop,_util_isFunction PURE_IMPORTS_END */
37195
37196
37197
37198
37199function tap(nextOrObserver, error, complete) {
37200 return function tapOperatorFunction(source) {
37201 return source.lift(new DoOperator(nextOrObserver, error, complete));
37202 };
37203}
37204var DoOperator = /*@__PURE__*/ (function () {
37205 function DoOperator(nextOrObserver, error, complete) {
37206 this.nextOrObserver = nextOrObserver;
37207 this.error = error;
37208 this.complete = complete;
37209 }
37210 DoOperator.prototype.call = function (subscriber, source) {
37211 return source.subscribe(new TapSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));
37212 };
37213 return DoOperator;
37214}());
37215var TapSubscriber = /*@__PURE__*/ (function (_super) {
37216 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(TapSubscriber, _super);
37217 function TapSubscriber(destination, observerOrNext, error, complete) {
37218 var _this = _super.call(this, destination) || this;
37219 _this._tapNext = _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
37220 _this._tapError = _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
37221 _this._tapComplete = _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
37222 _this._tapError = error || _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
37223 _this._tapComplete = complete || _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
37224 if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observerOrNext)) {
37225 _this._context = _this;
37226 _this._tapNext = observerOrNext;
37227 }
37228 else if (observerOrNext) {
37229 _this._context = observerOrNext;
37230 _this._tapNext = observerOrNext.next || _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
37231 _this._tapError = observerOrNext.error || _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
37232 _this._tapComplete = observerOrNext.complete || _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
37233 }
37234 return _this;
37235 }
37236 TapSubscriber.prototype._next = function (value) {
37237 try {
37238 this._tapNext.call(this._context, value);
37239 }
37240 catch (err) {
37241 this.destination.error(err);
37242 return;
37243 }
37244 this.destination.next(value);
37245 };
37246 TapSubscriber.prototype._error = function (err) {
37247 try {
37248 this._tapError.call(this._context, err);
37249 }
37250 catch (err) {
37251 this.destination.error(err);
37252 return;
37253 }
37254 this.destination.error(err);
37255 };
37256 TapSubscriber.prototype._complete = function () {
37257 try {
37258 this._tapComplete.call(this._context);
37259 }
37260 catch (err) {
37261 this.destination.error(err);
37262 return;
37263 }
37264 return this.destination.complete();
37265 };
37266 return TapSubscriber;
37267}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__.Subscriber));
37268//# sourceMappingURL=tap.js.map
37269
37270
37271/***/ }),
37272/* 351 */
37273/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37274
37275"use strict";
37276__webpack_require__.r(__webpack_exports__);
37277/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37278/* harmony export */ "defaultThrottleConfig": () => /* binding */ defaultThrottleConfig,
37279/* harmony export */ "throttle": () => /* binding */ throttle
37280/* harmony export */ });
37281/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
37282/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(235);
37283/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
37284/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37285
37286
37287
37288var defaultThrottleConfig = {
37289 leading: true,
37290 trailing: false
37291};
37292function throttle(durationSelector, config) {
37293 if (config === void 0) {
37294 config = defaultThrottleConfig;
37295 }
37296 return function (source) { return source.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing)); };
37297}
37298var ThrottleOperator = /*@__PURE__*/ (function () {
37299 function ThrottleOperator(durationSelector, leading, trailing) {
37300 this.durationSelector = durationSelector;
37301 this.leading = leading;
37302 this.trailing = trailing;
37303 }
37304 ThrottleOperator.prototype.call = function (subscriber, source) {
37305 return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));
37306 };
37307 return ThrottleOperator;
37308}());
37309var ThrottleSubscriber = /*@__PURE__*/ (function (_super) {
37310 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ThrottleSubscriber, _super);
37311 function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {
37312 var _this = _super.call(this, destination) || this;
37313 _this.destination = destination;
37314 _this.durationSelector = durationSelector;
37315 _this._leading = _leading;
37316 _this._trailing = _trailing;
37317 _this._hasValue = false;
37318 return _this;
37319 }
37320 ThrottleSubscriber.prototype._next = function (value) {
37321 this._hasValue = true;
37322 this._sendValue = value;
37323 if (!this._throttled) {
37324 if (this._leading) {
37325 this.send();
37326 }
37327 else {
37328 this.throttle(value);
37329 }
37330 }
37331 };
37332 ThrottleSubscriber.prototype.send = function () {
37333 var _a = this, _hasValue = _a._hasValue, _sendValue = _a._sendValue;
37334 if (_hasValue) {
37335 this.destination.next(_sendValue);
37336 this.throttle(_sendValue);
37337 }
37338 this._hasValue = false;
37339 this._sendValue = null;
37340 };
37341 ThrottleSubscriber.prototype.throttle = function (value) {
37342 var duration = this.tryDurationSelector(value);
37343 if (!!duration) {
37344 this.add(this._throttled = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(this, duration));
37345 }
37346 };
37347 ThrottleSubscriber.prototype.tryDurationSelector = function (value) {
37348 try {
37349 return this.durationSelector(value);
37350 }
37351 catch (err) {
37352 this.destination.error(err);
37353 return null;
37354 }
37355 };
37356 ThrottleSubscriber.prototype.throttlingDone = function () {
37357 var _a = this, _throttled = _a._throttled, _trailing = _a._trailing;
37358 if (_throttled) {
37359 _throttled.unsubscribe();
37360 }
37361 this._throttled = null;
37362 if (_trailing) {
37363 this.send();
37364 }
37365 };
37366 ThrottleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
37367 this.throttlingDone();
37368 };
37369 ThrottleSubscriber.prototype.notifyComplete = function () {
37370 this.throttlingDone();
37371 };
37372 return ThrottleSubscriber;
37373}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
37374//# sourceMappingURL=throttle.js.map
37375
37376
37377/***/ }),
37378/* 352 */
37379/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37380
37381"use strict";
37382__webpack_require__.r(__webpack_exports__);
37383/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37384/* harmony export */ "throttleTime": () => /* binding */ throttleTime
37385/* harmony export */ });
37386/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
37387/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(168);
37388/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
37389/* harmony import */ var _throttle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(351);
37390/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async,_throttle PURE_IMPORTS_END */
37391
37392
37393
37394
37395function throttleTime(duration, scheduler, config) {
37396 if (scheduler === void 0) {
37397 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
37398 }
37399 if (config === void 0) {
37400 config = _throttle__WEBPACK_IMPORTED_MODULE_2__.defaultThrottleConfig;
37401 }
37402 return function (source) { return source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing)); };
37403}
37404var ThrottleTimeOperator = /*@__PURE__*/ (function () {
37405 function ThrottleTimeOperator(duration, scheduler, leading, trailing) {
37406 this.duration = duration;
37407 this.scheduler = scheduler;
37408 this.leading = leading;
37409 this.trailing = trailing;
37410 }
37411 ThrottleTimeOperator.prototype.call = function (subscriber, source) {
37412 return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));
37413 };
37414 return ThrottleTimeOperator;
37415}());
37416var ThrottleTimeSubscriber = /*@__PURE__*/ (function (_super) {
37417 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ThrottleTimeSubscriber, _super);
37418 function ThrottleTimeSubscriber(destination, duration, scheduler, leading, trailing) {
37419 var _this = _super.call(this, destination) || this;
37420 _this.duration = duration;
37421 _this.scheduler = scheduler;
37422 _this.leading = leading;
37423 _this.trailing = trailing;
37424 _this._hasTrailingValue = false;
37425 _this._trailingValue = null;
37426 return _this;
37427 }
37428 ThrottleTimeSubscriber.prototype._next = function (value) {
37429 if (this.throttled) {
37430 if (this.trailing) {
37431 this._trailingValue = value;
37432 this._hasTrailingValue = true;
37433 }
37434 }
37435 else {
37436 this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));
37437 if (this.leading) {
37438 this.destination.next(value);
37439 }
37440 else if (this.trailing) {
37441 this._trailingValue = value;
37442 this._hasTrailingValue = true;
37443 }
37444 }
37445 };
37446 ThrottleTimeSubscriber.prototype._complete = function () {
37447 if (this._hasTrailingValue) {
37448 this.destination.next(this._trailingValue);
37449 this.destination.complete();
37450 }
37451 else {
37452 this.destination.complete();
37453 }
37454 };
37455 ThrottleTimeSubscriber.prototype.clearThrottle = function () {
37456 var throttled = this.throttled;
37457 if (throttled) {
37458 if (this.trailing && this._hasTrailingValue) {
37459 this.destination.next(this._trailingValue);
37460 this._trailingValue = null;
37461 this._hasTrailingValue = false;
37462 }
37463 throttled.unsubscribe();
37464 this.remove(throttled);
37465 this.throttled = null;
37466 }
37467 };
37468 return ThrottleTimeSubscriber;
37469}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__.Subscriber));
37470function dispatchNext(arg) {
37471 var subscriber = arg.subscriber;
37472 subscriber.clearThrottle();
37473}
37474//# sourceMappingURL=throttleTime.js.map
37475
37476
37477/***/ }),
37478/* 353 */
37479/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37480
37481"use strict";
37482__webpack_require__.r(__webpack_exports__);
37483/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37484/* harmony export */ "timeInterval": () => /* binding */ timeInterval,
37485/* harmony export */ "TimeInterval": () => /* binding */ TimeInterval
37486/* harmony export */ });
37487/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(212);
37488/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(313);
37489/* harmony import */ var _observable_defer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(247);
37490/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(223);
37491/** PURE_IMPORTS_START _scheduler_async,_scan,_observable_defer,_map PURE_IMPORTS_END */
37492
37493
37494
37495
37496function timeInterval(scheduler) {
37497 if (scheduler === void 0) {
37498 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async;
37499 }
37500 return function (source) {
37501 return (0,_observable_defer__WEBPACK_IMPORTED_MODULE_1__.defer)(function () {
37502 return source.pipe((0,_scan__WEBPACK_IMPORTED_MODULE_2__.scan)(function (_a, value) {
37503 var current = _a.current;
37504 return ({ value: value, current: scheduler.now(), last: current });
37505 }, { current: scheduler.now(), value: undefined, last: undefined }), (0,_map__WEBPACK_IMPORTED_MODULE_3__.map)(function (_a) {
37506 var current = _a.current, last = _a.last, value = _a.value;
37507 return new TimeInterval(value, current - last);
37508 }));
37509 });
37510 };
37511}
37512var TimeInterval = /*@__PURE__*/ (function () {
37513 function TimeInterval(value, interval) {
37514 this.value = value;
37515 this.interval = interval;
37516 }
37517 return TimeInterval;
37518}());
37519
37520//# sourceMappingURL=timeInterval.js.map
37521
37522
37523/***/ }),
37524/* 354 */
37525/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37526
37527"use strict";
37528__webpack_require__.r(__webpack_exports__);
37529/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37530/* harmony export */ "timeout": () => /* binding */ timeout
37531/* harmony export */ });
37532/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(212);
37533/* harmony import */ var _util_TimeoutError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(221);
37534/* harmony import */ var _timeoutWith__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(355);
37535/* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(198);
37536/** PURE_IMPORTS_START _scheduler_async,_util_TimeoutError,_timeoutWith,_observable_throwError PURE_IMPORTS_END */
37537
37538
37539
37540
37541function timeout(due, scheduler) {
37542 if (scheduler === void 0) {
37543 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async;
37544 }
37545 return (0,_timeoutWith__WEBPACK_IMPORTED_MODULE_1__.timeoutWith)(due, (0,_observable_throwError__WEBPACK_IMPORTED_MODULE_2__.throwError)(new _util_TimeoutError__WEBPACK_IMPORTED_MODULE_3__.TimeoutError()), scheduler);
37546}
37547//# sourceMappingURL=timeout.js.map
37548
37549
37550/***/ }),
37551/* 355 */
37552/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37553
37554"use strict";
37555__webpack_require__.r(__webpack_exports__);
37556/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37557/* harmony export */ "timeoutWith": () => /* binding */ timeoutWith
37558/* harmony export */ });
37559/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
37560/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
37561/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(287);
37562/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(235);
37563/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(226);
37564/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37565
37566
37567
37568
37569
37570function timeoutWith(due, withObservable, scheduler) {
37571 if (scheduler === void 0) {
37572 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
37573 }
37574 return function (source) {
37575 var absoluteTimeout = (0,_util_isDate__WEBPACK_IMPORTED_MODULE_2__.isDate)(due);
37576 var waitFor = absoluteTimeout ? (+due - scheduler.now()) : Math.abs(due);
37577 return source.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler));
37578 };
37579}
37580var TimeoutWithOperator = /*@__PURE__*/ (function () {
37581 function TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler) {
37582 this.waitFor = waitFor;
37583 this.absoluteTimeout = absoluteTimeout;
37584 this.withObservable = withObservable;
37585 this.scheduler = scheduler;
37586 }
37587 TimeoutWithOperator.prototype.call = function (subscriber, source) {
37588 return source.subscribe(new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler));
37589 };
37590 return TimeoutWithOperator;
37591}());
37592var TimeoutWithSubscriber = /*@__PURE__*/ (function (_super) {
37593 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(TimeoutWithSubscriber, _super);
37594 function TimeoutWithSubscriber(destination, absoluteTimeout, waitFor, withObservable, scheduler) {
37595 var _this = _super.call(this, destination) || this;
37596 _this.absoluteTimeout = absoluteTimeout;
37597 _this.waitFor = waitFor;
37598 _this.withObservable = withObservable;
37599 _this.scheduler = scheduler;
37600 _this.action = null;
37601 _this.scheduleTimeout();
37602 return _this;
37603 }
37604 TimeoutWithSubscriber.dispatchTimeout = function (subscriber) {
37605 var withObservable = subscriber.withObservable;
37606 subscriber._unsubscribeAndRecycle();
37607 subscriber.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__.subscribeToResult)(subscriber, withObservable));
37608 };
37609 TimeoutWithSubscriber.prototype.scheduleTimeout = function () {
37610 var action = this.action;
37611 if (action) {
37612 this.action = action.schedule(this, this.waitFor);
37613 }
37614 else {
37615 this.add(this.action = this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, this));
37616 }
37617 };
37618 TimeoutWithSubscriber.prototype._next = function (value) {
37619 if (!this.absoluteTimeout) {
37620 this.scheduleTimeout();
37621 }
37622 _super.prototype._next.call(this, value);
37623 };
37624 TimeoutWithSubscriber.prototype._unsubscribe = function () {
37625 this.action = null;
37626 this.scheduler = null;
37627 this.withObservable = null;
37628 };
37629 return TimeoutWithSubscriber;
37630}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__.OuterSubscriber));
37631//# sourceMappingURL=timeoutWith.js.map
37632
37633
37634/***/ }),
37635/* 356 */
37636/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37637
37638"use strict";
37639__webpack_require__.r(__webpack_exports__);
37640/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37641/* harmony export */ "timestamp": () => /* binding */ timestamp,
37642/* harmony export */ "Timestamp": () => /* binding */ Timestamp
37643/* harmony export */ });
37644/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(212);
37645/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(223);
37646/** PURE_IMPORTS_START _scheduler_async,_map PURE_IMPORTS_END */
37647
37648
37649function timestamp(scheduler) {
37650 if (scheduler === void 0) {
37651 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async;
37652 }
37653 return (0,_map__WEBPACK_IMPORTED_MODULE_1__.map)(function (value) { return new Timestamp(value, scheduler.now()); });
37654}
37655var Timestamp = /*@__PURE__*/ (function () {
37656 function Timestamp(value, timestamp) {
37657 this.value = value;
37658 this.timestamp = timestamp;
37659 }
37660 return Timestamp;
37661}());
37662
37663//# sourceMappingURL=timestamp.js.map
37664
37665
37666/***/ }),
37667/* 357 */
37668/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37669
37670"use strict";
37671__webpack_require__.r(__webpack_exports__);
37672/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37673/* harmony export */ "toArray": () => /* binding */ toArray
37674/* harmony export */ });
37675/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(312);
37676/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
37677
37678function toArrayReducer(arr, item, index) {
37679 if (index === 0) {
37680 return [item];
37681 }
37682 arr.push(item);
37683 return arr;
37684}
37685function toArray() {
37686 return (0,_reduce__WEBPACK_IMPORTED_MODULE_0__.reduce)(toArrayReducer, []);
37687}
37688//# sourceMappingURL=toArray.js.map
37689
37690
37691/***/ }),
37692/* 358 */
37693/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37694
37695"use strict";
37696__webpack_require__.r(__webpack_exports__);
37697/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37698/* harmony export */ "window": () => /* binding */ window
37699/* harmony export */ });
37700/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
37701/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(185);
37702/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(235);
37703/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
37704/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37705
37706
37707
37708
37709function window(windowBoundaries) {
37710 return function windowOperatorFunction(source) {
37711 return source.lift(new WindowOperator(windowBoundaries));
37712 };
37713}
37714var WindowOperator = /*@__PURE__*/ (function () {
37715 function WindowOperator(windowBoundaries) {
37716 this.windowBoundaries = windowBoundaries;
37717 }
37718 WindowOperator.prototype.call = function (subscriber, source) {
37719 var windowSubscriber = new WindowSubscriber(subscriber);
37720 var sourceSubscription = source.subscribe(windowSubscriber);
37721 if (!sourceSubscription.closed) {
37722 windowSubscriber.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(windowSubscriber, this.windowBoundaries));
37723 }
37724 return sourceSubscription;
37725 };
37726 return WindowOperator;
37727}());
37728var WindowSubscriber = /*@__PURE__*/ (function (_super) {
37729 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(WindowSubscriber, _super);
37730 function WindowSubscriber(destination) {
37731 var _this = _super.call(this, destination) || this;
37732 _this.window = new _Subject__WEBPACK_IMPORTED_MODULE_2__.Subject();
37733 destination.next(_this.window);
37734 return _this;
37735 }
37736 WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
37737 this.openWindow();
37738 };
37739 WindowSubscriber.prototype.notifyError = function (error, innerSub) {
37740 this._error(error);
37741 };
37742 WindowSubscriber.prototype.notifyComplete = function (innerSub) {
37743 this._complete();
37744 };
37745 WindowSubscriber.prototype._next = function (value) {
37746 this.window.next(value);
37747 };
37748 WindowSubscriber.prototype._error = function (err) {
37749 this.window.error(err);
37750 this.destination.error(err);
37751 };
37752 WindowSubscriber.prototype._complete = function () {
37753 this.window.complete();
37754 this.destination.complete();
37755 };
37756 WindowSubscriber.prototype._unsubscribe = function () {
37757 this.window = null;
37758 };
37759 WindowSubscriber.prototype.openWindow = function () {
37760 var prevWindow = this.window;
37761 if (prevWindow) {
37762 prevWindow.complete();
37763 }
37764 var destination = this.destination;
37765 var newWindow = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_2__.Subject();
37766 destination.next(newWindow);
37767 };
37768 return WindowSubscriber;
37769}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__.OuterSubscriber));
37770//# sourceMappingURL=window.js.map
37771
37772
37773/***/ }),
37774/* 359 */
37775/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37776
37777"use strict";
37778__webpack_require__.r(__webpack_exports__);
37779/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37780/* harmony export */ "windowCount": () => /* binding */ windowCount
37781/* harmony export */ });
37782/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
37783/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(168);
37784/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
37785/** PURE_IMPORTS_START tslib,_Subscriber,_Subject PURE_IMPORTS_END */
37786
37787
37788
37789function windowCount(windowSize, startWindowEvery) {
37790 if (startWindowEvery === void 0) {
37791 startWindowEvery = 0;
37792 }
37793 return function windowCountOperatorFunction(source) {
37794 return source.lift(new WindowCountOperator(windowSize, startWindowEvery));
37795 };
37796}
37797var WindowCountOperator = /*@__PURE__*/ (function () {
37798 function WindowCountOperator(windowSize, startWindowEvery) {
37799 this.windowSize = windowSize;
37800 this.startWindowEvery = startWindowEvery;
37801 }
37802 WindowCountOperator.prototype.call = function (subscriber, source) {
37803 return source.subscribe(new WindowCountSubscriber(subscriber, this.windowSize, this.startWindowEvery));
37804 };
37805 return WindowCountOperator;
37806}());
37807var WindowCountSubscriber = /*@__PURE__*/ (function (_super) {
37808 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(WindowCountSubscriber, _super);
37809 function WindowCountSubscriber(destination, windowSize, startWindowEvery) {
37810 var _this = _super.call(this, destination) || this;
37811 _this.destination = destination;
37812 _this.windowSize = windowSize;
37813 _this.startWindowEvery = startWindowEvery;
37814 _this.windows = [new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject()];
37815 _this.count = 0;
37816 destination.next(_this.windows[0]);
37817 return _this;
37818 }
37819 WindowCountSubscriber.prototype._next = function (value) {
37820 var startWindowEvery = (this.startWindowEvery > 0) ? this.startWindowEvery : this.windowSize;
37821 var destination = this.destination;
37822 var windowSize = this.windowSize;
37823 var windows = this.windows;
37824 var len = windows.length;
37825 for (var i = 0; i < len && !this.closed; i++) {
37826 windows[i].next(value);
37827 }
37828 var c = this.count - windowSize + 1;
37829 if (c >= 0 && c % startWindowEvery === 0 && !this.closed) {
37830 windows.shift().complete();
37831 }
37832 if (++this.count % startWindowEvery === 0 && !this.closed) {
37833 var window_1 = new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject();
37834 windows.push(window_1);
37835 destination.next(window_1);
37836 }
37837 };
37838 WindowCountSubscriber.prototype._error = function (err) {
37839 var windows = this.windows;
37840 if (windows) {
37841 while (windows.length > 0 && !this.closed) {
37842 windows.shift().error(err);
37843 }
37844 }
37845 this.destination.error(err);
37846 };
37847 WindowCountSubscriber.prototype._complete = function () {
37848 var windows = this.windows;
37849 if (windows) {
37850 while (windows.length > 0 && !this.closed) {
37851 windows.shift().complete();
37852 }
37853 }
37854 this.destination.complete();
37855 };
37856 WindowCountSubscriber.prototype._unsubscribe = function () {
37857 this.count = 0;
37858 this.windows = null;
37859 };
37860 return WindowCountSubscriber;
37861}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
37862//# sourceMappingURL=windowCount.js.map
37863
37864
37865/***/ }),
37866/* 360 */
37867/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37868
37869"use strict";
37870__webpack_require__.r(__webpack_exports__);
37871/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37872/* harmony export */ "windowTime": () => /* binding */ windowTime
37873/* harmony export */ });
37874/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
37875/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(185);
37876/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
37877/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(168);
37878/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(254);
37879/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(194);
37880/** PURE_IMPORTS_START tslib,_Subject,_scheduler_async,_Subscriber,_util_isNumeric,_util_isScheduler PURE_IMPORTS_END */
37881
37882
37883
37884
37885
37886
37887function windowTime(windowTimeSpan) {
37888 var scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
37889 var windowCreationInterval = null;
37890 var maxWindowSize = Number.POSITIVE_INFINITY;
37891 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__.isScheduler)(arguments[3])) {
37892 scheduler = arguments[3];
37893 }
37894 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__.isScheduler)(arguments[2])) {
37895 scheduler = arguments[2];
37896 }
37897 else if ((0,_util_isNumeric__WEBPACK_IMPORTED_MODULE_3__.isNumeric)(arguments[2])) {
37898 maxWindowSize = arguments[2];
37899 }
37900 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__.isScheduler)(arguments[1])) {
37901 scheduler = arguments[1];
37902 }
37903 else if ((0,_util_isNumeric__WEBPACK_IMPORTED_MODULE_3__.isNumeric)(arguments[1])) {
37904 windowCreationInterval = arguments[1];
37905 }
37906 return function windowTimeOperatorFunction(source) {
37907 return source.lift(new WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler));
37908 };
37909}
37910var WindowTimeOperator = /*@__PURE__*/ (function () {
37911 function WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
37912 this.windowTimeSpan = windowTimeSpan;
37913 this.windowCreationInterval = windowCreationInterval;
37914 this.maxWindowSize = maxWindowSize;
37915 this.scheduler = scheduler;
37916 }
37917 WindowTimeOperator.prototype.call = function (subscriber, source) {
37918 return source.subscribe(new WindowTimeSubscriber(subscriber, this.windowTimeSpan, this.windowCreationInterval, this.maxWindowSize, this.scheduler));
37919 };
37920 return WindowTimeOperator;
37921}());
37922var CountedSubject = /*@__PURE__*/ (function (_super) {
37923 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(CountedSubject, _super);
37924 function CountedSubject() {
37925 var _this = _super !== null && _super.apply(this, arguments) || this;
37926 _this._numberOfNextedValues = 0;
37927 return _this;
37928 }
37929 CountedSubject.prototype.next = function (value) {
37930 this._numberOfNextedValues++;
37931 _super.prototype.next.call(this, value);
37932 };
37933 Object.defineProperty(CountedSubject.prototype, "numberOfNextedValues", {
37934 get: function () {
37935 return this._numberOfNextedValues;
37936 },
37937 enumerable: true,
37938 configurable: true
37939 });
37940 return CountedSubject;
37941}(_Subject__WEBPACK_IMPORTED_MODULE_4__.Subject));
37942var WindowTimeSubscriber = /*@__PURE__*/ (function (_super) {
37943 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(WindowTimeSubscriber, _super);
37944 function WindowTimeSubscriber(destination, windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
37945 var _this = _super.call(this, destination) || this;
37946 _this.destination = destination;
37947 _this.windowTimeSpan = windowTimeSpan;
37948 _this.windowCreationInterval = windowCreationInterval;
37949 _this.maxWindowSize = maxWindowSize;
37950 _this.scheduler = scheduler;
37951 _this.windows = [];
37952 var window = _this.openWindow();
37953 if (windowCreationInterval !== null && windowCreationInterval >= 0) {
37954 var closeState = { subscriber: _this, window: window, context: null };
37955 var creationState = { windowTimeSpan: windowTimeSpan, windowCreationInterval: windowCreationInterval, subscriber: _this, scheduler: scheduler };
37956 _this.add(scheduler.schedule(dispatchWindowClose, windowTimeSpan, closeState));
37957 _this.add(scheduler.schedule(dispatchWindowCreation, windowCreationInterval, creationState));
37958 }
37959 else {
37960 var timeSpanOnlyState = { subscriber: _this, window: window, windowTimeSpan: windowTimeSpan };
37961 _this.add(scheduler.schedule(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState));
37962 }
37963 return _this;
37964 }
37965 WindowTimeSubscriber.prototype._next = function (value) {
37966 var windows = this.windows;
37967 var len = windows.length;
37968 for (var i = 0; i < len; i++) {
37969 var window_1 = windows[i];
37970 if (!window_1.closed) {
37971 window_1.next(value);
37972 if (window_1.numberOfNextedValues >= this.maxWindowSize) {
37973 this.closeWindow(window_1);
37974 }
37975 }
37976 }
37977 };
37978 WindowTimeSubscriber.prototype._error = function (err) {
37979 var windows = this.windows;
37980 while (windows.length > 0) {
37981 windows.shift().error(err);
37982 }
37983 this.destination.error(err);
37984 };
37985 WindowTimeSubscriber.prototype._complete = function () {
37986 var windows = this.windows;
37987 while (windows.length > 0) {
37988 var window_2 = windows.shift();
37989 if (!window_2.closed) {
37990 window_2.complete();
37991 }
37992 }
37993 this.destination.complete();
37994 };
37995 WindowTimeSubscriber.prototype.openWindow = function () {
37996 var window = new CountedSubject();
37997 this.windows.push(window);
37998 var destination = this.destination;
37999 destination.next(window);
38000 return window;
38001 };
38002 WindowTimeSubscriber.prototype.closeWindow = function (window) {
38003 window.complete();
38004 var windows = this.windows;
38005 windows.splice(windows.indexOf(window), 1);
38006 };
38007 return WindowTimeSubscriber;
38008}(_Subscriber__WEBPACK_IMPORTED_MODULE_5__.Subscriber));
38009function dispatchWindowTimeSpanOnly(state) {
38010 var subscriber = state.subscriber, windowTimeSpan = state.windowTimeSpan, window = state.window;
38011 if (window) {
38012 subscriber.closeWindow(window);
38013 }
38014 state.window = subscriber.openWindow();
38015 this.schedule(state, windowTimeSpan);
38016}
38017function dispatchWindowCreation(state) {
38018 var windowTimeSpan = state.windowTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler, windowCreationInterval = state.windowCreationInterval;
38019 var window = subscriber.openWindow();
38020 var action = this;
38021 var context = { action: action, subscription: null };
38022 var timeSpanState = { subscriber: subscriber, window: window, context: context };
38023 context.subscription = scheduler.schedule(dispatchWindowClose, windowTimeSpan, timeSpanState);
38024 action.add(context.subscription);
38025 action.schedule(state, windowCreationInterval);
38026}
38027function dispatchWindowClose(state) {
38028 var subscriber = state.subscriber, window = state.window, context = state.context;
38029 if (context && context.action && context.subscription) {
38030 context.action.remove(context.subscription);
38031 }
38032 subscriber.closeWindow(window);
38033}
38034//# sourceMappingURL=windowTime.js.map
38035
38036
38037/***/ }),
38038/* 361 */
38039/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38040
38041"use strict";
38042__webpack_require__.r(__webpack_exports__);
38043/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38044/* harmony export */ "windowToggle": () => /* binding */ windowToggle
38045/* harmony export */ });
38046/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
38047/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(185);
38048/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(174);
38049/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(235);
38050/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
38051/** PURE_IMPORTS_START tslib,_Subject,_Subscription,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
38052
38053
38054
38055
38056
38057function windowToggle(openings, closingSelector) {
38058 return function (source) { return source.lift(new WindowToggleOperator(openings, closingSelector)); };
38059}
38060var WindowToggleOperator = /*@__PURE__*/ (function () {
38061 function WindowToggleOperator(openings, closingSelector) {
38062 this.openings = openings;
38063 this.closingSelector = closingSelector;
38064 }
38065 WindowToggleOperator.prototype.call = function (subscriber, source) {
38066 return source.subscribe(new WindowToggleSubscriber(subscriber, this.openings, this.closingSelector));
38067 };
38068 return WindowToggleOperator;
38069}());
38070var WindowToggleSubscriber = /*@__PURE__*/ (function (_super) {
38071 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(WindowToggleSubscriber, _super);
38072 function WindowToggleSubscriber(destination, openings, closingSelector) {
38073 var _this = _super.call(this, destination) || this;
38074 _this.openings = openings;
38075 _this.closingSelector = closingSelector;
38076 _this.contexts = [];
38077 _this.add(_this.openSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(_this, openings, openings));
38078 return _this;
38079 }
38080 WindowToggleSubscriber.prototype._next = function (value) {
38081 var contexts = this.contexts;
38082 if (contexts) {
38083 var len = contexts.length;
38084 for (var i = 0; i < len; i++) {
38085 contexts[i].window.next(value);
38086 }
38087 }
38088 };
38089 WindowToggleSubscriber.prototype._error = function (err) {
38090 var contexts = this.contexts;
38091 this.contexts = null;
38092 if (contexts) {
38093 var len = contexts.length;
38094 var index = -1;
38095 while (++index < len) {
38096 var context_1 = contexts[index];
38097 context_1.window.error(err);
38098 context_1.subscription.unsubscribe();
38099 }
38100 }
38101 _super.prototype._error.call(this, err);
38102 };
38103 WindowToggleSubscriber.prototype._complete = function () {
38104 var contexts = this.contexts;
38105 this.contexts = null;
38106 if (contexts) {
38107 var len = contexts.length;
38108 var index = -1;
38109 while (++index < len) {
38110 var context_2 = contexts[index];
38111 context_2.window.complete();
38112 context_2.subscription.unsubscribe();
38113 }
38114 }
38115 _super.prototype._complete.call(this);
38116 };
38117 WindowToggleSubscriber.prototype._unsubscribe = function () {
38118 var contexts = this.contexts;
38119 this.contexts = null;
38120 if (contexts) {
38121 var len = contexts.length;
38122 var index = -1;
38123 while (++index < len) {
38124 var context_3 = contexts[index];
38125 context_3.window.unsubscribe();
38126 context_3.subscription.unsubscribe();
38127 }
38128 }
38129 };
38130 WindowToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
38131 if (outerValue === this.openings) {
38132 var closingNotifier = void 0;
38133 try {
38134 var closingSelector = this.closingSelector;
38135 closingNotifier = closingSelector(innerValue);
38136 }
38137 catch (e) {
38138 return this.error(e);
38139 }
38140 var window_1 = new _Subject__WEBPACK_IMPORTED_MODULE_2__.Subject();
38141 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_3__.Subscription();
38142 var context_4 = { window: window_1, subscription: subscription };
38143 this.contexts.push(context_4);
38144 var innerSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(this, closingNotifier, context_4);
38145 if (innerSubscription.closed) {
38146 this.closeWindow(this.contexts.length - 1);
38147 }
38148 else {
38149 innerSubscription.context = context_4;
38150 subscription.add(innerSubscription);
38151 }
38152 this.destination.next(window_1);
38153 }
38154 else {
38155 this.closeWindow(this.contexts.indexOf(outerValue));
38156 }
38157 };
38158 WindowToggleSubscriber.prototype.notifyError = function (err) {
38159 this.error(err);
38160 };
38161 WindowToggleSubscriber.prototype.notifyComplete = function (inner) {
38162 if (inner !== this.openSubscription) {
38163 this.closeWindow(this.contexts.indexOf(inner.context));
38164 }
38165 };
38166 WindowToggleSubscriber.prototype.closeWindow = function (index) {
38167 if (index === -1) {
38168 return;
38169 }
38170 var contexts = this.contexts;
38171 var context = contexts[index];
38172 var window = context.window, subscription = context.subscription;
38173 contexts.splice(index, 1);
38174 window.complete();
38175 subscription.unsubscribe();
38176 };
38177 return WindowToggleSubscriber;
38178}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__.OuterSubscriber));
38179//# sourceMappingURL=windowToggle.js.map
38180
38181
38182/***/ }),
38183/* 362 */
38184/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38185
38186"use strict";
38187__webpack_require__.r(__webpack_exports__);
38188/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38189/* harmony export */ "windowWhen": () => /* binding */ windowWhen
38190/* harmony export */ });
38191/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
38192/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
38193/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(235);
38194/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(226);
38195/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
38196
38197
38198
38199
38200function windowWhen(closingSelector) {
38201 return function windowWhenOperatorFunction(source) {
38202 return source.lift(new WindowOperator(closingSelector));
38203 };
38204}
38205var WindowOperator = /*@__PURE__*/ (function () {
38206 function WindowOperator(closingSelector) {
38207 this.closingSelector = closingSelector;
38208 }
38209 WindowOperator.prototype.call = function (subscriber, source) {
38210 return source.subscribe(new WindowSubscriber(subscriber, this.closingSelector));
38211 };
38212 return WindowOperator;
38213}());
38214var WindowSubscriber = /*@__PURE__*/ (function (_super) {
38215 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(WindowSubscriber, _super);
38216 function WindowSubscriber(destination, closingSelector) {
38217 var _this = _super.call(this, destination) || this;
38218 _this.destination = destination;
38219 _this.closingSelector = closingSelector;
38220 _this.openWindow();
38221 return _this;
38222 }
38223 WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
38224 this.openWindow(innerSub);
38225 };
38226 WindowSubscriber.prototype.notifyError = function (error, innerSub) {
38227 this._error(error);
38228 };
38229 WindowSubscriber.prototype.notifyComplete = function (innerSub) {
38230 this.openWindow(innerSub);
38231 };
38232 WindowSubscriber.prototype._next = function (value) {
38233 this.window.next(value);
38234 };
38235 WindowSubscriber.prototype._error = function (err) {
38236 this.window.error(err);
38237 this.destination.error(err);
38238 this.unsubscribeClosingNotification();
38239 };
38240 WindowSubscriber.prototype._complete = function () {
38241 this.window.complete();
38242 this.destination.complete();
38243 this.unsubscribeClosingNotification();
38244 };
38245 WindowSubscriber.prototype.unsubscribeClosingNotification = function () {
38246 if (this.closingNotification) {
38247 this.closingNotification.unsubscribe();
38248 }
38249 };
38250 WindowSubscriber.prototype.openWindow = function (innerSub) {
38251 if (innerSub === void 0) {
38252 innerSub = null;
38253 }
38254 if (innerSub) {
38255 this.remove(innerSub);
38256 innerSub.unsubscribe();
38257 }
38258 var prevWindow = this.window;
38259 if (prevWindow) {
38260 prevWindow.complete();
38261 }
38262 var window = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject();
38263 this.destination.next(window);
38264 var closingNotifier;
38265 try {
38266 var closingSelector = this.closingSelector;
38267 closingNotifier = closingSelector();
38268 }
38269 catch (e) {
38270 this.destination.error(e);
38271 this.window.error(e);
38272 return;
38273 }
38274 this.add(this.closingNotification = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__.subscribeToResult)(this, closingNotifier));
38275 };
38276 return WindowSubscriber;
38277}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__.OuterSubscriber));
38278//# sourceMappingURL=windowWhen.js.map
38279
38280
38281/***/ }),
38282/* 363 */
38283/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38284
38285"use strict";
38286__webpack_require__.r(__webpack_exports__);
38287/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38288/* harmony export */ "withLatestFrom": () => /* binding */ withLatestFrom
38289/* harmony export */ });
38290/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
38291/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(235);
38292/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
38293/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
38294
38295
38296
38297function withLatestFrom() {
38298 var args = [];
38299 for (var _i = 0; _i < arguments.length; _i++) {
38300 args[_i] = arguments[_i];
38301 }
38302 return function (source) {
38303 var project;
38304 if (typeof args[args.length - 1] === 'function') {
38305 project = args.pop();
38306 }
38307 var observables = args;
38308 return source.lift(new WithLatestFromOperator(observables, project));
38309 };
38310}
38311var WithLatestFromOperator = /*@__PURE__*/ (function () {
38312 function WithLatestFromOperator(observables, project) {
38313 this.observables = observables;
38314 this.project = project;
38315 }
38316 WithLatestFromOperator.prototype.call = function (subscriber, source) {
38317 return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));
38318 };
38319 return WithLatestFromOperator;
38320}());
38321var WithLatestFromSubscriber = /*@__PURE__*/ (function (_super) {
38322 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(WithLatestFromSubscriber, _super);
38323 function WithLatestFromSubscriber(destination, observables, project) {
38324 var _this = _super.call(this, destination) || this;
38325 _this.observables = observables;
38326 _this.project = project;
38327 _this.toRespond = [];
38328 var len = observables.length;
38329 _this.values = new Array(len);
38330 for (var i = 0; i < len; i++) {
38331 _this.toRespond.push(i);
38332 }
38333 for (var i = 0; i < len; i++) {
38334 var observable = observables[i];
38335 _this.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(_this, observable, observable, i));
38336 }
38337 return _this;
38338 }
38339 WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
38340 this.values[outerIndex] = innerValue;
38341 var toRespond = this.toRespond;
38342 if (toRespond.length > 0) {
38343 var found = toRespond.indexOf(outerIndex);
38344 if (found !== -1) {
38345 toRespond.splice(found, 1);
38346 }
38347 }
38348 };
38349 WithLatestFromSubscriber.prototype.notifyComplete = function () {
38350 };
38351 WithLatestFromSubscriber.prototype._next = function (value) {
38352 if (this.toRespond.length === 0) {
38353 var args = [value].concat(this.values);
38354 if (this.project) {
38355 this._tryProject(args);
38356 }
38357 else {
38358 this.destination.next(args);
38359 }
38360 }
38361 };
38362 WithLatestFromSubscriber.prototype._tryProject = function (args) {
38363 var result;
38364 try {
38365 result = this.project.apply(this, args);
38366 }
38367 catch (err) {
38368 this.destination.error(err);
38369 return;
38370 }
38371 this.destination.next(result);
38372 };
38373 return WithLatestFromSubscriber;
38374}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
38375//# sourceMappingURL=withLatestFrom.js.map
38376
38377
38378/***/ }),
38379/* 364 */
38380/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38381
38382"use strict";
38383__webpack_require__.r(__webpack_exports__);
38384/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38385/* harmony export */ "zip": () => /* binding */ zip
38386/* harmony export */ });
38387/* harmony import */ var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266);
38388/** PURE_IMPORTS_START _observable_zip PURE_IMPORTS_END */
38389
38390function zip() {
38391 var observables = [];
38392 for (var _i = 0; _i < arguments.length; _i++) {
38393 observables[_i] = arguments[_i];
38394 }
38395 return function zipOperatorFunction(source) {
38396 return source.lift.call(_observable_zip__WEBPACK_IMPORTED_MODULE_0__.zip.apply(void 0, [source].concat(observables)));
38397 };
38398}
38399//# sourceMappingURL=zip.js.map
38400
38401
38402/***/ }),
38403/* 365 */
38404/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38405
38406"use strict";
38407__webpack_require__.r(__webpack_exports__);
38408/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38409/* harmony export */ "zipAll": () => /* binding */ zipAll
38410/* harmony export */ });
38411/* harmony import */ var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266);
38412/** PURE_IMPORTS_START _observable_zip PURE_IMPORTS_END */
38413
38414function zipAll(project) {
38415 return function (source) { return source.lift(new _observable_zip__WEBPACK_IMPORTED_MODULE_0__.ZipOperator(project)); };
38416}
38417//# sourceMappingURL=zipAll.js.map
38418
38419
38420/***/ }),
38421/* 366 */
38422/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
38423
38424"use strict";
38425
38426var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
38427 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38428 return new (P || (P = Promise))(function (resolve, reject) {
38429 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
38430 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
38431 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
38432 step((generator = generator.apply(thisArg, _arguments || [])).next());
38433 });
38434};
38435var __generator = (this && this.__generator) || function (thisArg, body) {
38436 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
38437 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
38438 function verb(n) { return function (v) { return step([n, v]); }; }
38439 function step(op) {
38440 if (f) throw new TypeError("Generator is already executing.");
38441 while (_) try {
38442 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;
38443 if (y = 0, t) op = [op[0] & 2, t.value];
38444 switch (op[0]) {
38445 case 0: case 1: t = op; break;
38446 case 4: _.label++; return { value: op[1], done: false };
38447 case 5: _.label++; y = op[1]; op = [0]; continue;
38448 case 7: op = _.ops.pop(); _.trys.pop(); continue;
38449 default:
38450 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38451 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38452 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
38453 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
38454 if (t[2]) _.ops.pop();
38455 _.trys.pop(); continue;
38456 }
38457 op = body.call(thisArg, _);
38458 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
38459 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
38460 }
38461};
38462Object.defineProperty(exports, "__esModule", ({ value: true }));
38463exports.handleDiagnostic = void 0;
38464var vscode_languageserver_1 = __webpack_require__(2);
38465var patterns_1 = __webpack_require__(53);
38466var connection_1 = __webpack_require__(137);
38467var fixNegativeNum = function (num) {
38468 if (num < 0) {
38469 return 0;
38470 }
38471 return num;
38472};
38473function handleDiagnostic(textDoc, error) {
38474 return __awaiter(this, void 0, void 0, function () {
38475 var m, lines, line, col;
38476 return __generator(this, function (_a) {
38477 m = (error || "").match(patterns_1.errorLinePattern);
38478 if (m) {
38479 lines = textDoc.lineCount;
38480 line = fixNegativeNum(parseFloat(m[2]) - 1);
38481 col = fixNegativeNum(parseFloat(m[3]) - 1);
38482 return [2 /*return*/, connection_1.connection.sendDiagnostics({
38483 uri: textDoc.uri,
38484 diagnostics: [{
38485 source: "vimlsp",
38486 message: m[1],
38487 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)),
38488 severity: vscode_languageserver_1.DiagnosticSeverity.Error,
38489 }],
38490 })];
38491 }
38492 // clear diagnostics
38493 connection_1.connection.sendDiagnostics({
38494 uri: textDoc.uri,
38495 diagnostics: [],
38496 });
38497 return [2 /*return*/];
38498 });
38499 });
38500}
38501exports.handleDiagnostic = handleDiagnostic;
38502
38503
38504/***/ }),
38505/* 367 */
38506/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
38507
38508"use strict";
38509
38510Object.defineProperty(exports, "__esModule", ({ value: true }));
38511exports.selectionRangeProvider = void 0;
38512var vscode_languageserver_1 = __webpack_require__(2);
38513var workspaces_1 = __webpack_require__(147);
38514var documents_1 = __webpack_require__(55);
38515var selectionRangeProvider = function (params) {
38516 var selectRanges = [];
38517 var textDocument = params.textDocument, positions = params.positions;
38518 if (!positions || positions.length === 0) {
38519 return selectRanges;
38520 }
38521 var buffer = workspaces_1.workspace.getBufferByUri(textDocument.uri);
38522 var document = documents_1.documents.get(textDocument.uri);
38523 if (!buffer || !document) {
38524 return selectRanges;
38525 }
38526 var vimRanges = buffer.getRanges();
38527 if (vimRanges.length === 0) {
38528 return selectRanges;
38529 }
38530 var range = vscode_languageserver_1.Range.create(positions[0], positions[0]);
38531 if (positions.length > 1) {
38532 range = vscode_languageserver_1.Range.create(positions[0], positions[positions.length - 1]);
38533 }
38534 var ranges = [];
38535 vimRanges.forEach(function (vimRange) {
38536 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)));
38537 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));
38538 if (range.start.line >= newRange.start.line && range.end.line <= newRange.end.line) {
38539 if (ranges.length === 0) {
38540 ranges.push(newRange);
38541 }
38542 else {
38543 var i = 0;
38544 for (var len = ranges.length; i < len; i++) {
38545 if (ranges[i].start.line <= newRange.start.line && ranges[i].end.line >= newRange.end.line) {
38546 ranges.splice(i, 0, newRange);
38547 break;
38548 }
38549 }
38550 if (i === ranges.length) {
38551 ranges.push(newRange);
38552 }
38553 }
38554 }
38555 });
38556 if (ranges.length) {
38557 if (ranges.length > 1) {
38558 ranges = ranges.filter(function (newRange) {
38559 return range.start.line !== newRange.start.line || range.end.line !== newRange.end.line;
38560 });
38561 }
38562 selectRanges.push(ranges.reverse().reduce(function (pre, cur, idx) {
38563 if (idx === 0) {
38564 return pre;
38565 }
38566 return {
38567 range: cur,
38568 parent: pre
38569 };
38570 }, { range: ranges[0] }));
38571 }
38572 return selectRanges;
38573};
38574exports.selectionRangeProvider = selectionRangeProvider;
38575
38576
38577/***/ }),
38578/* 368 */
38579/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
38580
38581"use strict";
38582
38583Object.defineProperty(exports, "__esModule", ({ value: true }));
38584exports.documentSymbolProvider = void 0;
38585var vscode_languageserver_1 = __webpack_require__(2);
38586var workspaces_1 = __webpack_require__(147);
38587var documents_1 = __webpack_require__(55);
38588var documentSymbolProvider = function (params) {
38589 var documentSymbols = [];
38590 var textDocument = params.textDocument;
38591 var buffer = workspaces_1.workspace.getBufferByUri(textDocument.uri);
38592 var document = documents_1.documents.get(textDocument.uri);
38593 if (!buffer || !document) {
38594 return documentSymbols;
38595 }
38596 var globalFunctions = buffer.getGlobalFunctions();
38597 var scriptFunctions = buffer.getScriptFunctions();
38598 var globalVariables = buffer.getGlobalIdentifiers();
38599 var localVariables = buffer.getLocalIdentifiers();
38600 var functions = Object.values(globalFunctions).concat(Object.values(scriptFunctions)).reduce(function (pre, cur) {
38601 return pre.concat(cur);
38602 }, []);
38603 var variables = Object.values(globalVariables).concat(Object.values(localVariables)).reduce(function (pre, cur) {
38604 return pre.concat(cur);
38605 }, []);
38606 var sortFunctions = [];
38607 functions.forEach(function (func) {
38608 if (sortFunctions.length === 0) {
38609 return sortFunctions.push(func);
38610 }
38611 var i = 0;
38612 for (var len = sortFunctions.length; i < len; i += 1) {
38613 var sf = sortFunctions[i];
38614 if (func.range.endLine < sf.range.endLine) {
38615 sortFunctions.splice(i, 0, func);
38616 break;
38617 }
38618 }
38619 if (i === sortFunctions.length) {
38620 sortFunctions.push(func);
38621 }
38622 });
38623 return sortFunctions
38624 .map(function (func) {
38625 var vimRange = func.range;
38626 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)));
38627 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));
38628 var ds = {
38629 name: func.name,
38630 kind: vscode_languageserver_1.SymbolKind.Function,
38631 range: range,
38632 selectionRange: range,
38633 children: []
38634 };
38635 variables = variables.filter(function (v) {
38636 if (v.startLine >= vimRange.startLine && v.startLine <= vimRange.endLine) {
38637 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));
38638 ds.children.push({
38639 name: v.name,
38640 kind: vscode_languageserver_1.SymbolKind.Variable,
38641 range: vRange,
38642 selectionRange: vRange
38643 });
38644 return false;
38645 }
38646 return true;
38647 });
38648 return ds;
38649 })
38650 .reduce(function (res, cur) {
38651 if (res.length === 0) {
38652 res.push(cur);
38653 }
38654 else {
38655 res = res.filter(function (item) {
38656 if (item.range.start.line >= cur.range.start.line && item.range.end.line <= cur.range.end.line) {
38657 cur.children.push(item);
38658 return false;
38659 }
38660 return true;
38661 });
38662 res.push(cur);
38663 }
38664 return res;
38665 }, [])
38666 .concat(variables.map(function (v) {
38667 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));
38668 return {
38669 name: v.name,
38670 kind: vscode_languageserver_1.SymbolKind.Variable,
38671 range: vRange,
38672 selectionRange: vRange
38673 };
38674 }));
38675};
38676exports.documentSymbolProvider = documentSymbolProvider;
38677
38678
38679/***/ })
38680/******/ ]);
38681/************************************************************************/
38682/******/ // The module cache
38683/******/ var __webpack_module_cache__ = {};
38684/******/
38685/******/ // The require function
38686/******/ function __webpack_require__(moduleId) {
38687/******/ // Check if module is in cache
38688/******/ if(__webpack_module_cache__[moduleId]) {
38689/******/ return __webpack_module_cache__[moduleId].exports;
38690/******/ }
38691/******/ // Create a new module (and put it into the cache)
38692/******/ var module = __webpack_module_cache__[moduleId] = {
38693/******/ id: moduleId,
38694/******/ loaded: false,
38695/******/ exports: {}
38696/******/ };
38697/******/
38698/******/ // Execute the module function
38699/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
38700/******/
38701/******/ // Flag the module as loaded
38702/******/ module.loaded = true;
38703/******/
38704/******/ // Return the exports of the module
38705/******/ return module.exports;
38706/******/ }
38707/******/
38708/******/ // expose the module cache
38709/******/ __webpack_require__.c = __webpack_module_cache__;
38710/******/
38711/************************************************************************/
38712/******/ /* webpack/runtime/define property getters */
38713/******/ (() => {
38714/******/ // define getter functions for harmony exports
38715/******/ __webpack_require__.d = (exports, definition) => {
38716/******/ for(var key in definition) {
38717/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
38718/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
38719/******/ }
38720/******/ }
38721/******/ };
38722/******/ })();
38723/******/
38724/******/ /* webpack/runtime/hasOwnProperty shorthand */
38725/******/ (() => {
38726/******/ __webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)
38727/******/ })();
38728/******/
38729/******/ /* webpack/runtime/make namespace object */
38730/******/ (() => {
38731/******/ // define __esModule on exports
38732/******/ __webpack_require__.r = (exports) => {
38733/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
38734/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
38735/******/ }
38736/******/ Object.defineProperty(exports, '__esModule', { value: true });
38737/******/ };
38738/******/ })();
38739/******/
38740/******/ /* webpack/runtime/node module decorator */
38741/******/ (() => {
38742/******/ __webpack_require__.nmd = (module) => {
38743/******/ module.paths = [];
38744/******/ if (!module.children) module.children = [];
38745/******/ return module;
38746/******/ };
38747/******/ })();
38748/******/
38749/************************************************************************/
38750/******/ // module cache are used so entry inlining is disabled
38751/******/ // startup
38752/******/ // Load entry module and return exports
38753/******/ return __webpack_require__(__webpack_require__.s = 0);
38754/******/ })()
38755
38756));
\No newline at end of file