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.
- package/README.md +5 -9
- package/package.json +5 -2
- package/server/out/cascadeAndInline.test.js +67 -0
- package/server/out/cascadeAndInline.test.js.map +1 -0
- package/server/out/cssVariableManager.js +390 -0
- package/server/out/cssVariableManager.js.map +1 -0
- package/server/out/domTree.js +115 -0
- package/server/out/domTree.js.map +1 -0
- package/server/out/domTree.test.js +77 -0
- package/server/out/domTree.test.js.map +1 -0
- package/server/out/fileLifecycle.test.js +163 -0
- package/server/out/fileLifecycle.test.js.map +1 -0
- package/server/out/fileTypesAndUpdates.test.js +78 -0
- package/server/out/fileTypesAndUpdates.test.js.map +1 -0
- package/server/out/htmlComments.test.js +180 -0
- package/server/out/htmlComments.test.js.map +1 -0
- package/server/out/server/src/server.js +1 -0
- package/server/out/server/src/server.js.map +1 -1
- package/server/out/server.js +458 -0
- package/server/out/server.js.map +1 -0
- package/server/out/specificity.js +138 -0
- package/server/out/specificity.js.map +1 -0
- package/server/out/specificity.test.js +66 -0
- package/server/out/specificity.test.js.map +1 -0
- package/server/out/test.js +112 -0
- package/server/out/test.js.map +1 -0
- package/server/out/tsconfig.tsbuildinfo +1 -1
- package/server/src/server.ts +2 -0
- package/server/tsconfig.tsbuildinfo +1 -0
- package/client/node_modules/.package-lock.json +0 -110
- package/client/node_modules/@types/node/LICENSE +0 -21
- package/client/node_modules/@types/node/README.md +0 -15
- package/client/node_modules/@types/node/assert/strict.d.ts +0 -8
- package/client/node_modules/@types/node/assert.d.ts +0 -1005
- package/client/node_modules/@types/node/async_hooks.d.ts +0 -586
- package/client/node_modules/@types/node/buffer.buffer.d.ts +0 -457
- package/client/node_modules/@types/node/buffer.d.ts +0 -1901
- package/client/node_modules/@types/node/child_process.d.ts +0 -1453
- package/client/node_modules/@types/node/cluster.d.ts +0 -578
- package/client/node_modules/@types/node/compatibility/disposable.d.ts +0 -14
- package/client/node_modules/@types/node/compatibility/index.d.ts +0 -9
- package/client/node_modules/@types/node/compatibility/indexable.d.ts +0 -20
- package/client/node_modules/@types/node/compatibility/iterators.d.ts +0 -20
- package/client/node_modules/@types/node/console.d.ts +0 -452
- package/client/node_modules/@types/node/constants.d.ts +0 -21
- package/client/node_modules/@types/node/crypto.d.ts +0 -4504
- package/client/node_modules/@types/node/dgram.d.ts +0 -596
- package/client/node_modules/@types/node/diagnostics_channel.d.ts +0 -551
- package/client/node_modules/@types/node/dns/promises.d.ts +0 -477
- package/client/node_modules/@types/node/dns.d.ts +0 -860
- package/client/node_modules/@types/node/domain.d.ts +0 -170
- package/client/node_modules/@types/node/events.d.ts +0 -863
- package/client/node_modules/@types/node/fs/promises.d.ts +0 -1208
- package/client/node_modules/@types/node/fs.d.ts +0 -4332
- package/client/node_modules/@types/node/globals.d.ts +0 -170
- package/client/node_modules/@types/node/globals.typedarray.d.ts +0 -21
- package/client/node_modules/@types/node/http.d.ts +0 -1919
- package/client/node_modules/@types/node/http2.d.ts +0 -2580
- package/client/node_modules/@types/node/https.d.ts +0 -549
- package/client/node_modules/@types/node/index.d.ts +0 -92
- package/client/node_modules/@types/node/inspector.generated.d.ts +0 -2775
- package/client/node_modules/@types/node/module.d.ts +0 -503
- package/client/node_modules/@types/node/net.d.ts +0 -924
- package/client/node_modules/@types/node/os.d.ts +0 -480
- package/client/node_modules/@types/node/package.json +0 -145
- package/client/node_modules/@types/node/path.d.ts +0 -191
- package/client/node_modules/@types/node/perf_hooks.d.ts +0 -860
- package/client/node_modules/@types/node/process.d.ts +0 -1632
- package/client/node_modules/@types/node/punycode.d.ts +0 -117
- package/client/node_modules/@types/node/querystring.d.ts +0 -140
- package/client/node_modules/@types/node/readline/promises.d.ts +0 -154
- package/client/node_modules/@types/node/readline.d.ts +0 -715
- package/client/node_modules/@types/node/repl.d.ts +0 -430
- package/client/node_modules/@types/node/stream/consumers.d.ts +0 -38
- package/client/node_modules/@types/node/stream/promises.d.ts +0 -90
- package/client/node_modules/@types/node/stream/web.d.ts +0 -527
- package/client/node_modules/@types/node/stream.d.ts +0 -1680
- package/client/node_modules/@types/node/string_decoder.d.ts +0 -67
- package/client/node_modules/@types/node/test.d.ts +0 -1208
- package/client/node_modules/@types/node/timers/promises.d.ts +0 -108
- package/client/node_modules/@types/node/timers.d.ts +0 -286
- package/client/node_modules/@types/node/tls.d.ts +0 -1204
- package/client/node_modules/@types/node/trace_events.d.ts +0 -171
- package/client/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -455
- package/client/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -19
- package/client/node_modules/@types/node/ts5.6/index.d.ts +0 -92
- package/client/node_modules/@types/node/tty.d.ts +0 -206
- package/client/node_modules/@types/node/url.d.ts +0 -957
- package/client/node_modules/@types/node/util.d.ts +0 -2083
- package/client/node_modules/@types/node/v8.d.ts +0 -753
- package/client/node_modules/@types/node/vm.d.ts +0 -704
- package/client/node_modules/@types/node/wasi.d.ts +0 -160
- package/client/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -34
- package/client/node_modules/@types/node/web-globals/domexception.d.ts +0 -68
- package/client/node_modules/@types/node/web-globals/events.d.ts +0 -81
- package/client/node_modules/@types/node/web-globals/fetch.d.ts +0 -38
- package/client/node_modules/@types/node/worker_threads.d.ts +0 -698
- package/client/node_modules/@types/node/zlib.d.ts +0 -517
- package/client/node_modules/@types/vscode/LICENSE +0 -21
- package/client/node_modules/@types/vscode/README.md +0 -15
- package/client/node_modules/@types/vscode/index.d.ts +0 -21145
- package/client/node_modules/@types/vscode/package.json +0 -26
- package/client/node_modules/balanced-match/.github/FUNDING.yml +0 -2
- package/client/node_modules/balanced-match/LICENSE.md +0 -21
- package/client/node_modules/balanced-match/README.md +0 -97
- package/client/node_modules/balanced-match/index.js +0 -62
- package/client/node_modules/balanced-match/package.json +0 -48
- package/client/node_modules/brace-expansion/.github/FUNDING.yml +0 -2
- package/client/node_modules/brace-expansion/LICENSE +0 -21
- package/client/node_modules/brace-expansion/README.md +0 -135
- package/client/node_modules/brace-expansion/index.js +0 -203
- package/client/node_modules/brace-expansion/package.json +0 -49
- package/client/node_modules/minimatch/LICENSE +0 -15
- package/client/node_modules/minimatch/README.md +0 -259
- package/client/node_modules/minimatch/lib/path.js +0 -4
- package/client/node_modules/minimatch/minimatch.js +0 -944
- package/client/node_modules/minimatch/package.json +0 -35
- package/client/node_modules/semver/LICENSE +0 -15
- package/client/node_modules/semver/README.md +0 -664
- package/client/node_modules/semver/bin/semver.js +0 -191
- package/client/node_modules/semver/classes/comparator.js +0 -143
- package/client/node_modules/semver/classes/index.js +0 -7
- package/client/node_modules/semver/classes/range.js +0 -557
- package/client/node_modules/semver/classes/semver.js +0 -333
- package/client/node_modules/semver/functions/clean.js +0 -8
- package/client/node_modules/semver/functions/cmp.js +0 -54
- package/client/node_modules/semver/functions/coerce.js +0 -62
- package/client/node_modules/semver/functions/compare-build.js +0 -9
- package/client/node_modules/semver/functions/compare-loose.js +0 -5
- package/client/node_modules/semver/functions/compare.js +0 -7
- package/client/node_modules/semver/functions/diff.js +0 -60
- package/client/node_modules/semver/functions/eq.js +0 -5
- package/client/node_modules/semver/functions/gt.js +0 -5
- package/client/node_modules/semver/functions/gte.js +0 -5
- package/client/node_modules/semver/functions/inc.js +0 -21
- package/client/node_modules/semver/functions/lt.js +0 -5
- package/client/node_modules/semver/functions/lte.js +0 -5
- package/client/node_modules/semver/functions/major.js +0 -5
- package/client/node_modules/semver/functions/minor.js +0 -5
- package/client/node_modules/semver/functions/neq.js +0 -5
- package/client/node_modules/semver/functions/parse.js +0 -18
- package/client/node_modules/semver/functions/patch.js +0 -5
- package/client/node_modules/semver/functions/prerelease.js +0 -8
- package/client/node_modules/semver/functions/rcompare.js +0 -5
- package/client/node_modules/semver/functions/rsort.js +0 -5
- package/client/node_modules/semver/functions/satisfies.js +0 -12
- package/client/node_modules/semver/functions/sort.js +0 -5
- package/client/node_modules/semver/functions/valid.js +0 -8
- package/client/node_modules/semver/index.js +0 -91
- package/client/node_modules/semver/internal/constants.js +0 -37
- package/client/node_modules/semver/internal/debug.js +0 -11
- package/client/node_modules/semver/internal/identifiers.js +0 -29
- package/client/node_modules/semver/internal/lrucache.js +0 -42
- package/client/node_modules/semver/internal/parse-options.js +0 -17
- package/client/node_modules/semver/internal/re.js +0 -223
- package/client/node_modules/semver/package.json +0 -78
- package/client/node_modules/semver/preload.js +0 -4
- package/client/node_modules/semver/range.bnf +0 -16
- package/client/node_modules/semver/ranges/gtr.js +0 -6
- package/client/node_modules/semver/ranges/intersects.js +0 -9
- package/client/node_modules/semver/ranges/ltr.js +0 -6
- package/client/node_modules/semver/ranges/max-satisfying.js +0 -27
- package/client/node_modules/semver/ranges/min-satisfying.js +0 -26
- package/client/node_modules/semver/ranges/min-version.js +0 -63
- package/client/node_modules/semver/ranges/outside.js +0 -82
- package/client/node_modules/semver/ranges/simplify.js +0 -49
- package/client/node_modules/semver/ranges/subset.js +0 -249
- package/client/node_modules/semver/ranges/to-comparators.js +0 -10
- package/client/node_modules/semver/ranges/valid.js +0 -13
- package/client/node_modules/undici-types/README.md +0 -6
- package/client/node_modules/undici-types/agent.d.ts +0 -31
- package/client/node_modules/undici-types/api.d.ts +0 -43
- package/client/node_modules/undici-types/balanced-pool.d.ts +0 -18
- package/client/node_modules/undici-types/cache.d.ts +0 -36
- package/client/node_modules/undici-types/client.d.ts +0 -97
- package/client/node_modules/undici-types/connector.d.ts +0 -34
- package/client/node_modules/undici-types/content-type.d.ts +0 -21
- package/client/node_modules/undici-types/cookies.d.ts +0 -28
- package/client/node_modules/undici-types/diagnostics-channel.d.ts +0 -67
- package/client/node_modules/undici-types/dispatcher.d.ts +0 -241
- package/client/node_modules/undici-types/errors.d.ts +0 -128
- package/client/node_modules/undici-types/fetch.d.ts +0 -209
- package/client/node_modules/undici-types/file.d.ts +0 -39
- package/client/node_modules/undici-types/filereader.d.ts +0 -54
- package/client/node_modules/undici-types/formdata.d.ts +0 -108
- package/client/node_modules/undici-types/global-dispatcher.d.ts +0 -9
- package/client/node_modules/undici-types/global-origin.d.ts +0 -7
- package/client/node_modules/undici-types/handlers.d.ts +0 -9
- package/client/node_modules/undici-types/header.d.ts +0 -4
- package/client/node_modules/undici-types/index.d.ts +0 -63
- package/client/node_modules/undici-types/interceptors.d.ts +0 -5
- package/client/node_modules/undici-types/mock-agent.d.ts +0 -50
- package/client/node_modules/undici-types/mock-client.d.ts +0 -25
- package/client/node_modules/undici-types/mock-errors.d.ts +0 -12
- package/client/node_modules/undici-types/mock-interceptor.d.ts +0 -93
- package/client/node_modules/undici-types/mock-pool.d.ts +0 -25
- package/client/node_modules/undici-types/package.json +0 -55
- package/client/node_modules/undici-types/patch.d.ts +0 -71
- package/client/node_modules/undici-types/pool-stats.d.ts +0 -19
- package/client/node_modules/undici-types/pool.d.ts +0 -28
- package/client/node_modules/undici-types/proxy-agent.d.ts +0 -30
- package/client/node_modules/undici-types/readable.d.ts +0 -61
- package/client/node_modules/undici-types/webidl.d.ts +0 -220
- package/client/node_modules/undici-types/websocket.d.ts +0 -131
- package/client/node_modules/vscode-jsonrpc/License.txt +0 -11
- package/client/node_modules/vscode-jsonrpc/README.md +0 -69
- package/client/node_modules/vscode-jsonrpc/browser.d.ts +0 -6
- package/client/node_modules/vscode-jsonrpc/browser.js +0 -7
- package/client/node_modules/vscode-jsonrpc/lib/browser/main.d.ts +0 -17
- package/client/node_modules/vscode-jsonrpc/lib/browser/main.js +0 -76
- package/client/node_modules/vscode-jsonrpc/lib/browser/ril.d.ts +0 -12
- package/client/node_modules/vscode-jsonrpc/lib/browser/ril.js +0 -156
- package/client/node_modules/vscode-jsonrpc/lib/common/api.d.ts +0 -14
- package/client/node_modules/vscode-jsonrpc/lib/common/api.js +0 -81
- package/client/node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts +0 -32
- package/client/node_modules/vscode-jsonrpc/lib/common/cancellation.js +0 -96
- package/client/node_modules/vscode-jsonrpc/lib/common/connection.d.ts +0 -358
- package/client/node_modules/vscode-jsonrpc/lib/common/connection.js +0 -1212
- package/client/node_modules/vscode-jsonrpc/lib/common/disposable.d.ts +0 -9
- package/client/node_modules/vscode-jsonrpc/lib/common/disposable.js +0 -16
- package/client/node_modules/vscode-jsonrpc/lib/common/encoding.d.ts +0 -52
- package/client/node_modules/vscode-jsonrpc/lib/common/encoding.js +0 -70
- package/client/node_modules/vscode-jsonrpc/lib/common/events.d.ts +0 -39
- package/client/node_modules/vscode-jsonrpc/lib/common/events.js +0 -128
- package/client/node_modules/vscode-jsonrpc/lib/common/is.d.ts +0 -7
- package/client/node_modules/vscode-jsonrpc/lib/common/is.js +0 -35
- package/client/node_modules/vscode-jsonrpc/lib/common/linkedMap.d.ts +0 -53
- package/client/node_modules/vscode-jsonrpc/lib/common/linkedMap.js +0 -398
- package/client/node_modules/vscode-jsonrpc/lib/common/messageBuffer.d.ts +0 -18
- package/client/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js +0 -152
- package/client/node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts +0 -77
- package/client/node_modules/vscode-jsonrpc/lib/common/messageReader.js +0 -197
- package/client/node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts +0 -60
- package/client/node_modules/vscode-jsonrpc/lib/common/messageWriter.js +0 -115
- package/client/node_modules/vscode-jsonrpc/lib/common/messages.d.ts +0 -369
- package/client/node_modules/vscode-jsonrpc/lib/common/messages.js +0 -306
- package/client/node_modules/vscode-jsonrpc/lib/common/ral.d.ts +0 -74
- package/client/node_modules/vscode-jsonrpc/lib/common/ral.js +0 -23
- package/client/node_modules/vscode-jsonrpc/lib/common/semaphore.d.ts +0 -10
- package/client/node_modules/vscode-jsonrpc/lib/common/semaphore.js +0 -68
- package/client/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.d.ts +0 -15
- package/client/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js +0 -76
- package/client/node_modules/vscode-jsonrpc/lib/node/main.d.ts +0 -63
- package/client/node_modules/vscode-jsonrpc/lib/node/main.js +0 -257
- package/client/node_modules/vscode-jsonrpc/lib/node/ril.d.ts +0 -13
- package/client/node_modules/vscode-jsonrpc/lib/node/ril.js +0 -161
- package/client/node_modules/vscode-jsonrpc/node.cmd +0 -5
- package/client/node_modules/vscode-jsonrpc/node.d.ts +0 -6
- package/client/node_modules/vscode-jsonrpc/node.js +0 -7
- package/client/node_modules/vscode-jsonrpc/package.json +0 -45
- package/client/node_modules/vscode-jsonrpc/thirdpartynotices.txt +0 -16
- package/client/node_modules/vscode-jsonrpc/typings/thenable.d.ts +0 -5
- package/client/node_modules/vscode-languageclient/License.txt +0 -11
- package/client/node_modules/vscode-languageclient/README.md +0 -17
- package/client/node_modules/vscode-languageclient/browser.d.ts +0 -6
- package/client/node_modules/vscode-languageclient/browser.js +0 -7
- package/client/node_modules/vscode-languageclient/lib/browser/main.d.ts +0 -8
- package/client/node_modules/vscode-languageclient/lib/browser/main.js +0 -37
- package/client/node_modules/vscode-languageclient/lib/common/api.d.ts +0 -36
- package/client/node_modules/vscode-languageclient/lib/common/api.js +0 -27
- package/client/node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts +0 -37
- package/client/node_modules/vscode-languageclient/lib/common/callHierarchy.js +0 -97
- package/client/node_modules/vscode-languageclient/lib/common/client.d.ts +0 -476
- package/client/node_modules/vscode-languageclient/lib/common/client.js +0 -1600
- package/client/node_modules/vscode-languageclient/lib/common/codeAction.d.ts +0 -19
- package/client/node_modules/vscode-languageclient/lib/common/codeAction.js +0 -99
- package/client/node_modules/vscode-languageclient/lib/common/codeConverter.d.ts +0 -78
- package/client/node_modules/vscode-languageclient/lib/common/codeConverter.js +0 -876
- package/client/node_modules/vscode-languageclient/lib/common/codeLens.d.ts +0 -23
- package/client/node_modules/vscode-languageclient/lib/common/codeLens.js +0 -78
- package/client/node_modules/vscode-languageclient/lib/common/colorProvider.d.ts +0 -25
- package/client/node_modules/vscode-languageclient/lib/common/colorProvider.js +0 -74
- package/client/node_modules/vscode-languageclient/lib/common/completion.d.ts +0 -20
- package/client/node_modules/vscode-languageclient/lib/common/completion.js +0 -126
- package/client/node_modules/vscode-languageclient/lib/common/configuration.d.ts +0 -69
- package/client/node_modules/vscode-languageclient/lib/common/configuration.js +0 -209
- package/client/node_modules/vscode-languageclient/lib/common/declaration.d.ts +0 -16
- package/client/node_modules/vscode-languageclient/lib/common/declaration.js +0 -54
- package/client/node_modules/vscode-languageclient/lib/common/definition.d.ts +0 -16
- package/client/node_modules/vscode-languageclient/lib/common/definition.js +0 -55
- package/client/node_modules/vscode-languageclient/lib/common/diagnostic.d.ts +0 -122
- package/client/node_modules/vscode-languageclient/lib/common/diagnostic.js +0 -814
- package/client/node_modules/vscode-languageclient/lib/common/documentHighlight.d.ts +0 -15
- package/client/node_modules/vscode-languageclient/lib/common/documentHighlight.js +0 -50
- package/client/node_modules/vscode-languageclient/lib/common/documentLink.d.ts +0 -19
- package/client/node_modules/vscode-languageclient/lib/common/documentLink.js +0 -71
- package/client/node_modules/vscode-languageclient/lib/common/documentSymbol.d.ts +0 -17
- package/client/node_modules/vscode-languageclient/lib/common/documentSymbol.js +0 -104
- package/client/node_modules/vscode-languageclient/lib/common/executeCommand.d.ts +0 -21
- package/client/node_modules/vscode-languageclient/lib/common/executeCommand.js +0 -72
- package/client/node_modules/vscode-languageclient/lib/common/features.d.ts +0 -418
- package/client/node_modules/vscode-languageclient/lib/common/features.js +0 -291
- package/client/node_modules/vscode-languageclient/lib/common/fileOperations.d.ts +0 -116
- package/client/node_modules/vscode-languageclient/lib/common/fileOperations.js +0 -333
- package/client/node_modules/vscode-languageclient/lib/common/fileSystemWatcher.d.ts +0 -18
- package/client/node_modules/vscode-languageclient/lib/common/fileSystemWatcher.js +0 -95
- package/client/node_modules/vscode-languageclient/lib/common/foldingRange.d.ts +0 -19
- package/client/node_modules/vscode-languageclient/lib/common/foldingRange.js +0 -65
- package/client/node_modules/vscode-languageclient/lib/common/formatting.d.ts +0 -39
- package/client/node_modules/vscode-languageclient/lib/common/formatting.js +0 -182
- package/client/node_modules/vscode-languageclient/lib/common/hover.d.ts +0 -16
- package/client/node_modules/vscode-languageclient/lib/common/hover.js +0 -58
- package/client/node_modules/vscode-languageclient/lib/common/implementation.d.ts +0 -16
- package/client/node_modules/vscode-languageclient/lib/common/implementation.js +0 -54
- package/client/node_modules/vscode-languageclient/lib/common/inlayHint.d.ts +0 -20
- package/client/node_modules/vscode-languageclient/lib/common/inlayHint.js +0 -92
- package/client/node_modules/vscode-languageclient/lib/common/inlineCompletion.d.ts +0 -18
- package/client/node_modules/vscode-languageclient/lib/common/inlineCompletion.js +0 -54
- package/client/node_modules/vscode-languageclient/lib/common/inlineValue.d.ts +0 -18
- package/client/node_modules/vscode-languageclient/lib/common/inlineValue.js +0 -65
- package/client/node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts +0 -21
- package/client/node_modules/vscode-languageclient/lib/common/linkedEditingRange.js +0 -53
- package/client/node_modules/vscode-languageclient/lib/common/notebook.d.ts +0 -96
- package/client/node_modules/vscode-languageclient/lib/common/notebook.js +0 -851
- package/client/node_modules/vscode-languageclient/lib/common/progress.d.ts +0 -11
- package/client/node_modules/vscode-languageclient/lib/common/progress.js +0 -44
- package/client/node_modules/vscode-languageclient/lib/common/progressPart.d.ts +0 -24
- package/client/node_modules/vscode-languageclient/lib/common/progressPart.js +0 -96
- package/client/node_modules/vscode-languageclient/lib/common/protocolCallHierarchyItem.d.ts +0 -6
- package/client/node_modules/vscode-languageclient/lib/common/protocolCallHierarchyItem.js +0 -16
- package/client/node_modules/vscode-languageclient/lib/common/protocolCodeAction.d.ts +0 -6
- package/client/node_modules/vscode-languageclient/lib/common/protocolCodeAction.js +0 -14
- package/client/node_modules/vscode-languageclient/lib/common/protocolCodeLens.d.ts +0 -5
- package/client/node_modules/vscode-languageclient/lib/common/protocolCodeLens.js +0 -13
- package/client/node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts +0 -11
- package/client/node_modules/vscode-languageclient/lib/common/protocolCompletionItem.js +0 -13
- package/client/node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts +0 -167
- package/client/node_modules/vscode-languageclient/lib/common/protocolConverter.js +0 -1134
- package/client/node_modules/vscode-languageclient/lib/common/protocolDiagnostic.d.ts +0 -18
- package/client/node_modules/vscode-languageclient/lib/common/protocolDiagnostic.js +0 -25
- package/client/node_modules/vscode-languageclient/lib/common/protocolDocumentLink.d.ts +0 -5
- package/client/node_modules/vscode-languageclient/lib/common/protocolDocumentLink.js +0 -13
- package/client/node_modules/vscode-languageclient/lib/common/protocolInlayHint.d.ts +0 -5
- package/client/node_modules/vscode-languageclient/lib/common/protocolInlayHint.js +0 -13
- package/client/node_modules/vscode-languageclient/lib/common/protocolTypeHierarchyItem.d.ts +0 -6
- package/client/node_modules/vscode-languageclient/lib/common/protocolTypeHierarchyItem.js +0 -16
- package/client/node_modules/vscode-languageclient/lib/common/protocolWorkspaceSymbol.d.ts +0 -7
- package/client/node_modules/vscode-languageclient/lib/common/protocolWorkspaceSymbol.js +0 -18
- package/client/node_modules/vscode-languageclient/lib/common/reference.d.ts +0 -20
- package/client/node_modules/vscode-languageclient/lib/common/reference.js +0 -53
- package/client/node_modules/vscode-languageclient/lib/common/rename.d.ts +0 -27
- package/client/node_modules/vscode-languageclient/lib/common/rename.js +0 -113
- package/client/node_modules/vscode-languageclient/lib/common/selectionRange.d.ts +0 -16
- package/client/node_modules/vscode-languageclient/lib/common/selectionRange.js +0 -57
- package/client/node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts +0 -33
- package/client/node_modules/vscode-languageclient/lib/common/semanticTokens.js +0 -179
- package/client/node_modules/vscode-languageclient/lib/common/signatureHelp.d.ts +0 -16
- package/client/node_modules/vscode-languageclient/lib/common/signatureHelp.js +0 -71
- package/client/node_modules/vscode-languageclient/lib/common/textSynchronization.d.ts +0 -101
- package/client/node_modules/vscode-languageclient/lib/common/textSynchronization.js +0 -402
- package/client/node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts +0 -16
- package/client/node_modules/vscode-languageclient/lib/common/typeDefinition.js +0 -55
- package/client/node_modules/vscode-languageclient/lib/common/typeHierarchy.d.ts +0 -31
- package/client/node_modules/vscode-languageclient/lib/common/typeHierarchy.js +0 -96
- package/client/node_modules/vscode-languageclient/lib/common/utils/async.d.ts +0 -41
- package/client/node_modules/vscode-languageclient/lib/common/utils/async.js +0 -276
- package/client/node_modules/vscode-languageclient/lib/common/utils/is.d.ts +0 -12
- package/client/node_modules/vscode-languageclient/lib/common/utils/is.js +0 -57
- package/client/node_modules/vscode-languageclient/lib/common/utils/uuid.d.ts +0 -22
- package/client/node_modules/vscode-languageclient/lib/common/utils/uuid.js +0 -97
- package/client/node_modules/vscode-languageclient/lib/common/workspaceFolder.d.ts +0 -30
- package/client/node_modules/vscode-languageclient/lib/common/workspaceFolder.js +0 -148
- package/client/node_modules/vscode-languageclient/lib/common/workspaceSymbol.d.ts +0 -19
- package/client/node_modules/vscode-languageclient/lib/common/workspaceSymbol.js +0 -79
- package/client/node_modules/vscode-languageclient/lib/node/main.d.ts +0 -100
- package/client/node_modules/vscode-languageclient/lib/node/main.js +0 -570
- package/client/node_modules/vscode-languageclient/lib/node/processes.d.ts +0 -6
- package/client/node_modules/vscode-languageclient/lib/node/processes.js +0 -47
- package/client/node_modules/vscode-languageclient/lib/node/terminateProcess.sh +0 -16
- package/client/node_modules/vscode-languageclient/node.cmd +0 -5
- package/client/node_modules/vscode-languageclient/node.d.ts +0 -6
- package/client/node_modules/vscode-languageclient/node.js +0 -7
- package/client/node_modules/vscode-languageclient/package.json +0 -50
- package/client/node_modules/vscode-languageserver-protocol/License.txt +0 -11
- package/client/node_modules/vscode-languageserver-protocol/README.md +0 -16
- package/client/node_modules/vscode-languageserver-protocol/browser.d.ts +0 -6
- package/client/node_modules/vscode-languageserver-protocol/browser.js +0 -7
- package/client/node_modules/vscode-languageserver-protocol/lib/browser/main.d.ts +0 -4
- package/client/node_modules/vscode-languageserver-protocol/lib/browser/main.js +0 -28
- package/client/node_modules/vscode-languageserver-protocol/lib/common/api.d.ts +0 -58
- package/client/node_modules/vscode-languageserver-protocol/lib/common/api.js +0 -77
- package/client/node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts +0 -187
- package/client/node_modules/vscode-languageserver-protocol/lib/common/connection.js +0 -15
- package/client/node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts +0 -51
- package/client/node_modules/vscode-languageserver-protocol/lib/common/messages.js +0 -44
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.$.d.ts +0 -1
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.$.js +0 -43
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts +0 -86
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js +0 -42
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts +0 -66
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js +0 -32
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts +0 -35
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js +0 -24
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts +0 -3252
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts +0 -37
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js +0 -22
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.d.ts +0 -341
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.js +0 -74
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts +0 -306
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js +0 -101
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts +0 -109
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js +0 -30
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts +0 -38
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js +0 -21
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.d.ts +0 -110
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.js +0 -43
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.d.ts +0 -57
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.js +0 -22
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.d.ts +0 -86
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.js +0 -30
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.js +0 -943
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts +0 -52
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js +0 -19
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts +0 -106
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js +0 -68
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.d.ts +0 -400
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.js +0 -214
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts +0 -107
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js +0 -37
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts +0 -41
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js +0 -20
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts +0 -223
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js +0 -57
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts +0 -72
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js +0 -22
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts +0 -38
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js +0 -21
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.d.ts +0 -83
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.js +0 -42
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.d.ts +0 -74
- package/client/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.js +0 -27
- package/client/node_modules/vscode-languageserver-protocol/lib/common/utils/is.d.ts +0 -9
- package/client/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js +0 -46
- package/client/node_modules/vscode-languageserver-protocol/lib/node/main.d.ts +0 -6
- package/client/node_modules/vscode-languageserver-protocol/lib/node/main.js +0 -28
- package/client/node_modules/vscode-languageserver-protocol/metaModel.schema.json +0 -783
- package/client/node_modules/vscode-languageserver-protocol/node.cmd +0 -5
- package/client/node_modules/vscode-languageserver-protocol/node.d.ts +0 -6
- package/client/node_modules/vscode-languageserver-protocol/node.js +0 -7
- package/client/node_modules/vscode-languageserver-protocol/package.json +0 -45
- package/client/node_modules/vscode-languageserver-protocol/thirdpartynotices.txt +0 -31
- package/client/node_modules/vscode-languageserver-types/License.txt +0 -11
- package/client/node_modules/vscode-languageserver-types/README.md +0 -17
- package/client/node_modules/vscode-languageserver-types/lib/esm/main.d.ts +0 -3139
- package/client/node_modules/vscode-languageserver-types/lib/esm/main.js +0 -2222
- package/client/node_modules/vscode-languageserver-types/lib/esm/package.json +0 -3
- package/client/node_modules/vscode-languageserver-types/lib/umd/main.d.ts +0 -3139
- package/client/node_modules/vscode-languageserver-types/lib/umd/main.js +0 -2272
- package/client/node_modules/vscode-languageserver-types/package.json +0 -38
- package/client/node_modules/vscode-languageserver-types/thirdpartynotices.txt +0 -16
- package/client/package-lock.json +0 -125
- package/client/package.json +0 -42
- package/client/src/extension.ts +0 -56
- 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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"}
|