text: var __extends = (this && this.__extends) || (function () {
      var extendStatics = function (d, b) {
          extendStatics = Object.setPrototypeOf ||
              ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
              function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
          return extendStatics(d, b);
      };
      return function (d, b) {
          extendStatics(d, b);
          function __() { this.constructor = d; }
          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
      };
  })();
  (function (factory) {
      if (typeof module === "object" && typeof module.exports === "object") {
          var v = factory(require, exports);
          if (v !== undefined) module.exports = v;
      }
      else if (typeof define === "function" && define.amd) {
          define(["require", "exports", "./cssCompletion", "../cssLanguageTypes", "vscode-nls"], factory);
      }
  })(function (require, exports) {
      /*---------------------------------------------------------------------------------------------
       *  Copyright (c) Microsoft Corporation. All rights reserved.
       *  Licensed under the MIT License. See License.txt in the project root for license information.
       *--------------------------------------------------------------------------------------------*/
      'use strict';
      Object.defineProperty(exports, "__esModule", { value: true });
      var cssCompletion_1 = require("./cssCompletion");
      var cssLanguageTypes_1 = require("../cssLanguageTypes");
      var nls = require("vscode-nls");
      var localize = nls.loadMessageBundle();
      var LESSCompletion = /** @class */ (function (_super) {
          __extends(LESSCompletion, _super);
          function LESSCompletion(lsOptions, cssDataManager) {
              return _super.call(this, '@', lsOptions, cssDataManager) || this;
          }
          LESSCompletion.prototype.createFunctionProposals = function (proposals, existingNode, sortToEnd, result) {
              for (var _i = 0, proposals_1 = proposals; _i < proposals_1.length; _i++) {
                  var p = proposals_1[_i];
                  var item = {
                      label: p.name,
                      detail: p.example,
                      documentation: p.description,
                      textEdit: cssLanguageTypes_1.TextEdit.replace(this.getCompletionRange(existingNode), p.name + '($0)'),
                      insertTextFormat: cssLanguageTypes_1.InsertTextFormat.Snippet,
                      kind: cssLanguageTypes_1.CompletionItemKind.Function
                  };
                  if (sortToEnd) {
                      item.sortText = 'z';
                  }
                  result.items.push(item);
              }
              return result;
          };
          LESSCompletion.prototype.getTermProposals = function (entry, existingNode, result) {
              var functions = LESSCompletion.builtInProposals;
              if (entry) {
                  functions = functions.filter(function (f) { return !f.type || !entry.restrictions || entry.restrictions.indexOf(f.type) !== -1; });
              }
              this.createFunctionProposals(functions, existingNode, true, result);
              return _super.prototype.getTermProposals.call(this, entry, existingNode, result);
          };
          LESSCompletion.prototype.getColorProposals = function (entry, existingNode, result) {
              this.createFunctionProposals(LESSCompletion.colorProposals, existingNode, false, result);
              return _super.prototype.getColorProposals.call(this, entry, existingNode, result);
          };
          LESSCompletion.prototype.getCompletionsForDeclarationProperty = function (declaration, result) {
              this.getCompletionsForSelector(null, true, result);
              return _super.prototype.getCompletionsForDeclarationProperty.call(this, declaration, result);
          };
          LESSCompletion.builtInProposals = [
              // Boolean functions
              {
                  'name': 'if',
                  'example': 'if(condition, trueValue [, falseValue]);',
                  'description': localize('less.builtin.if', 'returns one of two values depending on a condition.')
              },
              {
                  'name': 'boolean',
                  'example': 'boolean(condition);',
                  'description': localize('less.builtin.boolean', '"store" a boolean test for later evaluation in a guard or if().')
              },
              // List functions
              {
                  'name': 'length',
                  'example': 'length(@list);',
                  'description': localize('less.builtin.length', 'returns the number of elements in a value list')
              },
              {
                  'name': 'extract',
                  'example': 'extract(@list, index);',
                  'description': localize('less.builtin.extract', 'returns a value at the specified position in the list')
              },
              {
                  'name': 'range',
                  'example': 'range([start, ] end [, step]);',
                  'description': localize('less.builtin.range', 'generate a list spanning a range of values')
              },
              {
                  'name': 'each',
                  'example': 'each(@list, ruleset);',
                  'description': localize('less.builtin.each', 'bind the evaluation of a ruleset to each member of a list.')
              },
              // Other built-ins
              {
                  'name': 'escape',
                  'example': 'escape(@string);',
                  'description': localize('less.builtin.escape', 'URL encodes a string')
              },
              {
                  'name': 'e',
                  'example': 'e(@string);',
                  'description': localize('less.builtin.e', 'escape string content')
              },
              {
                  'name': 'replace',
                  'example': 'replace(@string, @pattern, @replacement[, @flags]);',
                  'description': localize('less.builtin.replace', 'string replace')
              },
              {
                  'name': 'unit',
                  'example': 'unit(@dimension, [@unit: \'\']);',
                  'description': localize('less.builtin.unit', 'remove or change the unit of a dimension')
              },
              {
                  'name': 'color',
                  'example': 'color(@string);',
                  'description': localize('less.builtin.color', 'parses a string to a color'),
                  'type': 'color'
              },
              {
                  'name': 'convert',
                  'example': 'convert(@value, unit);',
                  'description': localize('less.builtin.convert', 'converts numbers from one type into another')
              },
              {
                  'name': 'data-uri',
                  'example': 'data-uri([mimetype,] url);',
                  'description': localize('less.builtin.data-uri', 'inlines a resource and falls back to `url()`'),
                  'type': 'url'
              },
              {
                  'name': 'abs',
                  'description': localize('less.builtin.abs', 'absolute value of a number'),
                  'example': 'abs(number);'
              },
              {
                  'name': 'acos',
                  'description': localize('less.builtin.acos', 'arccosine - inverse of cosine function'),
                  'example': 'acos(number);'
              },
              {
                  'name': 'asin',
                  'description': localize('less.builtin.asin', 'arcsine - inverse of sine function'),
                  'example': 'asin(number);'
              },
              {
                  'name': 'ceil',
                  'example': 'ceil(@number);',
                  'description': localize('less.builtin.ceil', 'rounds up to an integer')
              },
              {
                  'name': 'cos',
                  'description': localize('less.builtin.cos', 'cosine function'),
                  'example': 'cos(number);'
              },
              {
                  'name': 'floor',
                  'description': localize('less.builtin.floor', 'rounds down to an integer'),
                  'example': 'floor(@number);'
              },
              {
                  'name': 'percentage',
                  'description': localize('less.builtin.percentage', 'converts to a %, e.g. 0.5 > 50%'),
                  'example': 'percentage(@number);',
                  'type': 'percentage'
              },
              {
                  'name': 'round',
                  'description': localize('less.builtin.round', 'rounds a number to a number of places'),
                  'example': 'round(number, [places: 0]);'
              },
              {
                  'name': 'sqrt',
                  'description': localize('less.builtin.sqrt', 'calculates square root of a number'),
                  'example': 'sqrt(number);'
              },
              {
                  'name': 'sin',
                  'description': localize('less.builtin.sin', 'sine function'),
                  'example': 'sin(number);'
              },
              {
                  'name': 'tan',
                  'description': localize('less.builtin.tan', 'tangent function'),
                  'example': 'tan(number);'
              },
              {
                  'name': 'atan',
                  'description': localize('less.builtin.atan', 'arctangent - inverse of tangent function'),
                  'example': 'atan(number);'
              },
              {
                  'name': 'pi',
                  'description': localize('less.builtin.pi', 'returns pi'),
                  'example': 'pi();'
              },
              {
                  'name': 'pow',
                  'description': localize('less.builtin.pow', 'first argument raised to the power of the second argument'),
                  'example': 'pow(@base, @exponent);'
              },
              {
                  'name': 'mod',
                  'description': localize('less.builtin.mod', 'first argument modulus second argument'),
                  'example': 'mod(number, number);'
              },
              {
                  'name': 'min',
                  'description': localize('less.builtin.min', 'returns the lowest of one or more values'),
                  'example': 'min(@x, @y);'
              },
              {
                  'name': 'max',
                  'description': localize('less.builtin.max', 'returns the lowest of one or more values'),
                  'example': 'max(@x, @y);'
              }
          ];
          LESSCompletion.colorProposals = [
              {
                  'name': 'argb',
                  'example': 'argb(@color);',
                  'description': localize('less.builtin.argb', 'creates a #AARRGGBB')
              },
              {
                  'name': 'hsl',
                  'example': 'hsl(@hue, @saturation, @lightness);',
                  'description': localize('less.builtin.hsl', 'creates a color')
              },
              {
                  'name': 'hsla',
                  'example': 'hsla(@hue, @saturation, @lightness, @alpha);',
                  'description': localize('less.builtin.hsla', 'creates a color')
              },
              {
                  'name': 'hsv',
                  'example': 'hsv(@hue, @saturation, @value);',
                  'description': localize('less.builtin.hsv', 'creates a color')
              },
              {
                  'name': 'hsva',
                  'example': 'hsva(@hue, @saturation, @value, @alpha);',
                  'description': localize('less.builtin.hsva', 'creates a color')
              },
              {
                  'name': 'hue',
                  'example': 'hue(@color);',
                  'description': localize('less.builtin.hue', 'returns the `hue` channel of `@color` in the HSL space')
              },
              {
                  'name': 'saturation',
                  'example': 'saturation(@color);',
                  'description': localize('less.builtin.saturation', 'returns the `saturation` channel of `@color` in the HSL space')
              },
              {
                  'name': 'lightness',
                  'example': 'lightness(@color);',
                  'description': localize('less.builtin.lightness', 'returns the `lightness` channel of `@color` in the HSL space')
              },
              {
                  'name': 'hsvhue',
                  'example': 'hsvhue(@color);',
                  'description': localize('less.builtin.hsvhue', 'returns the `hue` channel of `@color` in the HSV space')
              },
              {
                  'name': 'hsvsaturation',
                  'example': 'hsvsaturation(@color);',
                  'description': localize('less.builtin.hsvsaturation', 'returns the `saturation` channel of `@color` in the HSV space')
              },
              {
                  'name': 'hsvvalue',
                  'example': 'hsvvalue(@color);',
                  'description': localize('less.builtin.hsvvalue', 'returns the `value` channel of `@color` in the HSV space')
              },
              {
                  'name': 'red',
                  'example': 'red(@color);',
                  'description': localize('less.builtin.red', 'returns the `red` channel of `@color`')
              },
              {
                  'name': 'green',
                  'example': 'green(@color);',
                  'description': localize('less.builtin.green', 'returns the `green` channel of `@color`')
              },
              {
                  'name': 'blue',
                  'example': 'blue(@color);',
                  'description': localize('less.builtin.blue', 'returns the `blue` channel of `@color`')
              },
              {
                  'name': 'alpha',
                  'example': 'alpha(@color);',
                  'description': localize('less.builtin.alpha', 'returns the `alpha` channel of `@color`')
              },
              {
                  'name': 'luma',
                  'example': 'luma(@color);',
                  'description': localize('less.builtin.luma', 'returns the `luma` value (perceptual brightness) of `@color`')
              },
              {
                  'name': 'saturate',
                  'example': 'saturate(@color, 10%);',
                  'description': localize('less.builtin.saturate', 'return `@color` 10% points more saturated')
              },
              {
                  'name': 'desaturate',
                  'example': 'desaturate(@color, 10%);',
                  'description': localize('less.builtin.desaturate', 'return `@color` 10% points less saturated')
              },
              {
                  'name': 'lighten',
                  'example': 'lighten(@color, 10%);',
                  'description': localize('less.builtin.lighten', 'return `@color` 10% points lighter')
              },
              {
                  'name': 'darken',
                  'example': 'darken(@color, 10%);',
                  'description': localize('less.builtin.darken', 'return `@color` 10% points darker')
              },
              {
                  'name': 'fadein',
                  'example': 'fadein(@color, 10%);',
                  'description': localize('less.builtin.fadein', 'return `@color` 10% points less transparent')
              },
              {
                  'name': 'fadeout',
                  'example': 'fadeout(@color, 10%);',
                  'description': localize('less.builtin.fadeout', 'return `@color` 10% points more transparent')
              },
              {
                  'name': 'fade',
                  'example': 'fade(@color, 50%);',
                  'description': localize('less.builtin.fade', 'return `@color` with 50% transparency')
              },
              {
                  'name': 'spin',
                  'example': 'spin(@color, 10);',
                  'description': localize('less.builtin.spin', 'return `@color` with a 10 degree larger in hue')
              },
              {
                  'name': 'mix',
                  'example': 'mix(@color1, @color2, [@weight: 50%]);',
                  'description': localize('less.builtin.mix', 'return a mix of `@color1` and `@color2`')
              },
              {
                  'name': 'greyscale',
                  'example': 'greyscale(@color);',
                  'description': localize('less.builtin.greyscale', 'returns a grey, 100% desaturated color'),
              },
              {
                  'name': 'contrast',
                  'example': 'contrast(@color1, [@darkcolor: black], [@lightcolor: white], [@threshold: 43%]);',
                  'description': localize('less.builtin.contrast', 'return `@darkcolor` if `@color1 is> 43% luma` otherwise return `@lightcolor`, see notes')
              },
              {
                  'name': 'multiply',
                  'example': 'multiply(@color1, @color2);'
              },
              {
                  'name': 'screen',
                  'example': 'screen(@color1, @color2);'
              },
              {
                  'name': 'overlay',
                  'example': 'overlay(@color1, @color2);'
              },
              {
                  'name': 'softlight',
                  'example': 'softlight(@color1, @color2);'
              },
              {
                  'name': 'hardlight',
                  'example': 'hardlight(@color1, @color2);'
              },
              {
                  'name': 'difference',
                  'example': 'difference(@color1, @color2);'
              },
              {
                  'name': 'exclusion',
                  'example': 'exclusion(@color1, @color2);'
              },
              {
                  'name': 'average',
                  'example': 'average(@color1, @color2);'
              },
              {
                  'name': 'negation',
                  'example': 'negation(@color1, @color2);'
              }
          ];
          return LESSCompletion;
      }(cssCompletion_1.CSSCompletion));
      exports.LESSCompletion = LESSCompletion;
  });
  