css-variable-lsp 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/README.md +5 -9
  2. package/package.json +5 -2
  3. package/server/out/cascadeAndInline.test.js +67 -0
  4. package/server/out/cascadeAndInline.test.js.map +1 -0
  5. package/server/out/cssVariableManager.js +390 -0
  6. package/server/out/cssVariableManager.js.map +1 -0
  7. package/server/out/domTree.js +115 -0
  8. package/server/out/domTree.js.map +1 -0
  9. package/server/out/domTree.test.js +77 -0
  10. package/server/out/domTree.test.js.map +1 -0
  11. package/server/out/fileLifecycle.test.js +163 -0
  12. package/server/out/fileLifecycle.test.js.map +1 -0
  13. package/server/out/fileTypesAndUpdates.test.js +78 -0
  14. package/server/out/fileTypesAndUpdates.test.js.map +1 -0
  15. package/server/out/htmlComments.test.js +180 -0
  16. package/server/out/htmlComments.test.js.map +1 -0
  17. package/server/out/server/src/server.js +1 -0
  18. package/server/out/server/src/server.js.map +1 -1
  19. package/server/out/server.js +458 -0
  20. package/server/out/server.js.map +1 -0
  21. package/server/out/specificity.js +138 -0
  22. package/server/out/specificity.js.map +1 -0
  23. package/server/out/specificity.test.js +66 -0
  24. package/server/out/specificity.test.js.map +1 -0
  25. package/server/out/test.js +112 -0
  26. package/server/out/test.js.map +1 -0
  27. package/server/out/tsconfig.tsbuildinfo +1 -1
  28. package/server/src/server.ts +2 -0
  29. package/server/tsconfig.tsbuildinfo +1 -0
  30. package/client/node_modules/.package-lock.json +0 -110
  31. package/client/node_modules/@types/node/LICENSE +0 -21
  32. package/client/node_modules/@types/node/README.md +0 -15
  33. package/client/node_modules/@types/node/assert/strict.d.ts +0 -8
  34. package/client/node_modules/@types/node/assert.d.ts +0 -1005
  35. package/client/node_modules/@types/node/async_hooks.d.ts +0 -586
  36. package/client/node_modules/@types/node/buffer.buffer.d.ts +0 -457
  37. package/client/node_modules/@types/node/buffer.d.ts +0 -1901
  38. package/client/node_modules/@types/node/child_process.d.ts +0 -1453
  39. package/client/node_modules/@types/node/cluster.d.ts +0 -578
  40. package/client/node_modules/@types/node/compatibility/disposable.d.ts +0 -14
  41. package/client/node_modules/@types/node/compatibility/index.d.ts +0 -9
  42. package/client/node_modules/@types/node/compatibility/indexable.d.ts +0 -20
  43. package/client/node_modules/@types/node/compatibility/iterators.d.ts +0 -20
  44. package/client/node_modules/@types/node/console.d.ts +0 -452
  45. package/client/node_modules/@types/node/constants.d.ts +0 -21
  46. package/client/node_modules/@types/node/crypto.d.ts +0 -4504
  47. package/client/node_modules/@types/node/dgram.d.ts +0 -596
  48. package/client/node_modules/@types/node/diagnostics_channel.d.ts +0 -551
  49. package/client/node_modules/@types/node/dns/promises.d.ts +0 -477
  50. package/client/node_modules/@types/node/dns.d.ts +0 -860
  51. package/client/node_modules/@types/node/domain.d.ts +0 -170
  52. package/client/node_modules/@types/node/events.d.ts +0 -863
  53. package/client/node_modules/@types/node/fs/promises.d.ts +0 -1208
  54. package/client/node_modules/@types/node/fs.d.ts +0 -4332
  55. package/client/node_modules/@types/node/globals.d.ts +0 -170
  56. package/client/node_modules/@types/node/globals.typedarray.d.ts +0 -21
  57. package/client/node_modules/@types/node/http.d.ts +0 -1919
  58. package/client/node_modules/@types/node/http2.d.ts +0 -2580
  59. package/client/node_modules/@types/node/https.d.ts +0 -549
  60. package/client/node_modules/@types/node/index.d.ts +0 -92
  61. package/client/node_modules/@types/node/inspector.generated.d.ts +0 -2775
  62. package/client/node_modules/@types/node/module.d.ts +0 -503
  63. package/client/node_modules/@types/node/net.d.ts +0 -924
  64. package/client/node_modules/@types/node/os.d.ts +0 -480
  65. package/client/node_modules/@types/node/package.json +0 -145
  66. package/client/node_modules/@types/node/path.d.ts +0 -191
  67. package/client/node_modules/@types/node/perf_hooks.d.ts +0 -860
  68. package/client/node_modules/@types/node/process.d.ts +0 -1632
  69. package/client/node_modules/@types/node/punycode.d.ts +0 -117
  70. package/client/node_modules/@types/node/querystring.d.ts +0 -140
  71. package/client/node_modules/@types/node/readline/promises.d.ts +0 -154
  72. package/client/node_modules/@types/node/readline.d.ts +0 -715
  73. package/client/node_modules/@types/node/repl.d.ts +0 -430
  74. package/client/node_modules/@types/node/stream/consumers.d.ts +0 -38
  75. package/client/node_modules/@types/node/stream/promises.d.ts +0 -90
  76. package/client/node_modules/@types/node/stream/web.d.ts +0 -527
  77. package/client/node_modules/@types/node/stream.d.ts +0 -1680
  78. package/client/node_modules/@types/node/string_decoder.d.ts +0 -67
  79. package/client/node_modules/@types/node/test.d.ts +0 -1208
  80. package/client/node_modules/@types/node/timers/promises.d.ts +0 -108
  81. package/client/node_modules/@types/node/timers.d.ts +0 -286
  82. package/client/node_modules/@types/node/tls.d.ts +0 -1204
  83. package/client/node_modules/@types/node/trace_events.d.ts +0 -171
  84. package/client/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -455
  85. package/client/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -19
  86. package/client/node_modules/@types/node/ts5.6/index.d.ts +0 -92
  87. package/client/node_modules/@types/node/tty.d.ts +0 -206
  88. package/client/node_modules/@types/node/url.d.ts +0 -957
  89. package/client/node_modules/@types/node/util.d.ts +0 -2083
  90. package/client/node_modules/@types/node/v8.d.ts +0 -753
  91. package/client/node_modules/@types/node/vm.d.ts +0 -704
  92. package/client/node_modules/@types/node/wasi.d.ts +0 -160
  93. package/client/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -34
  94. package/client/node_modules/@types/node/web-globals/domexception.d.ts +0 -68
  95. package/client/node_modules/@types/node/web-globals/events.d.ts +0 -81
  96. package/client/node_modules/@types/node/web-globals/fetch.d.ts +0 -38
  97. package/client/node_modules/@types/node/worker_threads.d.ts +0 -698
  98. package/client/node_modules/@types/node/zlib.d.ts +0 -517
  99. package/client/node_modules/@types/vscode/LICENSE +0 -21
  100. package/client/node_modules/@types/vscode/README.md +0 -15
  101. package/client/node_modules/@types/vscode/index.d.ts +0 -21145
  102. package/client/node_modules/@types/vscode/package.json +0 -26
  103. package/client/node_modules/balanced-match/.github/FUNDING.yml +0 -2
  104. package/client/node_modules/balanced-match/LICENSE.md +0 -21
  105. package/client/node_modules/balanced-match/README.md +0 -97
  106. package/client/node_modules/balanced-match/index.js +0 -62
  107. package/client/node_modules/balanced-match/package.json +0 -48
  108. package/client/node_modules/brace-expansion/.github/FUNDING.yml +0 -2
  109. package/client/node_modules/brace-expansion/LICENSE +0 -21
  110. package/client/node_modules/brace-expansion/README.md +0 -135
  111. package/client/node_modules/brace-expansion/index.js +0 -203
  112. package/client/node_modules/brace-expansion/package.json +0 -49
  113. package/client/node_modules/minimatch/LICENSE +0 -15
  114. package/client/node_modules/minimatch/README.md +0 -259
  115. package/client/node_modules/minimatch/lib/path.js +0 -4
  116. package/client/node_modules/minimatch/minimatch.js +0 -944
  117. package/client/node_modules/minimatch/package.json +0 -35
  118. package/client/node_modules/semver/LICENSE +0 -15
  119. package/client/node_modules/semver/README.md +0 -664
  120. package/client/node_modules/semver/bin/semver.js +0 -191
  121. package/client/node_modules/semver/classes/comparator.js +0 -143
  122. package/client/node_modules/semver/classes/index.js +0 -7
  123. package/client/node_modules/semver/classes/range.js +0 -557
  124. package/client/node_modules/semver/classes/semver.js +0 -333
  125. package/client/node_modules/semver/functions/clean.js +0 -8
  126. package/client/node_modules/semver/functions/cmp.js +0 -54
  127. package/client/node_modules/semver/functions/coerce.js +0 -62
  128. package/client/node_modules/semver/functions/compare-build.js +0 -9
  129. package/client/node_modules/semver/functions/compare-loose.js +0 -5
  130. package/client/node_modules/semver/functions/compare.js +0 -7
  131. package/client/node_modules/semver/functions/diff.js +0 -60
  132. package/client/node_modules/semver/functions/eq.js +0 -5
  133. package/client/node_modules/semver/functions/gt.js +0 -5
  134. package/client/node_modules/semver/functions/gte.js +0 -5
  135. package/client/node_modules/semver/functions/inc.js +0 -21
  136. package/client/node_modules/semver/functions/lt.js +0 -5
  137. package/client/node_modules/semver/functions/lte.js +0 -5
  138. package/client/node_modules/semver/functions/major.js +0 -5
  139. package/client/node_modules/semver/functions/minor.js +0 -5
  140. package/client/node_modules/semver/functions/neq.js +0 -5
  141. package/client/node_modules/semver/functions/parse.js +0 -18
  142. package/client/node_modules/semver/functions/patch.js +0 -5
  143. package/client/node_modules/semver/functions/prerelease.js +0 -8
  144. package/client/node_modules/semver/functions/rcompare.js +0 -5
  145. package/client/node_modules/semver/functions/rsort.js +0 -5
  146. package/client/node_modules/semver/functions/satisfies.js +0 -12
  147. package/client/node_modules/semver/functions/sort.js +0 -5
  148. package/client/node_modules/semver/functions/valid.js +0 -8
  149. package/client/node_modules/semver/index.js +0 -91
  150. package/client/node_modules/semver/internal/constants.js +0 -37
  151. package/client/node_modules/semver/internal/debug.js +0 -11
  152. package/client/node_modules/semver/internal/identifiers.js +0 -29
  153. package/client/node_modules/semver/internal/lrucache.js +0 -42
  154. package/client/node_modules/semver/internal/parse-options.js +0 -17
  155. package/client/node_modules/semver/internal/re.js +0 -223
  156. package/client/node_modules/semver/package.json +0 -78
  157. package/client/node_modules/semver/preload.js +0 -4
  158. package/client/node_modules/semver/range.bnf +0 -16
  159. package/client/node_modules/semver/ranges/gtr.js +0 -6
  160. package/client/node_modules/semver/ranges/intersects.js +0 -9
  161. package/client/node_modules/semver/ranges/ltr.js +0 -6
  162. package/client/node_modules/semver/ranges/max-satisfying.js +0 -27
  163. package/client/node_modules/semver/ranges/min-satisfying.js +0 -26
  164. package/client/node_modules/semver/ranges/min-version.js +0 -63
  165. package/client/node_modules/semver/ranges/outside.js +0 -82
  166. package/client/node_modules/semver/ranges/simplify.js +0 -49
  167. package/client/node_modules/semver/ranges/subset.js +0 -249
  168. package/client/node_modules/semver/ranges/to-comparators.js +0 -10
  169. package/client/node_modules/semver/ranges/valid.js +0 -13
  170. package/client/node_modules/undici-types/README.md +0 -6
  171. package/client/node_modules/undici-types/agent.d.ts +0 -31
  172. package/client/node_modules/undici-types/api.d.ts +0 -43
  173. package/client/node_modules/undici-types/balanced-pool.d.ts +0 -18
  174. package/client/node_modules/undici-types/cache.d.ts +0 -36
  175. package/client/node_modules/undici-types/client.d.ts +0 -97
  176. package/client/node_modules/undici-types/connector.d.ts +0 -34
  177. package/client/node_modules/undici-types/content-type.d.ts +0 -21
  178. package/client/node_modules/undici-types/cookies.d.ts +0 -28
  179. package/client/node_modules/undici-types/diagnostics-channel.d.ts +0 -67
  180. package/client/node_modules/undici-types/dispatcher.d.ts +0 -241
  181. package/client/node_modules/undici-types/errors.d.ts +0 -128
  182. package/client/node_modules/undici-types/fetch.d.ts +0 -209
  183. package/client/node_modules/undici-types/file.d.ts +0 -39
  184. package/client/node_modules/undici-types/filereader.d.ts +0 -54
  185. package/client/node_modules/undici-types/formdata.d.ts +0 -108
  186. package/client/node_modules/undici-types/global-dispatcher.d.ts +0 -9
  187. package/client/node_modules/undici-types/global-origin.d.ts +0 -7
  188. package/client/node_modules/undici-types/handlers.d.ts +0 -9
  189. package/client/node_modules/undici-types/header.d.ts +0 -4
  190. package/client/node_modules/undici-types/index.d.ts +0 -63
  191. package/client/node_modules/undici-types/interceptors.d.ts +0 -5
  192. package/client/node_modules/undici-types/mock-agent.d.ts +0 -50
  193. package/client/node_modules/undici-types/mock-client.d.ts +0 -25
  194. package/client/node_modules/undici-types/mock-errors.d.ts +0 -12
  195. package/client/node_modules/undici-types/mock-interceptor.d.ts +0 -93
  196. package/client/node_modules/undici-types/mock-pool.d.ts +0 -25
  197. package/client/node_modules/undici-types/package.json +0 -55
  198. package/client/node_modules/undici-types/patch.d.ts +0 -71
  199. package/client/node_modules/undici-types/pool-stats.d.ts +0 -19
  200. package/client/node_modules/undici-types/pool.d.ts +0 -28
  201. package/client/node_modules/undici-types/proxy-agent.d.ts +0 -30
  202. package/client/node_modules/undici-types/readable.d.ts +0 -61
  203. package/client/node_modules/undici-types/webidl.d.ts +0 -220
  204. package/client/node_modules/undici-types/websocket.d.ts +0 -131
  205. package/client/node_modules/vscode-jsonrpc/License.txt +0 -11
  206. package/client/node_modules/vscode-jsonrpc/README.md +0 -69
  207. package/client/node_modules/vscode-jsonrpc/browser.d.ts +0 -6
  208. package/client/node_modules/vscode-jsonrpc/browser.js +0 -7
  209. package/client/node_modules/vscode-jsonrpc/lib/browser/main.d.ts +0 -17
  210. package/client/node_modules/vscode-jsonrpc/lib/browser/main.js +0 -76
  211. package/client/node_modules/vscode-jsonrpc/lib/browser/ril.d.ts +0 -12
  212. package/client/node_modules/vscode-jsonrpc/lib/browser/ril.js +0 -156
  213. package/client/node_modules/vscode-jsonrpc/lib/common/api.d.ts +0 -14
  214. package/client/node_modules/vscode-jsonrpc/lib/common/api.js +0 -81
  215. package/client/node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts +0 -32
  216. package/client/node_modules/vscode-jsonrpc/lib/common/cancellation.js +0 -96
  217. package/client/node_modules/vscode-jsonrpc/lib/common/connection.d.ts +0 -358
  218. package/client/node_modules/vscode-jsonrpc/lib/common/connection.js +0 -1212
  219. package/client/node_modules/vscode-jsonrpc/lib/common/disposable.d.ts +0 -9
  220. package/client/node_modules/vscode-jsonrpc/lib/common/disposable.js +0 -16
  221. package/client/node_modules/vscode-jsonrpc/lib/common/encoding.d.ts +0 -52
  222. package/client/node_modules/vscode-jsonrpc/lib/common/encoding.js +0 -70
  223. package/client/node_modules/vscode-jsonrpc/lib/common/events.d.ts +0 -39
  224. package/client/node_modules/vscode-jsonrpc/lib/common/events.js +0 -128
  225. package/client/node_modules/vscode-jsonrpc/lib/common/is.d.ts +0 -7
  226. package/client/node_modules/vscode-jsonrpc/lib/common/is.js +0 -35
  227. package/client/node_modules/vscode-jsonrpc/lib/common/linkedMap.d.ts +0 -53
  228. package/client/node_modules/vscode-jsonrpc/lib/common/linkedMap.js +0 -398
  229. package/client/node_modules/vscode-jsonrpc/lib/common/messageBuffer.d.ts +0 -18
  230. package/client/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js +0 -152
  231. package/client/node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts +0 -77
  232. package/client/node_modules/vscode-jsonrpc/lib/common/messageReader.js +0 -197
  233. package/client/node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts +0 -60
  234. package/client/node_modules/vscode-jsonrpc/lib/common/messageWriter.js +0 -115
  235. package/client/node_modules/vscode-jsonrpc/lib/common/messages.d.ts +0 -369
  236. package/client/node_modules/vscode-jsonrpc/lib/common/messages.js +0 -306
  237. package/client/node_modules/vscode-jsonrpc/lib/common/ral.d.ts +0 -74
  238. package/client/node_modules/vscode-jsonrpc/lib/common/ral.js +0 -23
  239. package/client/node_modules/vscode-jsonrpc/lib/common/semaphore.d.ts +0 -10
  240. package/client/node_modules/vscode-jsonrpc/lib/common/semaphore.js +0 -68
  241. package/client/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.d.ts +0 -15
  242. package/client/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js +0 -76
  243. package/client/node_modules/vscode-jsonrpc/lib/node/main.d.ts +0 -63
  244. package/client/node_modules/vscode-jsonrpc/lib/node/main.js +0 -257
  245. package/client/node_modules/vscode-jsonrpc/lib/node/ril.d.ts +0 -13
  246. package/client/node_modules/vscode-jsonrpc/lib/node/ril.js +0 -161
  247. package/client/node_modules/vscode-jsonrpc/node.cmd +0 -5
  248. package/client/node_modules/vscode-jsonrpc/node.d.ts +0 -6
  249. package/client/node_modules/vscode-jsonrpc/node.js +0 -7
  250. package/client/node_modules/vscode-jsonrpc/package.json +0 -45
  251. package/client/node_modules/vscode-jsonrpc/thirdpartynotices.txt +0 -16
  252. package/client/node_modules/vscode-jsonrpc/typings/thenable.d.ts +0 -5
  253. package/client/node_modules/vscode-languageclient/License.txt +0 -11
  254. package/client/node_modules/vscode-languageclient/README.md +0 -17
  255. package/client/node_modules/vscode-languageclient/browser.d.ts +0 -6
  256. package/client/node_modules/vscode-languageclient/browser.js +0 -7
  257. package/client/node_modules/vscode-languageclient/lib/browser/main.d.ts +0 -8
  258. package/client/node_modules/vscode-languageclient/lib/browser/main.js +0 -37
  259. package/client/node_modules/vscode-languageclient/lib/common/api.d.ts +0 -36
  260. package/client/node_modules/vscode-languageclient/lib/common/api.js +0 -27
  261. package/client/node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts +0 -37
  262. package/client/node_modules/vscode-languageclient/lib/common/callHierarchy.js +0 -97
  263. package/client/node_modules/vscode-languageclient/lib/common/client.d.ts +0 -476
  264. package/client/node_modules/vscode-languageclient/lib/common/client.js +0 -1600
  265. package/client/node_modules/vscode-languageclient/lib/common/codeAction.d.ts +0 -19
  266. package/client/node_modules/vscode-languageclient/lib/common/codeAction.js +0 -99
  267. package/client/node_modules/vscode-languageclient/lib/common/codeConverter.d.ts +0 -78
  268. package/client/node_modules/vscode-languageclient/lib/common/codeConverter.js +0 -876
  269. package/client/node_modules/vscode-languageclient/lib/common/codeLens.d.ts +0 -23
  270. package/client/node_modules/vscode-languageclient/lib/common/codeLens.js +0 -78
  271. package/client/node_modules/vscode-languageclient/lib/common/colorProvider.d.ts +0 -25
  272. package/client/node_modules/vscode-languageclient/lib/common/colorProvider.js +0 -74
  273. package/client/node_modules/vscode-languageclient/lib/common/completion.d.ts +0 -20
  274. package/client/node_modules/vscode-languageclient/lib/common/completion.js +0 -126
  275. package/client/node_modules/vscode-languageclient/lib/common/configuration.d.ts +0 -69
  276. package/client/node_modules/vscode-languageclient/lib/common/configuration.js +0 -209
  277. package/client/node_modules/vscode-languageclient/lib/common/declaration.d.ts +0 -16
  278. package/client/node_modules/vscode-languageclient/lib/common/declaration.js +0 -54
  279. package/client/node_modules/vscode-languageclient/lib/common/definition.d.ts +0 -16
  280. package/client/node_modules/vscode-languageclient/lib/common/definition.js +0 -55
  281. package/client/node_modules/vscode-languageclient/lib/common/diagnostic.d.ts +0 -122
  282. package/client/node_modules/vscode-languageclient/lib/common/diagnostic.js +0 -814
  283. package/client/node_modules/vscode-languageclient/lib/common/documentHighlight.d.ts +0 -15
  284. package/client/node_modules/vscode-languageclient/lib/common/documentHighlight.js +0 -50
  285. package/client/node_modules/vscode-languageclient/lib/common/documentLink.d.ts +0 -19
  286. package/client/node_modules/vscode-languageclient/lib/common/documentLink.js +0 -71
  287. package/client/node_modules/vscode-languageclient/lib/common/documentSymbol.d.ts +0 -17
  288. package/client/node_modules/vscode-languageclient/lib/common/documentSymbol.js +0 -104
  289. package/client/node_modules/vscode-languageclient/lib/common/executeCommand.d.ts +0 -21
  290. package/client/node_modules/vscode-languageclient/lib/common/executeCommand.js +0 -72
  291. package/client/node_modules/vscode-languageclient/lib/common/features.d.ts +0 -418
  292. package/client/node_modules/vscode-languageclient/lib/common/features.js +0 -291
  293. package/client/node_modules/vscode-languageclient/lib/common/fileOperations.d.ts +0 -116
  294. package/client/node_modules/vscode-languageclient/lib/common/fileOperations.js +0 -333
  295. package/client/node_modules/vscode-languageclient/lib/common/fileSystemWatcher.d.ts +0 -18
  296. package/client/node_modules/vscode-languageclient/lib/common/fileSystemWatcher.js +0 -95
  297. package/client/node_modules/vscode-languageclient/lib/common/foldingRange.d.ts +0 -19
  298. package/client/node_modules/vscode-languageclient/lib/common/foldingRange.js +0 -65
  299. package/client/node_modules/vscode-languageclient/lib/common/formatting.d.ts +0 -39
  300. package/client/node_modules/vscode-languageclient/lib/common/formatting.js +0 -182
  301. package/client/node_modules/vscode-languageclient/lib/common/hover.d.ts +0 -16
  302. package/client/node_modules/vscode-languageclient/lib/common/hover.js +0 -58
  303. package/client/node_modules/vscode-languageclient/lib/common/implementation.d.ts +0 -16
  304. package/client/node_modules/vscode-languageclient/lib/common/implementation.js +0 -54
  305. package/client/node_modules/vscode-languageclient/lib/common/inlayHint.d.ts +0 -20
  306. package/client/node_modules/vscode-languageclient/lib/common/inlayHint.js +0 -92
  307. package/client/node_modules/vscode-languageclient/lib/common/inlineCompletion.d.ts +0 -18
  308. package/client/node_modules/vscode-languageclient/lib/common/inlineCompletion.js +0 -54
  309. package/client/node_modules/vscode-languageclient/lib/common/inlineValue.d.ts +0 -18
  310. package/client/node_modules/vscode-languageclient/lib/common/inlineValue.js +0 -65
  311. package/client/node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts +0 -21
  312. package/client/node_modules/vscode-languageclient/lib/common/linkedEditingRange.js +0 -53
  313. package/client/node_modules/vscode-languageclient/lib/common/notebook.d.ts +0 -96
  314. package/client/node_modules/vscode-languageclient/lib/common/notebook.js +0 -851
  315. package/client/node_modules/vscode-languageclient/lib/common/progress.d.ts +0 -11
  316. package/client/node_modules/vscode-languageclient/lib/common/progress.js +0 -44
  317. package/client/node_modules/vscode-languageclient/lib/common/progressPart.d.ts +0 -24
  318. package/client/node_modules/vscode-languageclient/lib/common/progressPart.js +0 -96
  319. package/client/node_modules/vscode-languageclient/lib/common/protocolCallHierarchyItem.d.ts +0 -6
  320. package/client/node_modules/vscode-languageclient/lib/common/protocolCallHierarchyItem.js +0 -16
  321. package/client/node_modules/vscode-languageclient/lib/common/protocolCodeAction.d.ts +0 -6
  322. package/client/node_modules/vscode-languageclient/lib/common/protocolCodeAction.js +0 -14
  323. package/client/node_modules/vscode-languageclient/lib/common/protocolCodeLens.d.ts +0 -5
  324. package/client/node_modules/vscode-languageclient/lib/common/protocolCodeLens.js +0 -13
  325. package/client/node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts +0 -11
  326. package/client/node_modules/vscode-languageclient/lib/common/protocolCompletionItem.js +0 -13
  327. package/client/node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts +0 -167
  328. package/client/node_modules/vscode-languageclient/lib/common/protocolConverter.js +0 -1134
  329. package/client/node_modules/vscode-languageclient/lib/common/protocolDiagnostic.d.ts +0 -18
  330. package/client/node_modules/vscode-languageclient/lib/common/protocolDiagnostic.js +0 -25
  331. package/client/node_modules/vscode-languageclient/lib/common/protocolDocumentLink.d.ts +0 -5
  332. package/client/node_modules/vscode-languageclient/lib/common/protocolDocumentLink.js +0 -13
  333. package/client/node_modules/vscode-languageclient/lib/common/protocolInlayHint.d.ts +0 -5
  334. package/client/node_modules/vscode-languageclient/lib/common/protocolInlayHint.js +0 -13
  335. package/client/node_modules/vscode-languageclient/lib/common/protocolTypeHierarchyItem.d.ts +0 -6
  336. package/client/node_modules/vscode-languageclient/lib/common/protocolTypeHierarchyItem.js +0 -16
  337. package/client/node_modules/vscode-languageclient/lib/common/protocolWorkspaceSymbol.d.ts +0 -7
  338. package/client/node_modules/vscode-languageclient/lib/common/protocolWorkspaceSymbol.js +0 -18
  339. package/client/node_modules/vscode-languageclient/lib/common/reference.d.ts +0 -20
  340. package/client/node_modules/vscode-languageclient/lib/common/reference.js +0 -53
  341. package/client/node_modules/vscode-languageclient/lib/common/rename.d.ts +0 -27
  342. package/client/node_modules/vscode-languageclient/lib/common/rename.js +0 -113
  343. package/client/node_modules/vscode-languageclient/lib/common/selectionRange.d.ts +0 -16
  344. package/client/node_modules/vscode-languageclient/lib/common/selectionRange.js +0 -57
  345. package/client/node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts +0 -33
  346. package/client/node_modules/vscode-languageclient/lib/common/semanticTokens.js +0 -179
  347. package/client/node_modules/vscode-languageclient/lib/common/signatureHelp.d.ts +0 -16
  348. package/client/node_modules/vscode-languageclient/lib/common/signatureHelp.js +0 -71
  349. package/client/node_modules/vscode-languageclient/lib/common/textSynchronization.d.ts +0 -101
  350. package/client/node_modules/vscode-languageclient/lib/common/textSynchronization.js +0 -402
  351. package/client/node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts +0 -16
  352. package/client/node_modules/vscode-languageclient/lib/common/typeDefinition.js +0 -55
  353. package/client/node_modules/vscode-languageclient/lib/common/typeHierarchy.d.ts +0 -31
  354. package/client/node_modules/vscode-languageclient/lib/common/typeHierarchy.js +0 -96
  355. package/client/node_modules/vscode-languageclient/lib/common/utils/async.d.ts +0 -41
  356. package/client/node_modules/vscode-languageclient/lib/common/utils/async.js +0 -276
  357. package/client/node_modules/vscode-languageclient/lib/common/utils/is.d.ts +0 -12
  358. package/client/node_modules/vscode-languageclient/lib/common/utils/is.js +0 -57
  359. package/client/node_modules/vscode-languageclient/lib/common/utils/uuid.d.ts +0 -22
  360. package/client/node_modules/vscode-languageclient/lib/common/utils/uuid.js +0 -97
  361. package/client/node_modules/vscode-languageclient/lib/common/workspaceFolder.d.ts +0 -30
  362. package/client/node_modules/vscode-languageclient/lib/common/workspaceFolder.js +0 -148
  363. package/client/node_modules/vscode-languageclient/lib/common/workspaceSymbol.d.ts +0 -19
  364. package/client/node_modules/vscode-languageclient/lib/common/workspaceSymbol.js +0 -79
  365. package/client/node_modules/vscode-languageclient/lib/node/main.d.ts +0 -100
  366. package/client/node_modules/vscode-languageclient/lib/node/main.js +0 -570
  367. package/client/node_modules/vscode-languageclient/lib/node/processes.d.ts +0 -6
  368. package/client/node_modules/vscode-languageclient/lib/node/processes.js +0 -47
  369. package/client/node_modules/vscode-languageclient/lib/node/terminateProcess.sh +0 -16
  370. package/client/node_modules/vscode-languageclient/node.cmd +0 -5
  371. package/client/node_modules/vscode-languageclient/node.d.ts +0 -6
  372. package/client/node_modules/vscode-languageclient/node.js +0 -7
  373. package/client/node_modules/vscode-languageclient/package.json +0 -50
  374. package/client/node_modules/vscode-languageserver-protocol/License.txt +0 -11
  375. package/client/node_modules/vscode-languageserver-protocol/README.md +0 -16
  376. package/client/node_modules/vscode-languageserver-protocol/browser.d.ts +0 -6
  377. package/client/node_modules/vscode-languageserver-protocol/browser.js +0 -7
  378. package/client/node_modules/vscode-languageserver-protocol/lib/browser/main.d.ts +0 -4
  379. package/client/node_modules/vscode-languageserver-protocol/lib/browser/main.js +0 -28
  380. package/client/node_modules/vscode-languageserver-protocol/lib/common/api.d.ts +0 -58
  381. package/client/node_modules/vscode-languageserver-protocol/lib/common/api.js +0 -77
  382. package/client/node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts +0 -187
  383. package/client/node_modules/vscode-languageserver-protocol/lib/common/connection.js +0 -15
  384. package/client/node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts +0 -51
  385. package/client/node_modules/vscode-languageserver-protocol/lib/common/messages.js +0 -44
  386. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.$.d.ts +0 -1
  387. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.$.js +0 -43
  388. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts +0 -86
  389. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js +0 -42
  390. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts +0 -66
  391. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js +0 -32
  392. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts +0 -35
  393. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js +0 -24
  394. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts +0 -3252
  395. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts +0 -37
  396. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js +0 -22
  397. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.d.ts +0 -341
  398. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.js +0 -74
  399. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts +0 -306
  400. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js +0 -101
  401. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts +0 -109
  402. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js +0 -30
  403. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts +0 -38
  404. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js +0 -21
  405. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.d.ts +0 -110
  406. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.js +0 -43
  407. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.d.ts +0 -57
  408. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.js +0 -22
  409. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.d.ts +0 -86
  410. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.js +0 -30
  411. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.js +0 -943
  412. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts +0 -52
  413. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js +0 -19
  414. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts +0 -106
  415. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js +0 -68
  416. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.d.ts +0 -400
  417. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.js +0 -214
  418. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts +0 -107
  419. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js +0 -37
  420. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts +0 -41
  421. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js +0 -20
  422. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts +0 -223
  423. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js +0 -57
  424. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts +0 -72
  425. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js +0 -22
  426. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts +0 -38
  427. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js +0 -21
  428. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.d.ts +0 -83
  429. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.js +0 -42
  430. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.d.ts +0 -74
  431. package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.js +0 -27
  432. package/client/node_modules/vscode-languageserver-protocol/lib/common/utils/is.d.ts +0 -9
  433. package/client/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js +0 -46
  434. package/client/node_modules/vscode-languageserver-protocol/lib/node/main.d.ts +0 -6
  435. package/client/node_modules/vscode-languageserver-protocol/lib/node/main.js +0 -28
  436. package/client/node_modules/vscode-languageserver-protocol/metaModel.schema.json +0 -783
  437. package/client/node_modules/vscode-languageserver-protocol/node.cmd +0 -5
  438. package/client/node_modules/vscode-languageserver-protocol/node.d.ts +0 -6
  439. package/client/node_modules/vscode-languageserver-protocol/node.js +0 -7
  440. package/client/node_modules/vscode-languageserver-protocol/package.json +0 -45
  441. package/client/node_modules/vscode-languageserver-protocol/thirdpartynotices.txt +0 -31
  442. package/client/node_modules/vscode-languageserver-types/License.txt +0 -11
  443. package/client/node_modules/vscode-languageserver-types/README.md +0 -17
  444. package/client/node_modules/vscode-languageserver-types/lib/esm/main.d.ts +0 -3139
  445. package/client/node_modules/vscode-languageserver-types/lib/esm/main.js +0 -2222
  446. package/client/node_modules/vscode-languageserver-types/lib/esm/package.json +0 -3
  447. package/client/node_modules/vscode-languageserver-types/lib/umd/main.d.ts +0 -3139
  448. package/client/node_modules/vscode-languageserver-types/lib/umd/main.js +0 -2272
  449. package/client/node_modules/vscode-languageserver-types/package.json +0 -38
  450. package/client/node_modules/vscode-languageserver-types/thirdpartynotices.txt +0 -16
  451. package/client/package-lock.json +0 -125
  452. package/client/package.json +0 -42
  453. package/client/src/extension.ts +0 -56
  454. package/client/tsconfig.json +0 -12
