config

Personal configuration.
git clone git://code.dwrz.net/config
Log | Files | Refs

lsp-javascript.el (47982B)


      1 ;;; lsp-javascript.el --- description -*- lexical-binding: t; -*-
      2 
      3 ;; Copyright (C) 2020 emacs-lsp maintainers
      4 
      5 ;; Author: emacs-lsp maintainers
      6 ;; Keywords: lsp,
      7 
      8 ;; This program is free software; you can redistribute it and/or modify
      9 ;; it under the terms of the GNU General Public License as published by
     10 ;; the Free Software Foundation, either version 3 of the License, or
     11 ;; (at your option) any later version.
     12 
     13 ;; This program is distributed in the hope that it will be useful,
     14 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16 ;; GNU General Public License for more details.
     17 
     18 ;; You should have received a copy of the GNU General Public License
     19 ;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
     20 
     21 ;;; Commentary:
     22 
     23 ;; LSP Clients for the JavaScript and TypeScript Programming Languages.
     24 
     25 ;;; Code:
     26 
     27 (require 'lsp-mode)
     28 
     29 (lsp-dependency 'javascript-typescript-langserver
     30                 '(:system "javascript-typescript-stdio")
     31                 '(:npm :package "javascript-typescript-langserver"
     32                        :path "javascript-typescript-stdio"))
     33 
     34 (defgroup lsp-typescript-javascript nil
     35   "Support for TypeScript/JavaScript, using Sourcegraph's JavaScript/TypeScript language server."
     36   :group 'lsp-mode
     37   :link '(url-link "https://github.com/sourcegraph/javascript-typescript-langserver"))
     38 
     39 ;; Original name can be confused with initializationOptions. Preferences is just one option of initializationOptions.
     40 (define-obsolete-variable-alias
     41   'lsp-clients-typescript-init-opts
     42   'lsp-clients-typescript-preferences
     43   "lsp-mode 9.0.0")
     44 
     45 (defcustom lsp-clients-typescript-javascript-server-args '()
     46   "Extra arguments for the typescript-language-server language server."
     47   :group 'lsp-typescript-javascript
     48   :risky t
     49   :type '(repeat string))
     50 
     51 (defun lsp-typescript-javascript-tsx-jsx-activate-p (filename &optional _)
     52   "Check if the js-ts lsp server should be enabled based on FILENAME."
     53   (or (string-match-p "\\.[cm]js\\|\\.[jt]sx?\\'" filename)
     54       (and (derived-mode-p 'js-mode 'js-ts-mode 'typescript-mode 'typescript-ts-mode)
     55            (not (derived-mode-p 'json-mode)))))
     56 
     57 ;; Unmaintained sourcegraph server
     58 (lsp-register-client
     59  (make-lsp-client :new-connection (lsp-stdio-connection (lambda ()
     60                                                           (cons (lsp-package-path 'javascript-typescript-langserver)
     61                                                                 lsp-clients-typescript-javascript-server-args)))
     62                   :activation-fn 'lsp-typescript-javascript-tsx-jsx-activate-p
     63                   :priority -3
     64                   :completion-in-comments? t
     65                   :server-id 'jsts-ls
     66                   :download-server-fn (lambda (_client callback error-callback _update?)
     67                                         (lsp-package-ensure
     68                                          'javascript-typescript-langserver
     69                                          callback
     70                                          error-callback))
     71                   :initialized-fn (lambda (_workspace)
     72                                     (warn (concat "The javascript-typescript-langserver (jsts-ls) is unmaintained; "
     73                                                   "it is recommended to use ts-ls or deno-ls instead.")))))
     74 
     75 (defgroup lsp-typescript nil
     76   "LSP support for TypeScript, using Theia/Typefox's TypeScript Language Server."
     77   :group 'lsp-mode
     78   :link '(url-link "https://github.com/theia-ide/typescript-language-server"))
     79 
     80 (defcustom lsp-clients-typescript-tls-path "typescript-language-server"
     81   "Path to the typescript-language-server binary."
     82   :group 'lsp-typescript
     83   :risky t
     84   :type 'string)
     85 
     86 (defcustom lsp-clients-typescript-server-args '("--stdio")
     87   "Extra arguments for the typescript-language-server language server."
     88   :group 'lsp-typescript
     89   :risky t
     90   :type '(repeat string))
     91 
     92 (defcustom lsp-clients-typescript-disable-automatic-typing-acquisition nil
     93   "Disable tsserver from automatically fetching missing type definitions.
     94 \(@types packages) for external modules."
     95   :group 'lsp-typescript
     96   :type 'boolean)
     97 
     98 (defcustom lsp-clients-typescript-log-verbosity "info"
     99   "The verbosity level of the information printed in the log by tsserver."
    100   :group 'lsp-typescript
    101   :type '(choice
    102           (const "off")
    103           (const "terse")
    104           (const "normal")
    105           (const "requesttime")
    106           (const "verbose")))
    107 
    108 (defcustom lsp-clients-typescript-max-ts-server-memory nil
    109   "The maximum size of the V8's old memory section in megabytes.
    110 \(for example 4096 means 4GB). The default value is dynamically configured
    111 by Node so can differ per system. Increase for very big projects that
    112 exceed allowed memory usage."
    113   :group 'lsp-typescript
    114   :type 'integer)
    115 
    116 (defcustom lsp-clients-typescript-npm-location nil
    117   "Specifies the path to the NPM exec used for Automatic Type Acquisition."
    118   :group 'lsp-typescript
    119   :type 'string)
    120 
    121 (defcustom lsp-clients-typescript-prefer-use-project-ts-server nil
    122   "When set, prefers using the tsserver.js from your project. This
    123 can allow loading plugins configured in your tsconfig.json."
    124   :group 'lsp-typescript
    125   :type 'boolean)
    126 
    127 (defcustom lsp-clients-typescript-plugins (vector)
    128   "The list of plugins to load.
    129 It should be a vector of plist with keys `:location' and `:name'
    130 where `:name' is the name of the package and `:location' is the
    131 directory containing the package. Example:
    132 \(vector
    133    \(list :name \"@vsintellicode/typescript-intellicode-plugin\"
    134          :location \"<path>.vscode/extensions/visualstudioexptteam.
    135                             vscodeintellicode-1.1.9/\"))"
    136   :group 'lsp-typescript
    137   :type  '(restricted-sexp :tag "Vector"
    138                            :match-alternatives
    139                            (lambda (xs)
    140                              (and (vectorp xs) (seq-every-p
    141                                                 (-lambda ((&plist :name :location))
    142                                                   (and name location))
    143                                                 xs)))))
    144 
    145 (defcustom lsp-clients-typescript-preferences nil
    146   "Preferences passed to the Typescript (tsserver) process.
    147 See https://github.com/typescript-language-server/typescript-language-server#initializationoptions for the list of preferences available in the latest version of TypeScript."
    148   :group 'lsp-typescript
    149   :type 'plist)
    150 
    151 (defcustom lsp-clients-typescript-tsserver nil
    152   "Options related to the tsserver process. See below for more info.
    153 See https://github.com/typescript-language-server/typescript-language-server#initializationoptions for the list of tsserver available in the latest version of TypeScript."
    154   :group 'lsp-typescript
    155   :type 'plist)
    156 
    157 (defcustom lsp-typescript-tsdk nil
    158   "Specifies the folder path containing tsserver and lib*.d.ts files to use."
    159   :type '(repeat string)
    160   :group 'lsp-vetur
    161   :package-version '(lsp-mode . "6.1"))
    162 
    163 (defcustom lsp-typescript-disable-automatic-type-acquisition nil
    164   "Disables automatic type acquisition.
    165 Automatic type acquisition fetches `@types` packages from npm to improve
    166 IntelliSense for external libraries."
    167   :type 'boolean
    168   :group 'lsp-vetur
    169   :package-version '(lsp-mode . "6.1"))
    170 
    171 (defcustom lsp-typescript-npm nil
    172   "Specifies the path to the NPM exec used for Automatic Type Acquisition.
    173 Requires using TypeScript 2.3.4 or newer in the
    174 workspace."
    175   :type '(repeat string)
    176   :group 'lsp-vetur
    177   :package-version '(lsp-mode . "6.1"))
    178 
    179 (defcustom lsp-typescript-check-npm-is-installed t
    180   "Check if NPM is installed for Automatic Type Acquisition."
    181   :type 'boolean
    182   :group 'lsp-vetur
    183   :package-version '(lsp-mode . "6.1"))
    184 
    185 (defcustom lsp-javascript-references-code-lens-enabled nil
    186   "Enable/disable references CodeLens in JavaScript files."
    187   :type 'boolean
    188   :group 'lsp-vetur
    189   :package-version '(lsp-mode . "6.1"))
    190 
    191 (defcustom lsp-typescript-references-code-lens-enabled nil
    192   "Enable/disable references CodeLens in TypeScript files."
    193   :type 'boolean
    194   :group 'lsp-vetur
    195   :package-version '(lsp-mode . "6.1"))
    196 
    197 (defcustom lsp-typescript-implementations-code-lens-enabled nil
    198   "Enable/disable implementations CodeLens.
    199 This CodeLens shows the implementers of an interface."
    200   :type 'boolean
    201   :group 'lsp-vetur
    202   :package-version '(lsp-mode . "6.1"))
    203 
    204 (defcustom lsp-typescript-tsserver-log "off"
    205   "Enables logging of the TS server to a file.
    206 This log can be used to diagnose TS Server issues. The log may contain file
    207 paths, source code, and other potentially sensitive information
    208 from your project."
    209   :type '(choice
    210           (const "off")
    211           (const "terse")
    212           (const "normal")
    213           (const "verbose"))
    214   :group 'lsp-vetur
    215   :package-version '(lsp-mode . "6.1"))
    216 
    217 (defcustom lsp-typescript-tsserver-plugin-paths nil
    218   "Additional paths to discover Typescript Language Service plugins.
    219 Requires using TypeScript 2.3.0 or newer in the
    220 workspace."
    221   :type '(repeat string)
    222   :package-version '(lsp-mode . "6.1"))
    223 
    224 (defcustom lsp-typescript-tsserver-trace "off"
    225   "Enables tracing of messages sent to the TS server.
    226 This trace can be used to diagnose TS Server issues. The trace may contain
    227 file paths, source code, and other potentially sensitive
    228 information from your project."
    229   :type '(choice
    230           (const "off")
    231           (const "messages")
    232           (const "verbose"))
    233   :package-version '(lsp-mode . "6.1"))
    234 
    235 (defcustom lsp-javascript-suggest-complete-function-calls nil
    236   "Complete functions with their parameter signature."
    237   :type 'boolean
    238   :package-version '(lsp-mode . "6.1"))
    239 
    240 (defcustom lsp-typescript-suggest-complete-function-calls nil
    241   "Complete functions with their parameter signature."
    242   :type 'boolean
    243   :package-version '(lsp-mode . "6.1"))
    244 
    245 (defcustom lsp-typescript-report-style-checks-as-warnings t
    246   "Report style checks as warnings."
    247   :type 'boolean
    248   :package-version '(lsp-mode . "6.1"))
    249 
    250 (defcustom lsp-typescript-validate-enable t
    251   "Enable/disable TypeScript validation."
    252   :type 'boolean
    253   :package-version '(lsp-mode . "6.1"))
    254 
    255 (defcustom lsp-typescript-format-enable t
    256   "Enable/disable default TypeScript formatter."
    257   :type 'boolean
    258   :package-version '(lsp-mode . "6.1"))
    259 
    260 (defcustom lsp-typescript-format-insert-space-after-comma-delimiter t
    261   "Defines space handling after a comma delimiter."
    262   :type 'boolean
    263   :package-version '(lsp-mode . "6.1"))
    264 
    265 (defcustom lsp-typescript-format-insert-space-after-constructor nil
    266   "Defines space handling after the constructor keyword.
    267 Requires using TypeScript 2.3.0 or newer in the workspace."
    268   :type 'boolean
    269   :package-version '(lsp-mode . "6.1"))
    270 
    271 (defcustom lsp-typescript-format-insert-space-after-semicolon-in-for-statements t
    272   "Defines space handling after a semicolon in a for statement."
    273   :type 'boolean
    274   :package-version '(lsp-mode . "6.1"))
    275 
    276 (defcustom lsp-typescript-format-insert-space-before-and-after-binary-operators t
    277   "Defines space handling after a binary operator."
    278   :type 'boolean
    279   :package-version '(lsp-mode . "6.1"))
    280 
    281 (defcustom lsp-typescript-format-insert-space-after-keywords-in-control-flow-statements t
    282   "Defines space handling after keywords in a control flow statement."
    283   :type 'boolean
    284   :package-version '(lsp-mode . "6.1"))
    285 
    286 (defcustom lsp-typescript-format-insert-space-after-function-keyword-for-anonymous-functions t
    287   "Defines space handling after function keyword for anonymous functions."
    288   :type 'boolean
    289   :package-version '(lsp-mode . "6.1"))
    290 
    291 (defcustom lsp-typescript-format-insert-space-before-function-parenthesis nil
    292   "Defines space handling before function argument parentheses."
    293   :type 'boolean
    294   :package-version '(lsp-mode . "6.1"))
    295 
    296 (defcustom lsp-typescript-format-insert-space-after-opening-and-before-closing-empty-braces nil
    297   "Defines space handling after opening/before closing empty braces."
    298   :type 'boolean
    299   :package-version '(lsp-mode . "6.1"))
    300 
    301 (defcustom lsp-typescript-format-insert-space-after-opening-and-before-closing-nonempty-parenthesis nil
    302   "Defines space handling after opening/before closing non-empty parenthesis."
    303   :type 'boolean
    304   :package-version '(lsp-mode . "6.1"))
    305 
    306 (defcustom lsp-typescript-format-insert-space-after-opening-and-before-closing-nonempty-brackets nil
    307   "Defines space handling after opening and before closing non-empty brackets."
    308   :type 'boolean
    309   :package-version '(lsp-mode . "6.1"))
    310 
    311 (defcustom lsp-typescript-format-insert-space-after-opening-and-before-closing-nonempty-braces t
    312   "Defines space handling after opening and before closing non-empty braces.
    313 Requires using TypeScript 2.3.0 or newer in the workspace."
    314   :type 'boolean
    315   :package-version '(lsp-mode . "6.1"))
    316 
    317 (defcustom lsp-typescript-format-insert-space-after-opening-and-before-closing-template-string-braces nil
    318   "Defines space handling after opening/before closing template string braces."
    319   :type 'boolean
    320   :package-version '(lsp-mode . "6.1"))
    321 
    322 (defcustom lsp-typescript-format-insert-space-after-opening-and-before-closing-jsx-expression-braces nil
    323   "Defines space handling after opening/before closing JSX expression braces."
    324   :type 'boolean
    325   :package-version '(lsp-mode . "6.1"))
    326 
    327 (defcustom lsp-typescript-format-insert-space-after-type-assertion nil
    328   "Defines space handling after type assertions in TypeScript.
    329 Requires using TypeScript 2.4 or newer in the workspace."
    330   :type 'boolean
    331   :package-version '(lsp-mode . "6.1"))
    332 
    333 (defcustom lsp-typescript-format-place-open-brace-on-new-line-for-functions nil
    334   "Defines whether an open brace is put onto a new line for functions or not."
    335   :type 'boolean
    336   :package-version '(lsp-mode . "6.1"))
    337 
    338 (defcustom lsp-typescript-format-place-open-brace-on-new-line-for-control-blocks nil
    339   "Defines whether an open brace is put onto a newline for control blocks."
    340   :type 'boolean
    341   :package-version '(lsp-mode . "6.1"))
    342 
    343 (defcustom lsp-javascript-validate-enable t
    344   "Enable/disable JavaScript validation."
    345   :type 'boolean
    346   :package-version '(lsp-mode . "6.1"))
    347 
    348 (defcustom lsp-javascript-format-enable t
    349   "Enable/disable default JavaScript formatter."
    350   :type 'boolean
    351   :package-version '(lsp-mode . "6.1"))
    352 
    353 (defcustom lsp-javascript-format-insert-space-after-comma-delimiter t
    354   "Defines space handling after a comma delimiter."
    355   :type 'boolean
    356   :package-version '(lsp-mode . "6.1"))
    357 
    358 (defcustom lsp-javascript-format-insert-space-after-constructor nil
    359   "Defines space handling after the constructor keyword.
    360 Requires using TypeScript 2.3.0 or newer in the workspace."
    361   :type 'boolean
    362   :package-version '(lsp-mode . "6.1"))
    363 
    364 (defcustom lsp-javascript-format-insert-space-after-semicolon-in-for-statements t
    365   "Defines space handling after a semicolon in a for statement."
    366   :type 'boolean
    367   :package-version '(lsp-mode . "6.1"))
    368 
    369 (defcustom lsp-javascript-format-insert-space-before-and-after-binary-operators t
    370   "Defines space handling after a binary operator."
    371   :type 'boolean
    372   :package-version '(lsp-mode . "6.1"))
    373 
    374 (defcustom lsp-javascript-format-insert-space-after-keywords-in-control-flow-statements t
    375   "Defines space handling after keywords in a control flow statement."
    376   :type 'boolean
    377   :package-version '(lsp-mode . "6.1"))
    378 
    379 (defcustom lsp-javascript-format-insert-space-after-function-keyword-for-anonymous-functions t
    380   "Defines space handling after function keyword for anonymous functions."
    381   :type 'boolean
    382   :package-version '(lsp-mode . "6.1"))
    383 
    384 (defcustom lsp-javascript-format-insert-space-before-function-parenthesis nil
    385   "Defines space handling before function argument parentheses."
    386   :type 'boolean
    387   :package-version '(lsp-mode . "6.1"))
    388 
    389 (defcustom lsp-javascript-format-insert-space-after-opening-and-before-closing-empty-braces nil
    390   "Defines space handling after opening/before closing empty braces."
    391   :type 'boolean
    392   :package-version '(lsp-mode . "6.1"))
    393 
    394 (defcustom lsp-javascript-format-insert-space-after-opening-and-before-closing-nonempty-parenthesis nil
    395   "Defines space handling after opening and before closing non-empty parenthesis."
    396   :type 'boolean
    397   :package-version '(lsp-mode . "6.1"))
    398 
    399 (defcustom lsp-javascript-format-insert-space-after-opening-and-before-closing-nonempty-brackets nil
    400   "Defines space handling after opening and before closing non-empty brackets."
    401   :type 'boolean
    402   :package-version '(lsp-mode . "6.1"))
    403 
    404 (defcustom lsp-javascript-format-insert-space-after-opening-and-before-closing-nonempty-braces t
    405   "Defines space handling after opening and before closing non-empty braces.
    406 Requires using TypeScript 2.3.0 or newer in the workspace."
    407   :type 'boolean
    408   :package-version '(lsp-mode . "6.1"))
    409 
    410 (defcustom lsp-javascript-format-insert-space-after-opening-and-before-closing-template-string-braces nil
    411   "Defines space handling after opening/before closing template string braces."
    412   :type 'boolean
    413   :package-version '(lsp-mode . "6.1"))
    414 
    415 (defcustom lsp-javascript-format-insert-space-after-opening-and-before-closing-jsx-expression-braces nil
    416   "Defines space handling after opening/before closing JSX expression braces."
    417   :type 'boolean
    418   :package-version '(lsp-mode . "6.1"))
    419 
    420 (defcustom lsp-javascript-format-place-open-brace-on-new-line-for-functions nil
    421   "Defines whether an open brace is put onto a new line for functions or not."
    422   :type 'boolean
    423   :package-version '(lsp-mode . "6.1"))
    424 
    425 (defcustom lsp-javascript-format-place-open-brace-on-new-line-for-control-blocks nil
    426   "Defines whether an open brace is put onto a new line for control blocks or not."
    427   :type 'boolean
    428   :package-version '(lsp-mode . "6.1"))
    429 
    430 (defcustom lsp-javascript-implicit-project-config-check-js nil
    431   "Enable/disable semantic checking of JavaScript files.
    432 Existing jsconfig.json or tsconfig.json files override this setting.
    433 Requires using TypeScript 2.3.1 or newer in the workspace."
    434   :type 'boolean
    435   :package-version '(lsp-mode . "6.1"))
    436 
    437 (defcustom lsp-javascript-implicit-project-config-experimental-decorators nil
    438   nil
    439   :type 'boolean
    440   :package-version '(lsp-mode . "6.1"))
    441 
    442 (defcustom lsp-javascript-suggest-names t
    443   "Enable/disable including unique names from the file in JavaScript suggestions."
    444   :type 'boolean
    445   :package-version '(lsp-mode . "6.1"))
    446 
    447 (defcustom lsp-typescript-tsc-auto-detect "on"
    448   "Controls auto detection of tsc tasks."
    449   :type '(choice
    450           (const "on")
    451           (const "off")
    452           (const "build")
    453           (const "watch"))
    454   :package-version '(lsp-mode . "6.1"))
    455 
    456 (defcustom lsp-javascript-suggest-paths t
    457   "Enable/disable suggestions for paths in import statements and require calls."
    458   :type 'boolean
    459   :package-version '(lsp-mode . "6.1"))
    460 
    461 (defcustom lsp-typescript-suggest-paths t
    462   "Enable/disable suggestions for paths in import statements and require calls."
    463   :type 'boolean
    464   :package-version '(lsp-mode . "6.1"))
    465 
    466 (defcustom lsp-javascript-suggest-auto-imports t
    467   "Enable/disable auto import suggestions.
    468 Requires using TypeScript 2.6.1 or newer in the workspace."
    469   :type 'boolean
    470   :package-version '(lsp-mode . "6.1"))
    471 
    472 (defcustom lsp-typescript-suggest-auto-imports t
    473   "Enable/disable auto import suggestions. Requires using
    474 TypeScript 2.6.1 or newer in the workspace."
    475   :type 'boolean
    476   :package-version '(lsp-mode . "6.1"))
    477 
    478 (defcustom lsp-javascript-suggest-complete-js-docs t
    479   "Enable/disable suggestion to complete JSDoc comments."
    480   :type 'boolean
    481   :package-version '(lsp-mode . "6.1"))
    482 
    483 (defcustom lsp-typescript-suggest-complete-js-docs t
    484   "Enable/disable suggestion to complete JSDoc comments."
    485   :type 'boolean
    486   :package-version '(lsp-mode . "6.1"))
    487 
    488 (defcustom lsp-typescript-locale nil
    489   nil
    490   :type '(choice
    491           (const "de")
    492           (const "es")
    493           (const "en")
    494           (const "fr")
    495           (const "it")
    496           (const "ja")
    497           (const "ko")
    498           (const "ru")
    499           (const "zh-CN")
    500           (const "zh-TW")
    501           (const :tag "default" nil))
    502   :package-version '(lsp-mode . "6.1"))
    503 
    504 (defcustom lsp-javascript-suggestion-actions-enabled t
    505   "Enable/disable suggestion diagnostics for JavaScript files in
    506 the editor. Requires using TypeScript 2.8 or newer in the
    507 workspace."
    508   :type 'boolean
    509   :package-version '(lsp-mode . "6.1"))
    510 
    511 (defcustom lsp-typescript-suggestion-actions-enabled t
    512   "Enable/disable suggestion diagnostics for TypeScript files in
    513 the editor. Requires using TypeScript 2.8 or newer in the
    514 workspace."
    515   :type 'boolean
    516   :package-version '(lsp-mode . "6.1"))
    517 
    518 (defcustom lsp-javascript-preferences-quote-style "auto" nil
    519   :type '(choice
    520           (const "auto")
    521           (const "single")
    522           (const "double"))
    523   :package-version '(lsp-mode . "6.1"))
    524 
    525 (defcustom lsp-typescript-preferences-quote-style "auto" nil
    526   :type '(choice
    527           (const "auto")
    528           (const "single")
    529           (const "double"))
    530   :package-version '(lsp-mode . "6.1"))
    531 
    532 (defcustom lsp-javascript-preferences-import-module-specifier "auto"
    533   "Preferred path style for auto imports."
    534   :type '(choice
    535           (const "auto")
    536           (const "relative")
    537           (const "non-relative"))
    538   :package-version '(lsp-mode . "6.1"))
    539 
    540 (defcustom lsp-typescript-preferences-import-module-specifier "auto"
    541   "Infer the shortest path type."
    542   :type '(choice
    543           (const "auto")
    544           (const "relative")
    545           (const "non-relative"))
    546   :package-version '(lsp-mode . "6.1"))
    547 
    548 (defcustom lsp-javascript-preferences-rename-shorthand-properties t
    549   "Enable/disable introducing aliases for object shorthand
    550 properties during renames. Requires using TypeScript 3.4 or newer
    551 in the workspace."
    552   :type 'boolean
    553   :package-version '(lsp-mode . "6.1"))
    554 
    555 (defcustom lsp-typescript-preferences-rename-shorthand-properties t
    556   "Enable/disable introducing aliases for object shorthand
    557 properties during renames. Requires using TypeScript 3.4 or newer
    558 in the workspace."
    559   :type 'boolean
    560   :package-version '(lsp-mode . "6.1"))
    561 
    562 (defcustom lsp-typescript-update-imports-on-file-move-enabled "prompt"
    563   "Enable/disable automatic updating of import paths when you
    564 rename or move a file in VS Code. Requires using TypeScript 2.9
    565 or newer in the workspace."
    566   :type '(choice
    567           (const "prompt")
    568           (const "always")
    569           (const "never"))
    570   :package-version '(lsp-mode . "6.1"))
    571 
    572 (defcustom lsp-javascript-update-imports-on-file-move-enabled "prompt"
    573   "Prompt on each rename."
    574   :type '(choice
    575           (const "prompt")
    576           (const "always")
    577           (const "never"))
    578   :package-version '(lsp-mode . "6.1"))
    579 
    580 (defcustom lsp-typescript-auto-closing-tags t
    581   "Enable/disable automatic closing of JSX tags. Requires using
    582 TypeScript 3.0 or newer in the workspace."
    583   :type 'boolean
    584   :package-version '(lsp-mode . "6.1"))
    585 
    586 (defcustom lsp-javascript-auto-closing-tags t
    587   "Enable/disable automatic closing of JSX tags. Requires using
    588 TypeScript 3.0 or newer in the workspace."
    589   :type 'boolean
    590   :package-version '(lsp-mode . "6.1"))
    591 
    592 (defcustom lsp-javascript-suggest-enabled t
    593   "Enabled/disable autocomplete suggestions."
    594   :type 'boolean
    595   :package-version '(lsp-mode . "6.1"))
    596 
    597 (defcustom lsp-typescript-suggest-enabled t
    598   "Enabled/disable autocomplete suggestions."
    599   :type 'boolean
    600   :package-version '(lsp-mode . "6.1"))
    601 
    602 (defcustom lsp-typescript-surveys-enabled t
    603   "Enabled/disable occasional surveys that help us improve VS
    604 Code's JavaScript and TypeScript support."
    605   :type 'boolean
    606   :package-version '(lsp-mode . "6.1"))
    607 
    608 (defcustom lsp-javascript-display-enum-member-value-hints nil
    609   "Show inlay hints for enum member values."
    610   :type 'boolean
    611   :package-version '(lsp-mode . "9.0.0"))
    612 
    613 (defcustom lsp-javascript-display-return-type-hints nil
    614   "Show inlay hints for function return types."
    615   :type 'boolean
    616   :package-version '(lsp-mode . "9.0.0"))
    617 
    618 (defcustom lsp-javascript-display-parameter-type-hints nil
    619   "Show inlay hints for function parameters."
    620   :type 'boolean
    621   :package-version '(lsp-mode . "9.0.0"))
    622 
    623 (defcustom lsp-javascript-display-parameter-name-hints "none"
    624   "Level of hinting for parameter types."
    625   :type '(choice (const :tag "none" "none")
    626                  (const :tag "literals" "literals")
    627                  (const :tag "all" "all"))
    628   :package-version '(lsp-mode . "9.0.0"))
    629 
    630 (defcustom lsp-javascript-display-parameter-name-hints-when-argument-matches-name nil
    631   "Show inlay hints for function parameters even when argument matches
    632 name (e.g. `data' variable passed as `data' parameter)."
    633   :type 'boolean
    634   :package-version '(lsp-mode . "9.0.0"))
    635 
    636 (defcustom lsp-javascript-display-property-declaration-type-hints nil
    637   "Show inlay hints for property declaration types."
    638   :type 'boolean
    639   :package-version '(lsp-mode . "9.0.0"))
    640 
    641 (defcustom lsp-javascript-display-variable-type-hints nil
    642   "Show inlay hints for variable types."
    643   :type 'boolean
    644   :package-version '(lsp-mode . "9.0.0"))
    645 
    646 (defcustom lsp-javascript-completions-complete-function-calls t
    647   "Complete function calls."
    648   :type 'boolean
    649   :package-version '(lsp-mode . "9.0.0"))
    650 
    651 (lsp-register-custom-settings
    652  '(("javascript.autoClosingTags" lsp-javascript-auto-closing-tags t)
    653    ("javascript.implicitProjectConfig.checkJs" lsp-javascript-implicit-project-config-check-js t)
    654    ("javascript.implicitProjectConfig.experimentalDecorators" lsp-javascript-implicit-project-config-experimental-decorators t)
    655    ("javascript.preferences.importModuleSpecifier" lsp-javascript-preferences-import-module-specifier)
    656    ("javascript.preferences.quoteStyle" lsp-javascript-preferences-quote-style)
    657    ("javascript.preferences.renameShorthandProperties" lsp-javascript-preferences-rename-shorthand-properties t)
    658    ("javascript.referencesCodeLens.enabled" lsp-javascript-references-code-lens-enabled t)
    659    ("javascript.suggest.autoImports" lsp-javascript-suggest-auto-imports t)
    660    ("javascript.suggest.completeFunctionCalls" lsp-javascript-suggest-complete-function-calls t)
    661    ("javascript.suggest.completeJSDocs" lsp-javascript-suggest-complete-js-docs t)
    662    ("javascript.suggest.enabled" lsp-javascript-suggest-enabled t)
    663    ("javascript.suggest.names" lsp-javascript-suggest-names t)
    664    ("javascript.suggest.paths" lsp-javascript-suggest-paths t)
    665    ("javascript.suggestionActions.enabled" lsp-javascript-suggestion-actions-enabled t)
    666    ("javascript.updateImportsOnFileMove.enabled" lsp-javascript-update-imports-on-file-move-enabled)
    667    ("javascript.validate.enable" lsp-javascript-validate-enable t)
    668    ("javascript.format.enable" lsp-javascript-format-enable t)
    669    ("javascript.format.insertSpaceAfterCommaDelimiter" lsp-javascript-format-insert-space-after-comma-delimiter t)
    670    ("javascript.format.insertSpaceAfterConstructor" lsp-javascript-format-insert-space-after-constructor t)
    671    ("javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions" lsp-javascript-format-insert-space-after-function-keyword-for-anonymous-functions t)
    672    ("javascript.format.insertSpaceAfterKeywordsInControlFlowStatements" lsp-javascript-format-insert-space-after-keywords-in-control-flow-statements t)
    673    ("javascript.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces" lsp-javascript-format-insert-space-after-opening-and-before-closing-jsx-expression-braces t)
    674    ("javascript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces" lsp-javascript-format-insert-space-after-opening-and-before-closing-empty-braces t)
    675    ("javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces" lsp-javascript-format-insert-space-after-opening-and-before-closing-nonempty-braces t)
    676    ("javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets" lsp-javascript-format-insert-space-after-opening-and-before-closing-nonempty-brackets t)
    677    ("javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis" lsp-javascript-format-insert-space-after-opening-and-before-closing-nonempty-parenthesis t)
    678    ("javascript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces" lsp-javascript-format-insert-space-after-opening-and-before-closing-template-string-braces t)
    679    ("javascript.format.insertSpaceAfterSemicolonInForStatements" lsp-javascript-format-insert-space-after-semicolon-in-for-statements t)
    680    ("javascript.format.insertSpaceBeforeAndAfterBinaryOperators" lsp-javascript-format-insert-space-before-and-after-binary-operators t)
    681    ("javascript.format.insertSpaceBeforeFunctionParenthesis" lsp-javascript-format-insert-space-before-function-parenthesis t)
    682    ("javascript.format.placeOpenBraceOnNewLineForControlBlocks" lsp-javascript-format-place-open-brace-on-new-line-for-control-blocks t)
    683    ("javascript.format.placeOpenBraceOnNewLineForFunctions" lsp-javascript-format-place-open-brace-on-new-line-for-functions t)
    684    ("typescript.autoClosingTags" lsp-typescript-auto-closing-tags t)
    685    ("typescript.check.npmIsInstalled" lsp-typescript-check-npm-is-installed t)
    686    ("typescript.disableAutomaticTypeAcquisition" lsp-typescript-disable-automatic-type-acquisition t)
    687    ("typescript.implementationsCodeLens.enabled" lsp-typescript-implementations-code-lens-enabled t)
    688    ("typescript.locale" lsp-typescript-locale)
    689    ("typescript.npm" lsp-typescript-npm)
    690    ("typescript.preferences.importModuleSpecifier" lsp-typescript-preferences-import-module-specifier)
    691    ("typescript.preferences.quoteStyle" lsp-typescript-preferences-quote-style)
    692    ("typescript.preferences.renameShorthandProperties" lsp-typescript-preferences-rename-shorthand-properties t)
    693    ("typescript.referencesCodeLens.enabled" lsp-typescript-references-code-lens-enabled t)
    694    ("typescript.reportStyleChecksAsWarnings" lsp-typescript-report-style-checks-as-warnings t)
    695    ("typescript.suggest.autoImports" lsp-typescript-suggest-auto-imports t)
    696    ("typescript.suggest.completeFunctionCalls" lsp-typescript-suggest-complete-function-calls t)
    697    ("typescript.suggest.completeJSDocs" lsp-typescript-suggest-complete-js-docs t)
    698    ("typescript.suggest.enabled" lsp-typescript-suggest-enabled t)
    699    ("typescript.suggest.paths" lsp-typescript-suggest-paths t)
    700    ("typescript.suggestionActions.enabled" lsp-typescript-suggestion-actions-enabled t)
    701    ("typescript.surveys.enabled" lsp-typescript-surveys-enabled t)
    702    ("typescript.tsc.autoDetect" lsp-typescript-tsc-auto-detect)
    703    ("typescript.tsdk" lsp-typescript-tsdk)
    704    ("typescript.tsserver.log" lsp-typescript-tsserver-log)
    705    ("typescript.tsserver.pluginPaths" lsp-typescript-tsserver-plugin-paths)
    706    ("typescript.tsserver.trace" lsp-typescript-tsserver-trace)
    707    ("typescript.updateImportsOnFileMove.enabled" lsp-typescript-update-imports-on-file-move-enabled)
    708    ("typescript.validate.enable" lsp-typescript-validate-enable t)
    709    ("typescript.format.enable" lsp-typescript-format-enable t)
    710    ("typescript.format.insertSpaceAfterCommaDelimiter" lsp-typescript-format-insert-space-after-comma-delimiter t)
    711    ("typescript.format.insertSpaceAfterConstructor" lsp-typescript-format-insert-space-after-constructor t)
    712    ("typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions" lsp-typescript-format-insert-space-after-function-keyword-for-anonymous-functions t)
    713    ("typescript.format.insertSpaceAfterKeywordsInControlFlowStatements" lsp-typescript-format-insert-space-after-keywords-in-control-flow-statements t)
    714    ("typescript.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces" lsp-typescript-format-insert-space-after-opening-and-before-closing-jsx-expression-braces t)
    715    ("typescript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces" lsp-typescript-format-insert-space-after-opening-and-before-closing-empty-braces t)
    716    ("typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces" lsp-typescript-format-insert-space-after-opening-and-before-closing-nonempty-braces t)
    717    ("typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets" lsp-typescript-format-insert-space-after-opening-and-before-closing-nonempty-brackets t)
    718    ("typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis" lsp-typescript-format-insert-space-after-opening-and-before-closing-nonempty-parenthesis t)
    719    ("typescript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces" lsp-typescript-format-insert-space-after-opening-and-before-closing-template-string-braces t)
    720    ("typescript.format.insertSpaceAfterSemicolonInForStatements" lsp-typescript-format-insert-space-after-semicolon-in-for-statements t)
    721    ("typescript.format.insertSpaceAfterTypeAssertion" lsp-typescript-format-insert-space-after-type-assertion t)
    722    ("typescript.format.insertSpaceBeforeAndAfterBinaryOperators" lsp-typescript-format-insert-space-before-and-after-binary-operators t)
    723    ("typescript.format.insertSpaceBeforeFunctionParenthesis" lsp-typescript-format-insert-space-before-function-parenthesis t)
    724    ("typescript.format.placeOpenBraceOnNewLineForControlBlocks" lsp-typescript-format-place-open-brace-on-new-line-for-control-blocks t)
    725    ("typescript.format.placeOpenBraceOnNewLineForFunctions" lsp-typescript-format-place-open-brace-on-new-line-for-functions t)
    726    ("typescript.inlayHints.includeInlayEnumMemberValueHints" lsp-javascript-display-enum-member-value-hints t)
    727    ("typescript.inlayHints.includeInlayFunctionLikeReturnTypeHints" lsp-javascript-display-return-type-hints t)
    728    ("typescript.inlayHints.includeInlayFunctionParameterTypeHints" lsp-javascript-display-parameter-type-hints t)
    729    ("typescript.inlayHints.includeInlayParameterNameHints" lsp-javascript-display-parameter-name-hints nil)
    730    ("typescript.inlayHints.includeInlayParameterNameHintsWhenArgumentMatchesName" lsp-javascript-display-parameter-name-hints-when-argument-matches-name t)
    731    ("typescript.inlayHints.includeInlayPropertyDeclarationTypeHints" lsp-javascript-display-property-declaration-type-hints t)
    732    ("typescript.inlayHints.includeInlayVariableTypeHints" lsp-javascript-display-variable-type-hints t)
    733    ("javascript.inlayHints.includeInlayEnumMemberValueHints" lsp-javascript-display-enum-member-value-hints t)
    734    ("javascript.inlayHints.includeInlayFunctionLikeReturnTypeHints" lsp-javascript-display-return-type-hints t)
    735    ("javascript.inlayHints.includeInlayFunctionParameterTypeHints" lsp-javascript-display-parameter-type-hints t)
    736    ("javascript.inlayHints.includeInlayParameterNameHints" lsp-javascript-display-parameter-name-hints nil)
    737    ("javascript.inlayHints.includeInlayParameterNameHintsWhenArgumentMatchesName" lsp-javascript-display-parameter-name-hints-when-argument-matches-name t)
    738    ("javascript.inlayHints.includeInlayPropertyDeclarationTypeHints" lsp-javascript-display-property-declaration-type-hints t)
    739    ("javascript.inlayHints.includeInlayVariableTypeHints" lsp-javascript-display-variable-type-hints t)
    740    ("completions.completeFunctionCalls" lsp-javascript-completions-complete-function-calls t)))
    741 
    742 (lsp-dependency 'typescript-language-server
    743                 '(:system lsp-clients-typescript-tls-path)
    744                 '(:npm :package "typescript-language-server"
    745                        :path "typescript-language-server"))
    746 
    747 (lsp-dependency 'typescript
    748                 '(:system "tsserver")
    749                 '(:npm :package "typescript"
    750                        :path "tsserver"))
    751 
    752 (defun lsp-javascript--rename (_workspace args)
    753   (let ((path (lsp--uri-to-path (lsp-get (lsp-get args :textDocument) :uri))))
    754     (if (f-exists? path)
    755         (with-current-buffer (find-file path)
    756           (goto-char (lsp--position-to-point
    757                       (lsp-get args :position))))
    758       (error "There is no file %s" path)))
    759   (call-interactively #'lsp-rename)
    760   nil)
    761 
    762 (defun lsp-javascript-rename-file ()
    763   "Rename current file and all it's references in other files."
    764   (interactive)
    765   (let* ((name (buffer-name))
    766          (old (buffer-file-name))
    767          (basename (file-name-nondirectory old)))
    768     (unless (and old (file-exists-p old))
    769       (error "Buffer '%s' is not visiting a file." name))
    770     (let ((new (read-file-name "New name: " (file-name-directory old) basename nil basename)))
    771       (when (get-file-buffer new)
    772         (error "A buffer named '%s' already exists." new))
    773       (when (file-exists-p new)
    774         (error "A file named '%s' already exists." new))
    775       (lsp--send-execute-command
    776        "_typescript.applyRenameFile"
    777        (vector (list :sourceUri (lsp--buffer-uri)
    778                      :targetUri (lsp--path-to-uri new))))
    779       (mkdir (file-name-directory new) t)
    780       (rename-file old new)
    781       (rename-buffer new)
    782       (set-visited-file-name new)
    783       (set-buffer-modified-p nil)
    784       (lsp-disconnect)
    785       (setq-local lsp-buffer-uri nil)
    786       (lsp)
    787       (lsp--info "Renamed '%s' to '%s'." name (file-name-nondirectory new)))))
    788 
    789 (defun lsp-javascript-initialized? ()
    790   (when-let ((workspace (lsp-find-workspace 'ts-ls (buffer-file-name))))
    791     (eq 'initialized (lsp--workspace-status workspace))))
    792 
    793 (defun lsp-clients-typescript-project-ts-server-path ()
    794   "Return the project local TS server path."
    795   (f-join (lsp-workspace-root) "node_modules" "typescript" "lib" "tsserver.js"))
    796 
    797 (defun lsp-clients-typescript-server-path ()
    798   "Return the TS sever path base on settings."
    799   (cond
    800    ((and lsp-clients-typescript-prefer-use-project-ts-server
    801          (f-exists? (lsp-clients-typescript-project-ts-server-path)))
    802     (lsp-clients-typescript-project-ts-server-path))
    803    (t
    804     (if (memq system-type '(cygwin windows-nt ms-dos))
    805         (f-join (f-parent (lsp-package-path 'typescript)) "node_modules" "typescript" "lib")
    806       (f-join (f-parent (f-parent (lsp-package-path 'typescript))) "lib" "node_modules" "typescript" "lib")))))
    807 
    808 (lsp-register-client
    809  (make-lsp-client :new-connection (lsp-stdio-connection (lambda ()
    810                                                           `(,(lsp-package-path 'typescript-language-server)
    811                                                             ,@lsp-clients-typescript-server-args)))
    812                   :activation-fn 'lsp-typescript-javascript-tsx-jsx-activate-p
    813                   :priority -2
    814                   :completion-in-comments? t
    815                   :initialization-options (lambda ()
    816                                             (append
    817                                              (when lsp-clients-typescript-disable-automatic-typing-acquisition
    818                                                (list :disableAutomaticTypingAcquisition lsp-clients-typescript-disable-automatic-typing-acquisition))
    819                                              (when lsp-clients-typescript-log-verbosity
    820                                                (list :logVerbosity lsp-clients-typescript-log-verbosity))
    821                                              (when lsp-clients-typescript-max-ts-server-memory
    822                                                (list :maxTsServerMemory lsp-clients-typescript-max-ts-server-memory))
    823                                              (when lsp-clients-typescript-npm-location
    824                                                (list :npmLocation lsp-clients-typescript-npm-location))
    825                                              (when lsp-clients-typescript-plugins
    826                                                (list :plugins lsp-clients-typescript-plugins))
    827                                              (when lsp-clients-typescript-preferences
    828                                                (list :preferences lsp-clients-typescript-preferences))
    829                                              `(:tsserver ( :path ,(lsp-clients-typescript-server-path)
    830                                                            ,@lsp-clients-typescript-tsserver))))
    831                   :initialized-fn (lambda (workspace)
    832                                     (with-lsp-workspace workspace
    833                                       (lsp--set-configuration
    834                                        (ht-merge (lsp-configuration-section "javascript")
    835                                                  (lsp-configuration-section "typescript")
    836                                                  (lsp-configuration-section "completions")
    837                                                  (lsp-configuration-section "diagnostics"))))
    838                                     (let ((caps (lsp--workspace-server-capabilities workspace))
    839                                           (format-enable (or lsp-javascript-format-enable lsp-typescript-format-enable)))
    840                                       (lsp:set-server-capabilities-document-formatting-provider? caps format-enable)
    841                                       (lsp:set-server-capabilities-document-range-formatting-provider? caps format-enable)))
    842                   :ignore-messages '("readFile .*? requested by TypeScript but content not available")
    843                   :server-id 'ts-ls
    844                   :request-handlers (ht ("_typescript.rename" #'lsp-javascript--rename))
    845                   :download-server-fn (lambda (_client callback error-callback _update?)
    846                                         (lsp-package-ensure
    847                                          'typescript
    848                                          (-partial #'lsp-package-ensure
    849                                                    'typescript-language-server
    850                                                    callback
    851                                                    error-callback)
    852                                          error-callback))))
    853 
    854 
    855 (defgroup lsp-flow nil
    856   "LSP support for the Flow Javascript type checker."
    857   :group 'lsp-mode
    858   :link '(url-link "https://flow.org"))
    859 
    860 (defcustom lsp-clients-flow-server "flow"
    861   "The Flow executable to use.
    862 Leave as just the executable name to use the default behavior of
    863 finding the executable with variable `exec-path'."
    864   :group 'lsp-flow
    865   :risky t
    866   :type 'file)
    867 
    868 (defcustom lsp-clients-flow-server-args '("lsp")
    869   "Extra arguments for starting the Flow language server."
    870   :group 'lsp-flow
    871   :risky t
    872   :type '(repeat string))
    873 
    874 (defun lsp-clients-flow-tag-file-present-p (file-name)
    875   "Check if the '// @flow' or `/* @flow */' tag is present in
    876 the contents of FILE-NAME."
    877   (if-let ((buffer (find-buffer-visiting file-name)))
    878       (with-current-buffer buffer
    879         (lsp-clients-flow-tag-string-present-p))
    880     (with-temp-buffer
    881       (insert-file-contents file-name)
    882       (lsp-clients-flow-tag-string-present-p))))
    883 
    884 (defun lsp-clients-flow-tag-string-present-p ()
    885   "Helper for `lsp-clients-flow-tag-file-present-p' that works
    886 with the file contents."
    887   (save-excursion
    888     (goto-char (point-min))
    889     (let (stop found)
    890       (while (not stop)
    891         (unless (re-search-forward "[^\n[:space:]]" nil t)
    892           (setq stop t))
    893         (if (= (point) (point-min)) (setq stop t) (backward-char))
    894         (cond ((or (looking-at-p "//+[ ]*@flow")
    895                    (looking-at-p "/\\**[ ]*@flow")
    896                    (looking-at-p "[ ]*\\*[ ]*@flow"))
    897                (setq found t) (setq stop t))
    898               ((or (looking-at-p "//") (looking-at-p "*"))
    899                (forward-line))
    900               ((looking-at-p "/\\*")
    901                (save-excursion
    902                  (unless (re-search-forward "*/" nil t) (setq stop t)))
    903                (forward-line))
    904               (t (setq stop t))))
    905       found)))
    906 
    907 (defun lsp-clients-flow-project-p (file-name)
    908   "Check if FILE-NAME is part of a Flow project, that is, if
    909 there is a .flowconfig file in the folder hierarchy."
    910   (locate-dominating-file file-name ".flowconfig"))
    911 
    912 (defun lsp-clients-flow-activate-p (file-name _mode)
    913   "Check if the Flow language server should be enabled for a
    914 particular FILE-NAME and MODE."
    915   (and (derived-mode-p 'js-mode 'web-mode 'js2-mode 'flow-js2-mode 'rjsx-mode)
    916        (not (derived-mode-p 'json-mode))
    917        (or (lsp-clients-flow-project-p file-name)
    918            (lsp-clients-flow-tag-file-present-p file-name))))
    919 
    920 (lsp-register-client
    921  (make-lsp-client :new-connection
    922                   (lsp-stdio-connection (lambda ()
    923                                           (cons lsp-clients-flow-server
    924                                                 lsp-clients-flow-server-args)))
    925                   :priority -1
    926                   :activation-fn 'lsp-clients-flow-activate-p
    927                   :server-id 'flow-ls))
    928 
    929 (defgroup lsp-deno nil
    930   "LSP support for the Deno language server."
    931   :group 'lsp-mode
    932   :link '(url-link "https://deno.land/"))
    933 
    934 (defcustom lsp-clients-deno-server "deno"
    935   "The Deno executable to use.
    936 Leave as just the executable name to use the default behavior of
    937 finding the executable with variable `exec-path'."
    938   :group 'lsp-deno
    939   :risky t
    940   :type 'file
    941   :package-version '(lsp-mode . "8.0.0"))
    942 
    943 (defcustom lsp-clients-deno-server-args '("lsp")
    944   "Extra arguments for starting the Deno language server."
    945   :group 'lsp-deno
    946   :risky t
    947   :type '(repeat string)
    948   :package-version '(lsp-mode . "8.0.0"))
    949 
    950 (defcustom lsp-clients-deno-enable-lint t
    951   "Controls if linting information will be provided by the Deno Language Server."
    952   :group 'lsp-deno
    953   :risky t
    954   :type 'boolean
    955   :package-version '(lsp-mode . "8.0.0"))
    956 
    957 (defcustom lsp-clients-deno-enable-code-lens-references t
    958   "Enables or disables the display of code lens information."
    959   :group 'lsp-deno
    960   :risky t
    961   :type 'boolean
    962   :package-version '(lsp-mode . "8.0.0"))
    963 
    964 (defcustom lsp-clients-deno-enable-code-lens-references-all-functions t
    965   "Enables or disables the display of code lens information for all functions.
    966 Setting this variable to `non-nil' implicitly enables
    967 `lsp-clients-deno-enable-code-lens-references'."
    968   :group 'lsp-deno
    969   :risky t
    970   :type 'boolean
    971   :package-version '(lsp-mode . "8.0.0"))
    972 
    973 (defcustom lsp-clients-deno-enable-code-lens-implementations t
    974   "Enables or disables the display of code lens information for implementations."
    975   :group 'lsp-deno
    976   :risky t
    977   :type 'boolean
    978   :package-version '(lsp-mode . "8.0.0"))
    979 
    980 (defcustom lsp-clients-deno-config nil
    981   "The file path to a tsconfig.json file.
    982 The path can be either be relative to the workspace, or an
    983 absolute path.
    984 
    985 Examples: `./tsconfig.json',
    986 `/path/to/tsconfig.json', `C:\\path\\to\\tsconfig.json'"
    987   :group 'lsp-deno
    988   :risky t
    989   :type 'file
    990   :package-version '(lsp-mode . "8.0.0"))
    991 
    992 (defcustom lsp-clients-deno-import-map nil
    993   "The file path to an import map.
    994 Import maps provide a way to relocate modules based on their
    995 specifiers.  The path can either be relative to the workspace, or
    996 an absolute path.
    997 
    998 Examples: `./import-map.json',
    999 `/path/to/import-map.json', `C:\\path\\to\\import-map.json'."
   1000   :group 'lsp-deno
   1001   :risky t
   1002   :type 'file
   1003   :package-version '(lsp-mode . "8.0.0"))
   1004 
   1005 (defcustom lsp-clients-deno-enable-unstable nil
   1006   "Controls if code will be type checked with Deno's unstable APIs."
   1007   :group 'lsp-deno
   1008   :risky t
   1009   :type 'boolean
   1010   :package-version '(lsp-mode . "8.0.0"))
   1011 
   1012 (defun lsp-clients-deno--make-init-options ()
   1013   "Initialization options for the Deno language server."
   1014   `( :enable t
   1015      :config ,lsp-clients-deno-config
   1016      :importMap ,lsp-clients-deno-import-map
   1017      :lint ,(lsp-json-bool lsp-clients-deno-enable-lint)
   1018      :unstable ,(lsp-json-bool lsp-clients-deno-enable-unstable)
   1019      :codeLens ( :implementations ,(lsp-json-bool lsp-clients-deno-enable-code-lens-implementations)
   1020                  :references ,(lsp-json-bool (or lsp-clients-deno-enable-code-lens-references
   1021                                                  lsp-clients-deno-enable-code-lens-references-all-functions))
   1022                  :referencesAllFunctions ,(lsp-json-bool lsp-clients-deno-enable-code-lens-references-all-functions))))
   1023 
   1024 (lsp-register-client
   1025  (make-lsp-client :new-connection
   1026                   (lsp-stdio-connection (lambda ()
   1027                                           (cons lsp-clients-deno-server
   1028                                                 lsp-clients-deno-server-args)))
   1029                   :initialization-options #'lsp-clients-deno--make-init-options
   1030                   :priority -5
   1031                   :activation-fn #'lsp-typescript-javascript-tsx-jsx-activate-p
   1032                   :server-id 'deno-ls))
   1033 
   1034 (lsp-consistency-check lsp-javascript)
   1035 
   1036 (provide 'lsp-javascript)
   1037 ;;; lsp-javascript.el ends here