@@ -0,0 +1,458 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const node_1 = require("vscode-languageserver/node");
5
+ const fs = require("fs");
6
+ const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
7
+ const cssVariableManager_1 = require("./cssVariableManager");
8
+ const specificity_1 = require("./specificity");
9
+ // Write startup log immediately
10
+ try {
11
+ const startupMsg = `[STARTUP] ${new Date().toISOString()} CSS LSP Server starting\n`;
12
+ fs.appendFileSync('/tmp/css.log', startupMsg);
13
+ }
14
+ catch (e) {
15
+ // Ignore
16
+ }
17
+ // Create a connection for the server, using Node's IPC as a transport.
18
+ // Also include all preview / proposed LSP features.
19
+ const connection = (0, node_1.createConnection)(node_1.ProposedFeatures.all);
20
+ fs.writeFile('/tmp/css2.log', 'asdf', { encoding: 'utf-8' }, () => { });
21
+ function logDebug(label, payload) {
22
+ // eslint-disable-next-line no-console
23
+ const message = `[css-lsp] ${label} ${JSON.stringify(payload)}`;
24
+ console.error(message);
25
+ try {
26
+ fs.appendFileSync('/tmp/css.log', `[DEBUG] ${new Date().toISOString()} ${message}\n`);
27
+ }
28
+ catch (e) {
29
+ // Ignore file write errors
30
+ }
31
+ }
32
+ // Create a simple text document manager.
33
+ const documents = new node_1.TextDocuments(vscode_languageserver_textdocument_1.TextDocument);
34
+ const cssVariableManager = new cssVariableManager_1.CssVariableManager(connection.console);
35
+ let hasConfigurationCapability = false;
36
+ let hasWorkspaceFolderCapability = false;
37
+ let hasDiagnosticRelatedInformationCapability = false;
38
+ connection.onInitialize((params) => {
39
+ logDebug('initialize', {
40
+ rootUri: params.rootUri,
41
+ rootPath: params.rootPath,
42
+ workspaceFolders: params.workspaceFolders,
43
+ capabilities: params.capabilities,
44
+ });
45
+ const capabilities = params.capabilities;
46
+ // Does the client support the `workspace/configuration` request?
47
+ // If not, we fall back using global settings.
48
+ hasConfigurationCapability = !!(capabilities.workspace && !!capabilities.workspace.configuration);
49
+ hasWorkspaceFolderCapability = !!(capabilities.workspace && !!capabilities.workspace.workspaceFolders);
50
+ hasDiagnosticRelatedInformationCapability = !!(capabilities.textDocument &&
51
+ capabilities.textDocument.publishDiagnostics &&
52
+ capabilities.textDocument.publishDiagnostics.relatedInformation);
53
+ const result = {
54
+ capabilities: {
55
+ textDocumentSync: node_1.TextDocumentSyncKind.Incremental,
56
+ // Tell the client that this server supports code completion.
57
+ completionProvider: {
58
+ resolveProvider: true,
59
+ triggerCharacters: ['-']
60
+ },
61
+ definitionProvider: true,
62
+ hoverProvider: true,
63
+ referencesProvider: true,
64
+ renameProvider: true,
65
+ documentSymbolProvider: true,
66
+ workspaceSymbolProvider: true
67
+ }
68
+ };
69
+ if (hasWorkspaceFolderCapability) {
70
+ result.capabilities.workspace = {
71
+ workspaceFolders: {
72
+ supported: true
73
+ }
74
+ };
75
+ }
76
+ return result;
77
+ });
78
+ connection.onInitialized(async () => {
79
+ if (hasConfigurationCapability) {
80
+ // Register for all configuration changes.
81
+ connection.client.register(node_1.DidChangeConfigurationNotification.type, undefined);
82
+ }
83
+ if (hasWorkspaceFolderCapability) {
84
+ connection.workspace.onDidChangeWorkspaceFolders(_event => {
85
+ connection.console.log('Workspace folder change event received.');
86
+ });
87
+ }
88
+ // Scan workspace for CSS variables on initialization
89
+ const workspaceFolders = await connection.workspace.getWorkspaceFolders();
90
+ if (workspaceFolders) {
91
+ connection.console.log('Scanning workspace for CSS variables...');
92
+ const folderUris = workspaceFolders.map(f => f.uri);
93
+ await cssVariableManager.scanWorkspace(folderUris);
94
+ connection.console.log(`Workspace scan complete. Found ${cssVariableManager.getAllVariables().length} variables.`);
95
+ // Validate all open documents after workspace scan
96
+ documents.all().forEach(validateTextDocument);
97
+ }
98
+ });
99
+ const defaultSettings = { maxNumberOfProblems: 1000 };
100
+ let globalSettings = defaultSettings;
101
+ // Cache the settings of all open documents
102
+ const documentSettings = new Map();
103
+ connection.onDidChangeConfiguration(change => {
104
+ if (hasConfigurationCapability) {
105
+ // Reset all cached document settings
106
+ documentSettings.clear();
107
+ }
108
+ else {
109
+ globalSettings = ((change.settings.cssVariableLsp || defaultSettings));
110
+ }
111
+ // Revalidate all open text documents
112
+ documents.all().forEach(validateTextDocument);
113
+ });
114
+ function getDocumentSettings(resource) {
115
+ if (!hasConfigurationCapability) {
116
+ return Promise.resolve(globalSettings);
117
+ }
118
+ let result = documentSettings.get(resource);
119
+ if (!result) {
120
+ result = connection.workspace.getConfiguration({
121
+ scopeUri: resource,
122
+ section: 'cssVariableLsp'
123
+ });
124
+ documentSettings.set(resource, result);
125
+ }
126
+ return result;
127
+ }
128
+ // Only keep settings for open documents
129
+ documents.onDidClose(async (e) => {
130
+ connection.console.log(`[css-lsp] Document closed: ${e.document.uri}`);
131
+ documentSettings.delete(e.document.uri);
132
+ // When a document is closed, we need to revert to the file system version
133
+ // instead of removing it completely (which would break workspace files).
134
+ // This handles cases where the editor had unsaved changes.
135
+ await cssVariableManager.updateFile(e.document.uri);
136
+ });
137
+ // The content of a text document has changed. This event is emitted
138
+ // when the text document first opened or when its content has changed.
139
+ // Note: We don't need a separate onDidOpen handler because onDidChangeContent
140
+ // already fires when a document is first opened, avoiding double-parsing.
141
+ documents.onDidChangeContent(change => {
142
+ cssVariableManager.parseDocument(change.document);
143
+ validateTextDocument(change.document);
144
+ });
145
+ async function validateTextDocument(textDocument) {
146
+ const settings = await getDocumentSettings(textDocument.uri);
147
+ const text = textDocument.getText();
148
+ const diagnostics = [];
149
+ // Find all var(--variable) usages
150
+ const usageRegex = /var\((--[\w-]+)(?:\s*,\s*[^)]+)?\)/g;
151
+ let match;
152
+ while ((match = usageRegex.exec(text)) !== null) {
153
+ const variableName = match[1];
154
+ const definitions = cssVariableManager.getVariables(variableName);
155
+ if (definitions.length === 0) {
156
+ // Variable is used but not defined
157
+ const startPos = textDocument.positionAt(match.index);
158
+ const endPos = textDocument.positionAt(match.index + match[0].length);
159
+ const diagnostic = {
160
+ severity: node_1.DiagnosticSeverity.Warning,
161
+ range: {
162
+ start: startPos,
163
+ end: endPos
164
+ },
165
+ message: `CSS variable '${variableName}' is not defined in the workspace`,
166
+ source: 'css-variable-lsp'
167
+ };
168
+ if (hasDiagnosticRelatedInformationCapability) {
169
+ diagnostic.relatedInformation = [];
170
+ }
171
+ diagnostics.push(diagnostic);
172
+ }
173
+ }
174
+ // Send diagnostics to the client
175
+ connection.sendDiagnostics({ uri: textDocument.uri, diagnostics });
176
+ }
177
+ connection.onDidChangeWatchedFiles(async (change) => {
178
+ // Monitored files have changed in the client
179
+ connection.console.log('Received file change event');
180
+ logDebug('didChangeWatchedFiles', change);
181
+ for (const fileEvent of change.changes) {
182
+ if (fileEvent.type === node_1.FileChangeType.Deleted) {
183
+ cssVariableManager.removeFile(fileEvent.uri);
184
+ }
185
+ else {
186
+ // Created or Changed
187
+ // If the document is open, we skip because onDidChangeContent handles it.
188
+ if (!documents.get(fileEvent.uri)) {
189
+ await cssVariableManager.updateFile(fileEvent.uri);
190
+ }
191
+ }
192
+ }
193
+ // Revalidate all open documents
194
+ documents.all().forEach(validateTextDocument);
195
+ });
196
+ // This handler provides the initial list of the completion items.
197
+ connection.onCompletion((_textDocumentPosition) => {
198
+ const variables = cssVariableManager.getAllVariables();
199
+ // Deduplicate by name
200
+ const uniqueVars = new Map();
201
+ variables.forEach(v => {
202
+ if (!uniqueVars.has(v.name)) {
203
+ uniqueVars.set(v.name, v);
204
+ }
205
+ });
206
+ return Array.from(uniqueVars.values()).map(v => ({
207
+ label: v.name,
208
+ kind: node_1.CompletionItemKind.Variable,
209
+ detail: v.value,
210
+ documentation: `Defined in ${v.uri}`
211
+ }));
212
+ });
213
+ // This handler resolves additional information for the item selected in
214
+ // the completion list.
215
+ connection.onCompletionResolve((item) => {
216
+ return item;
217
+ });
218
+ connection.onHover((params) => {
219
+ const document = documents.get(params.textDocument.uri);
220
+ if (!document) {
221
+ return undefined;
222
+ }
223
+ const text = document.getText();
224
+ const offset = document.offsetAt(params.position);
225
+ // Simple regex to find the word at the cursor
226
+ // We look backwards and forwards for valid variable characters
227
+ const left = text.slice(0, offset).match(/[\w-]*$/);
228
+ const right = text.slice(offset).match(/^[\w-]*/);
229
+ if (!left || !right) {
230
+ return undefined;
231
+ }
232
+ const word = left[0] + right[0];
233
+ if (word.startsWith('--')) {
234
+ const variables = cssVariableManager.getVariables(word);
235
+ if (variables.length === 0) {
236
+ return undefined;
237
+ }
238
+ // Get all usages to find context if hovering over a usage
239
+ const usages = cssVariableManager.getVariableUsages(word);
240
+ const hoverUsage = usages.find(u => document.positionAt(document.offsetAt(u.range.start)) === params.position ||
241
+ (offset >= document.offsetAt(u.range.start) && offset <= document.offsetAt(u.range.end)));
242
+ const usageContext = hoverUsage?.usageContext || '';
243
+ const isInlineStyle = usageContext === 'inline-style';
244
+ // Get DOM tree and node if available (for HTML documents)
245
+ const domTree = cssVariableManager.getDOMTree(document.uri);
246
+ const domNode = hoverUsage?.domNode;
247
+ // Sort variables by CSS cascade rules:
248
+ // 1. !important declarations win
249
+ // 2. Inline styles beat everything (except !important)
250
+ // 3. Then by specificity
251
+ // 4. Then by source order (later wins)
252
+ const sortedVars = [...variables].sort((a, b) => {
253
+ // !important always wins (unless both are !important)
254
+ if (a.important !== b.important) {
255
+ return a.important ? -1 : 1;
256
+ }
257
+ // After !important, check specificity
258
+ const specA = (0, specificity_1.calculateSpecificity)(a.selector);
259
+ const specB = (0, specificity_1.calculateSpecificity)(b.selector);
260
+ const specCompare = (0, specificity_1.compareSpecificity)(specA, specB);
261
+ if (specCompare !== 0) {
262
+ return -specCompare; // Negative for descending order
263
+ }
264
+ // Equal specificity - later in source wins
265
+ return b.sourcePosition - a.sourcePosition;
266
+ });
267
+ // Build hover message with full cascade information
268
+ let hoverText = `### CSS Variable: \`${word}\`\n\n`;
269
+ if (sortedVars.length === 1) {
270
+ // Single definition - simple display
271
+ const v = sortedVars[0];
272
+ hoverText += `**Value:** \`${v.value}\``;
273
+ if (v.important) {
274
+ hoverText += ` **!important**`;
275
+ }
276
+ hoverText += `\n\n`;
277
+ if (v.selector) {
278
+ hoverText += `**Defined in:** \`${v.selector}\`\n`;
279
+ hoverText += `**Specificity:** ${(0, specificity_1.formatSpecificity)((0, specificity_1.calculateSpecificity)(v.selector))}\n`;
280
+ }
281
+ }
282
+ else {
283
+ // Multiple definitions - show full cascade
284
+ hoverText += '**Definitions** (CSS cascade order):\n\n';
285
+ sortedVars.forEach((v, index) => {
286
+ const spec = (0, specificity_1.calculateSpecificity)(v.selector);
287
+ // Use DOM-aware matching if available, otherwise fall back to simple matching
288
+ const isApplicable = usageContext ?
289
+ (0, specificity_1.matchesContext)(v.selector, usageContext, domTree, domNode) : true;
290
+ const isWinner = index === 0 && (isApplicable || isInlineStyle);
291
+ let line = `${index + 1}. \`${v.value}\``;
292
+ if (v.important) {
293
+ line += ` **!important**`;
294
+ }
295
+ if (v.selector) {
296
+ line += ` from \`${v.selector}\``;
297
+ line += ` ${(0, specificity_1.formatSpecificity)(spec)}`;
298
+ }
299
+ if (isWinner && usageContext) {
300
+ if (v.important) {
301
+ line += ' ✓ **Wins (!important)**';
302
+ }
303
+ else if (isInlineStyle) {
304
+ line += ' ✓ **Would apply (inline style)**';
305
+ }
306
+ else if (domTree && domNode) {
307
+ line += ' ✓ **Applies (DOM match)**';
308
+ }
309
+ else {
310
+ line += ' ✓ **Applies here**';
311
+ }
312
+ }
313
+ else if (!isApplicable && usageContext && !isInlineStyle) {
314
+ line += ' _(selector doesn\'t match)_';
315
+ }
316
+ else if (index > 0 && usageContext) {
317
+ // Explain why it doesn't win
318
+ const winner = sortedVars[0];
319
+ if (winner.important && !v.important) {
320
+ line += ' _(overridden by !important)_';
321
+ }
322
+ else {
323
+ const winnerSpec = (0, specificity_1.calculateSpecificity)(winner.selector);
324
+ const cmp = (0, specificity_1.compareSpecificity)(winnerSpec, spec);
325
+ if (cmp > 0) {
326
+ line += ' _(lower specificity)_';
327
+ }
328
+ else if (cmp === 0) {
329
+ line += ' _(earlier in source)_';
330
+ }
331
+ }
332
+ }
333
+ hoverText += line + '\n';
334
+ });
335
+ if (usageContext) {
336
+ if (isInlineStyle) {
337
+ hoverText += `\n_Context: Inline style (highest priority)_`;
338
+ }
339
+ else if (domTree && domNode) {
340
+ hoverText += `\n_Context: \`${usageContext}\` (DOM-aware matching)_`;
341
+ }
342
+ else {
343
+ hoverText += `\n_Context: \`${usageContext}\`_`;
344
+ }
345
+ }
346
+ }
347
+ return {
348
+ contents: {
349
+ kind: 'markdown',
350
+ value: hoverText
351
+ }
352
+ };
353
+ }
354
+ return undefined;
355
+ });
356
+ connection.onDefinition((params) => {
357
+ const document = documents.get(params.textDocument.uri);
358
+ if (!document) {
359
+ return undefined;
360
+ }
361
+ const text = document.getText();
362
+ const offset = document.offsetAt(params.position);
363
+ const left = text.slice(0, offset).match(/[\w-]*$/);
364
+ const right = text.slice(offset).match(/^[\w-]*/);
365
+ if (!left || !right) {
366
+ return undefined;
367
+ }
368
+ const word = left[0] + right[0];
369
+ if (word.startsWith('--')) {
370
+ const variables = cssVariableManager.getVariables(word);
371
+ if (variables.length > 0) {
372
+ return {
373
+ uri: variables[0].uri,
374
+ range: variables[0].range
375
+ };
376
+ }
377
+ }
378
+ return undefined;
379
+ });
380
+ // Find all references handler
381
+ connection.onReferences((params) => {
382
+ const document = documents.get(params.textDocument.uri);
383
+ if (!document) {
384
+ return [];
385
+ }
386
+ const text = document.getText();
387
+ const offset = document.offsetAt(params.position);
388
+ const left = text.slice(0, offset).match(/[\w-]*$/);
389
+ const right = text.slice(offset).match(/^[\w-]*/);
390
+ if (!left || !right) {
391
+ return [];
392
+ }
393
+ const word = left[0] + right[0];
394
+ if (word.startsWith('--')) {
395
+ const references = cssVariableManager.getReferences(word);
396
+ return references.map(ref => node_1.Location.create(ref.uri, ref.range));
397
+ }
398
+ return [];
399
+ });
400
+ // Rename handler
401
+ connection.onRenameRequest((params) => {
402
+ const document = documents.get(params.textDocument.uri);
403
+ if (!document) {
404
+ return null;
405
+ }
406
+ const text = document.getText();
407
+ const offset = document.offsetAt(params.position);
408
+ const left = text.slice(0, offset).match(/[\w-]*$/);
409
+ const right = text.slice(offset).match(/^[\w-]*/);
410
+ if (!left || !right) {
411
+ return null;
412
+ }
413
+ const word = left[0] + right[0];
414
+ if (word.startsWith('--')) {
415
+ const references = cssVariableManager.getReferences(word);
416
+ const changes = {};
417
+ for (const ref of references) {
418
+ if (!changes[ref.uri]) {
419
+ changes[ref.uri] = [];
420
+ }
421
+ // For definitions, just replace the variable name
422
+ // For usages in var(), replace just the variable name part
423
+ const edit = {
424
+ range: ref.range,
425
+ newText: 'uri' in ref && 'value' in ref
426
+ ? `${params.newName}: ${ref.value};` // Definition
427
+ : `var(${params.newName})` // Usage
428
+ };
429
+ changes[ref.uri].push(edit);
430
+ }
431
+ return { changes };
432
+ }
433
+ return null;
434
+ });
435
+ // Document symbols handler
436
+ connection.onDocumentSymbol((params) => {
437
+ const document = documents.get(params.textDocument.uri);
438
+ if (!document) {
439
+ return [];
440
+ }
441
+ const variables = cssVariableManager.getDocumentDefinitions(document.uri);
442
+ return variables.map(v => node_1.DocumentSymbol.create(v.name, v.value, node_1.SymbolKind.Variable, v.range, v.range));
443
+ });
444
+ // Workspace symbols handler
445
+ connection.onWorkspaceSymbol((params) => {
446
+ const query = params.query.toLowerCase();
447
+ const allVariables = cssVariableManager.getAllDefinitions();
448
+ const filtered = query
449
+ ? allVariables.filter(v => v.name.toLowerCase().includes(query))
450
+ : allVariables;
451
+ return filtered.map(v => node_1.WorkspaceSymbol.create(v.name, node_1.SymbolKind.Variable, v.uri, v.range));
452
+ });
453
+ // Make the text document manager listen on the connection
454
+ // for open, change and close text document events
455
+ documents.listen(connection);
456
+ // Listen on the connection
457
+ connection.listen();
458
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ /**
3
+ * CSS Specificity Calculator
4
+ *
5
+ * Calculates and compares CSS selector specificity according to the CSS specification.
6
+ * https://www.w3.org/TR/selectors-3/#specificity
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.calculateSpecificity = calculateSpecificity;
10
+ exports.compareSpecificity = compareSpecificity;
11
+ exports.formatSpecificity = formatSpecificity;
12
+ exports.matchesContext = matchesContext;
13
+ /**
14
+ * Calculate the specificity of a CSS selector.
15
+ *
16
+ * Examples:
17
+ * - ":root" → (0, 1, 0) - pseudo-class
18
+ * - "div" → (0, 0, 1) - element
19
+ * - ".class" → (0, 1, 0) - class
20
+ * - "#id" → (1, 0, 0) - ID
21
+ * - "div.class#id" → (1, 1, 1)
22
+ */
23
+ function calculateSpecificity(selector) {
24
+ // Remove whitespace and trim
25
+ selector = selector.trim();
26
+ // Handle empty or universal selector
27
+ if (!selector || selector === '*') {
28
+ return { ids: 0, classes: 0, elements: 0 };
29
+ }
30
+ const specificity = {
31
+ ids: 0,
32
+ classes: 0,
33
+ elements: 0
34
+ };
35
+ // Split by comma for selector lists, take the most specific
36
+ const selectors = selector.split(',');
37
+ if (selectors.length > 1) {
38
+ // For multiple selectors, return the highest specificity
39
+ const specificities = selectors.map(s => calculateSpecificity(s.trim()));
40
+ return specificities.reduce((max, curr) => compareSpecificity(curr, max) > 0 ? curr : max);
41
+ }
42
+ // Remove pseudo-elements first (::before, ::after) - count as elements
43
+ const pseudoElementRegex = /::[a-z-]+/gi;
44
+ const pseudoElements = selector.match(pseudoElementRegex) || [];
45
+ specificity.elements += pseudoElements.length;
46
+ selector = selector.replace(pseudoElementRegex, '');
47
+ // Count IDs (#id)
48
+ const idRegex = /#[a-z0-9_-]+/gi;
49
+ const ids = selector.match(idRegex) || [];
50
+ specificity.ids += ids.length;
51
+ selector = selector.replace(idRegex, '');
52
+ // Count classes (.class)
53
+ const classRegex = /\.[a-z0-9_-]+/gi;
54
+ const classes = selector.match(classRegex) || [];
55
+ specificity.classes += classes.length;
56
+ selector = selector.replace(classRegex, '');
57
+ // Count attribute selectors ([attr])
58
+ const attrRegex = /\[[^\]]+\]/g;
59
+ const attrs = selector.match(attrRegex) || [];
60
+ specificity.classes += attrs.length;
61
+ selector = selector.replace(attrRegex, '');
62
+ // Count pseudo-classes (:hover, :nth-child, etc.)
63
+ const pseudoClassRegex = /:[a-z-]+(\([^)]*\))?/gi;
64
+ const pseudoClasses = selector.match(pseudoClassRegex) || [];
65
+ specificity.classes += pseudoClasses.length;
66
+ selector = selector.replace(pseudoClassRegex, '');
67
+ // Count type selectors (remaining words that aren't combinators)
68
+ // Remove combinators: >, +, ~, and whitespace
69
+ selector = selector.replace(/[>+~\s]/g, ' ');
70
+ const elements = selector.split(/\s+/).filter(s => s && s !== '*');
71
+ specificity.elements += elements.length;
72
+ return specificity;
73
+ }
74
+ /**
75
+ * Compare two specificity values.
76
+ *
77
+ * @returns 1 if a > b, -1 if a < b, 0 if equal
78
+ */
79
+ function compareSpecificity(a, b) {
80
+ // Compare IDs first
81
+ if (a.ids !== b.ids) {
82
+ return a.ids > b.ids ? 1 : -1;
83
+ }
84
+ // Then classes
85
+ if (a.classes !== b.classes) {
86
+ return a.classes > b.classes ? 1 : -1;
87
+ }
88
+ // Finally elements
89
+ if (a.elements !== b.elements) {
90
+ return a.elements > b.elements ? 1 : -1;
91
+ }
92
+ // Equal specificity
93
+ return 0;
94
+ }
95
+ /**
96
+ * Format specificity as a string for display
97
+ */
98
+ function formatSpecificity(spec) {
99
+ return `(${spec.ids},${spec.classes},${spec.elements})`;
100
+ }
101
+ /**
102
+ * Check if a selector could apply to a given context.
103
+ * This is a simplified check - a full implementation would require DOM structure.
104
+ *
105
+ * Examples:
106
+ * - matchesContext(":root", ".button") → true (root applies to everything)
107
+ * - matchesContext("div", "div") → true (exact match)
108
+ * - matchesContext(".button", ".button") → true (exact match)
109
+ * - matchesContext("#main", ".button") → false (different selectors)
110
+ */
111
+ function matchesContext(definitionSelector, usageContext, domTree, domNode) {
112
+ // If we have a DOM tree and node, use proper selector matching
113
+ if (domTree && domNode) {
114
+ try {
115
+ return domTree.matchesSelector(domNode, definitionSelector);
116
+ }
117
+ catch (e) {
118
+ // If selector matching fails, fall back to simple matching
119
+ }
120
+ }
121
+ // Fallback: Simple matching without DOM
122
+ // :root applies to everything (universal fallback)
123
+ if (definitionSelector.trim() === ':root') {
124
+ return true;
125
+ }
126
+ // Exact match
127
+ if (definitionSelector.trim() === usageContext.trim()) {
128
+ return true;
129
+ }
130
+ // For now, we use a simplified approach:
131
+ // If the usage context contains the definition selector, it might apply
132
+ // This handles cases like "div" applying to "div.class"
133
+ const defParts = definitionSelector.split(/[\s>+~]/);
134
+ const usageParts = usageContext.split(/[\s>+~]/);
135
+ // Check if any part of the definition is in the usage
136
+ return defParts.some(defPart => usageParts.some(usagePart => usagePart.includes(defPart) || defPart.includes(usagePart)));
137
+ }
138
+ //# sourceMappingURL=specificity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specificity.js","sourceRoot":"","sources":["../src/specificity.ts"],"names":[],"mappings":"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"}