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
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CSS Variable Language Server
|
|
2
2
|
|
|
3
|
-
A
|
|
3
|
+
A Language Server Protocol (LSP) implementation for CSS variables (custom properties). This server can be used by any LSP-compatible editor.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
@@ -19,17 +19,14 @@ A VS Code extension that provides Language Server Protocol (LSP) support for CSS
|
|
|
19
19
|
### Installation
|
|
20
20
|
|
|
21
21
|
1. Clone the repository.
|
|
22
|
-
2. Install dependencies
|
|
22
|
+
2. Install dependencies:
|
|
23
23
|
```bash
|
|
24
24
|
npm install
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
###
|
|
27
|
+
### Using the Language Server
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
2. Press `F5` (or go to **Run and Debug** > **Launch Client**) to start a new VS Code window with the extension loaded.
|
|
31
|
-
3. In the new window (Extension Development Host), open a folder containing CSS or HTML files.
|
|
32
|
-
4. Define variables in one file (e.g., `:root { --my-color: red; }`) and try to use them in another (`color: var(--my-color)`).
|
|
29
|
+
This is a standalone LSP server. To use it, you'll need to integrate it with an LSP client (e.g., a VSCode extension). See the `../css-variable-vscode` project for a VSCode extension that uses this server.
|
|
33
30
|
|
|
34
31
|
### Running Tests
|
|
35
32
|
|
|
@@ -77,5 +74,4 @@ _Context: `div`_
|
|
|
77
74
|
|
|
78
75
|
## Project Structure
|
|
79
76
|
|
|
80
|
-
- `
|
|
81
|
-
- `server/`: Node.js Language Server code (Analysis logic).
|
|
77
|
+
- `server/`: Node.js Language Server implementation (CSS variable analysis logic).
|
package/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "css-variable-lsp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "A CSS Language Server for CSS Variables",
|
|
5
|
+
"bin": {
|
|
6
|
+
"css-variable-lsp": "./server/out/server.js"
|
|
7
|
+
},
|
|
5
8
|
"scripts": {
|
|
6
9
|
"compile": "tsc -b",
|
|
7
10
|
"watch": "tsc -b -w",
|
|
8
|
-
"postinstall": "cd
|
|
11
|
+
"postinstall": "cd server && npm install",
|
|
9
12
|
"test": "cd server && npm run test:all"
|
|
10
13
|
},
|
|
11
14
|
"devDependencies": {
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const cssVariableManager_1 = require("../src/cssVariableManager");
|
|
4
|
+
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
|
|
5
|
+
const assert = require("assert");
|
|
6
|
+
const manager = new cssVariableManager_1.CssVariableManager();
|
|
7
|
+
function createDoc(uri, content, languageId = 'css') {
|
|
8
|
+
return vscode_languageserver_textdocument_1.TextDocument.create(uri, languageId, 1, content);
|
|
9
|
+
}
|
|
10
|
+
console.log('Running Cascade and Inline tests...');
|
|
11
|
+
// Test 1: !important Tracking
|
|
12
|
+
{
|
|
13
|
+
const css = ':root { --color: red !important; } div { --color: blue; }';
|
|
14
|
+
const doc = createDoc('file:///test.css', css);
|
|
15
|
+
manager.parseDocument(doc);
|
|
16
|
+
const vars = manager.getVariables('--color');
|
|
17
|
+
assert.strictEqual(vars.length, 2, 'Should find 2 definitions');
|
|
18
|
+
const importantVar = vars.find(v => v.important);
|
|
19
|
+
const normalVar = vars.find(v => !v.important);
|
|
20
|
+
assert.ok(importantVar, 'Should have !important variable');
|
|
21
|
+
assert.strictEqual(importantVar?.value, 'red', '!important value should be red');
|
|
22
|
+
assert.ok(normalVar, 'Should have normal variable');
|
|
23
|
+
assert.strictEqual(normalVar?.value, 'blue', 'Normal value should be blue');
|
|
24
|
+
console.log('Test 1 passed: !important tracking');
|
|
25
|
+
}
|
|
26
|
+
// Test 2: Source Order Tracking
|
|
27
|
+
{
|
|
28
|
+
const css = ':root { --a: first; } :root { --a: second; }';
|
|
29
|
+
const doc = createDoc('file:///test.css', css);
|
|
30
|
+
manager.parseDocument(doc);
|
|
31
|
+
const vars = manager.getVariables('--a');
|
|
32
|
+
assert.strictEqual(vars.length, 2, 'Should find 2 definitions');
|
|
33
|
+
// The second one should have higher source position
|
|
34
|
+
assert.ok(vars[1].sourcePosition > vars[0].sourcePosition, 'Second definition should have higher position');
|
|
35
|
+
console.log('Test 2 passed: Source order tracking');
|
|
36
|
+
}
|
|
37
|
+
// Test 3: Inline Style Parsing
|
|
38
|
+
{
|
|
39
|
+
const html = '<div style="color: var(--primary); background: var(--bg);"></div>';
|
|
40
|
+
const doc = createDoc('file:///test.html', html, 'html');
|
|
41
|
+
manager.parseDocument(doc);
|
|
42
|
+
const primaryUsages = manager.getVariableUsages('--primary');
|
|
43
|
+
const bgUsages = manager.getVariableUsages('--bg');
|
|
44
|
+
assert.strictEqual(primaryUsages.length, 1, 'Should find 1 usage of --primary');
|
|
45
|
+
assert.strictEqual(bgUsages.length, 1, 'Should find 1 usage of --bg');
|
|
46
|
+
assert.strictEqual(primaryUsages[0].usageContext, 'inline-style', 'Usage should be marked as inline-style');
|
|
47
|
+
console.log('Test 3 passed: Inline style parsing');
|
|
48
|
+
}
|
|
49
|
+
// Test 4: Combined Cascade (important + specificity + source order)
|
|
50
|
+
{
|
|
51
|
+
const css = `
|
|
52
|
+
:root { --x: root; }
|
|
53
|
+
div { --x: div; }
|
|
54
|
+
.class { --x: class !important; }
|
|
55
|
+
#id { --x: id; }
|
|
56
|
+
`;
|
|
57
|
+
const doc = createDoc('file:///test.css', css);
|
|
58
|
+
manager.parseDocument(doc);
|
|
59
|
+
const vars = manager.getVariables('--x');
|
|
60
|
+
assert.strictEqual(vars.length, 4, 'Should find 4 definitions');
|
|
61
|
+
const importantVar = vars.find(v => v.important);
|
|
62
|
+
assert.ok(importantVar, 'Should have !important definition');
|
|
63
|
+
assert.strictEqual(importantVar?.selector, '.class', '!important should be on .class');
|
|
64
|
+
console.log('Test 4 passed: Combined cascade tracking');
|
|
65
|
+
}
|
|
66
|
+
console.log('All Cascade and Inline tests passed!');
|
|
67
|
+
//# sourceMappingURL=cascadeAndInline.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascadeAndInline.test.js","sourceRoot":"","sources":["../src/cascadeAndInline.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CssVariableManager = void 0;
|
|
4
|
+
const node_1 = require("vscode-languageserver/node");
|
|
5
|
+
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
|
|
6
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
7
|
+
const glob_1 = require("glob");
|
|
8
|
+
const fs = require("fs");
|
|
9
|
+
const csstree = require("css-tree");
|
|
10
|
+
const domTree_1 = require("./domTree");
|
|
11
|
+
const node_html_parser_1 = require("node-html-parser");
|
|
12
|
+
class CssVariableManager {
|
|
13
|
+
constructor(logger) {
|
|
14
|
+
this.variables = new Map();
|
|
15
|
+
this.usages = new Map();
|
|
16
|
+
this.domTrees = new Map(); // URI -> DOM tree
|
|
17
|
+
const LOG_FILE = '/tmp/css.log';
|
|
18
|
+
this.logger = logger || {
|
|
19
|
+
log: (message) => {
|
|
20
|
+
console.log(message);
|
|
21
|
+
try {
|
|
22
|
+
fs.appendFileSync(LOG_FILE, `[INFO] ${new Date().toISOString()} ${message}\n`);
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
// Ignore file write errors
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
error: (message) => {
|
|
29
|
+
console.error(message);
|
|
30
|
+
try {
|
|
31
|
+
fs.appendFileSync(LOG_FILE, `[ERROR] ${new Date().toISOString()} ${message}\n`);
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
// Ignore file write errors
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Scan all CSS and HTML files in the workspace
|
|
41
|
+
*/
|
|
42
|
+
async scanWorkspace(workspaceFolders) {
|
|
43
|
+
for (const folder of workspaceFolders) {
|
|
44
|
+
const folderUri = vscode_uri_1.URI.parse(folder);
|
|
45
|
+
const folderPath = folderUri.fsPath;
|
|
46
|
+
// Find all CSS, SCSS, SASS, LESS and HTML files
|
|
47
|
+
const files = await (0, glob_1.glob)('**/*.{css,scss,sass,less,html}', {
|
|
48
|
+
cwd: folderPath,
|
|
49
|
+
ignore: ['**/node_modules/**', '**/dist/**', '**/out/**', '**/.git/**'],
|
|
50
|
+
absolute: true
|
|
51
|
+
});
|
|
52
|
+
this.logger.log(`[css-lsp] Scanned ${folder}: found ${files.length} files`);
|
|
53
|
+
// Parse each file
|
|
54
|
+
for (const filePath of files) {
|
|
55
|
+
try {
|
|
56
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
57
|
+
const fileUri = vscode_uri_1.URI.file(filePath).toString();
|
|
58
|
+
let languageId = 'css';
|
|
59
|
+
if (filePath.endsWith('.html')) {
|
|
60
|
+
languageId = 'html';
|
|
61
|
+
}
|
|
62
|
+
else if (filePath.endsWith('.scss')) {
|
|
63
|
+
languageId = 'scss';
|
|
64
|
+
}
|
|
65
|
+
else if (filePath.endsWith('.sass')) {
|
|
66
|
+
languageId = 'sass';
|
|
67
|
+
}
|
|
68
|
+
else if (filePath.endsWith('.less')) {
|
|
69
|
+
languageId = 'less';
|
|
70
|
+
}
|
|
71
|
+
this.parseContent(content, fileUri, languageId);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
this.logger.error(`[css-lsp] Error scanning file ${filePath}: ${error}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
this.logger.log(`[css-lsp] Workspace scan for ${folder} complete.`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
parseDocument(document) {
|
|
81
|
+
this.parseContent(document.getText(), document.uri, document.languageId);
|
|
82
|
+
}
|
|
83
|
+
parseContent(text, uri, languageId) {
|
|
84
|
+
// Clear existing variables and usages for this document
|
|
85
|
+
this.removeFile(uri);
|
|
86
|
+
if (languageId === 'html') {
|
|
87
|
+
// Build DOM tree for HTML documents
|
|
88
|
+
try {
|
|
89
|
+
const domTree = new domTree_1.DOMTree(text);
|
|
90
|
+
this.domTrees.set(uri, domTree);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
this.logger.error(`Error parsing HTML for ${uri}: ${error}`);
|
|
94
|
+
}
|
|
95
|
+
// Use node-html-parser to extract style blocks and inline styles
|
|
96
|
+
try {
|
|
97
|
+
const root = (0, node_html_parser_1.parse)(text, {
|
|
98
|
+
lowerCaseTagName: true,
|
|
99
|
+
comment: false, // Automatically ignores comments
|
|
100
|
+
blockTextElements: {
|
|
101
|
+
script: true,
|
|
102
|
+
noscript: true,
|
|
103
|
+
style: true, // Keep style as block text so we can extract content
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
const document = vscode_languageserver_textdocument_1.TextDocument.create(uri, languageId, 1, text);
|
|
107
|
+
// Parse <style> blocks
|
|
108
|
+
const styleElements = root.querySelectorAll('style');
|
|
109
|
+
for (const styleEl of styleElements) {
|
|
110
|
+
const styleContent = styleEl.textContent;
|
|
111
|
+
if (styleContent && styleEl.range) {
|
|
112
|
+
// Calculate the offset where the CSS content starts
|
|
113
|
+
// styleEl.range gives us the full element from '<style>' to '</style>'
|
|
114
|
+
// We need to find where the content starts (after the opening tag)
|
|
115
|
+
const elementText = text.substring(styleEl.range[0], styleEl.range[1]);
|
|
116
|
+
const openingTagEnd = elementText.indexOf('>') + 1;
|
|
117
|
+
const styleStartOffset = styleEl.range[0] + openingTagEnd;
|
|
118
|
+
this.parseCssText(styleContent, uri, document, styleStartOffset);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Parse inline style attributes
|
|
122
|
+
const elementsWithStyle = root.querySelectorAll('[style]');
|
|
123
|
+
for (const el of elementsWithStyle) {
|
|
124
|
+
const styleAttr = el.getAttribute('style');
|
|
125
|
+
if (styleAttr && el.range) {
|
|
126
|
+
// Find the position of the style attribute value in the original text
|
|
127
|
+
const elementText = text.substring(el.range[0], el.range[1]);
|
|
128
|
+
const styleAttrStart = elementText.indexOf('style');
|
|
129
|
+
if (styleAttrStart !== -1) {
|
|
130
|
+
// Find where the attribute value starts (after the opening quote)
|
|
131
|
+
const valueStart = elementText.indexOf(styleAttr, styleAttrStart);
|
|
132
|
+
if (valueStart !== -1) {
|
|
133
|
+
const styleStartOffset = el.range[0] + valueStart;
|
|
134
|
+
const attributeOffset = el.range[0] + styleAttrStart;
|
|
135
|
+
this.parseInlineStyle(styleAttr, uri, document, styleStartOffset, attributeOffset);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
this.logger.error(`Error parsing HTML content for ${uri}: ${error}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// CSS, SCSS, SASS, LESS
|
|
147
|
+
const document = vscode_languageserver_textdocument_1.TextDocument.create(uri, languageId, 1, text);
|
|
148
|
+
this.parseCssText(text, uri, document, 0);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
parseCssText(text, uri, document, offset) {
|
|
152
|
+
try {
|
|
153
|
+
const ast = csstree.parse(text, {
|
|
154
|
+
positions: true,
|
|
155
|
+
onParseError: () => { } // Ignore errors to be tolerant
|
|
156
|
+
});
|
|
157
|
+
const selectorStack = [];
|
|
158
|
+
csstree.walk(ast, {
|
|
159
|
+
enter: (node) => {
|
|
160
|
+
if (node.type === 'Rule') {
|
|
161
|
+
let selector = '';
|
|
162
|
+
if (node.prelude && node.prelude.type === 'Raw') {
|
|
163
|
+
// Clean up raw selector if possible, or just take it
|
|
164
|
+
selector = node.prelude.value;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
selector = csstree.generate(node.prelude);
|
|
168
|
+
}
|
|
169
|
+
selectorStack.push(selector);
|
|
170
|
+
}
|
|
171
|
+
if (node.type === 'Declaration' && node.property.startsWith('--')) {
|
|
172
|
+
const name = node.property;
|
|
173
|
+
const value = csstree.generate(node.value).trim();
|
|
174
|
+
const important = node.important === true || node.important === 'important';
|
|
175
|
+
const selector = selectorStack.length > 0 ? selectorStack[selectorStack.length - 1] : ':root';
|
|
176
|
+
if (node.loc) {
|
|
177
|
+
const startPos = document.positionAt(offset + node.loc.start.offset);
|
|
178
|
+
const endPos = document.positionAt(offset + node.loc.end.offset);
|
|
179
|
+
const variable = {
|
|
180
|
+
name,
|
|
181
|
+
value,
|
|
182
|
+
uri,
|
|
183
|
+
range: node_1.Range.create(startPos, endPos),
|
|
184
|
+
selector,
|
|
185
|
+
important,
|
|
186
|
+
sourcePosition: offset + node.loc.start.offset
|
|
187
|
+
};
|
|
188
|
+
if (!this.variables.has(name)) {
|
|
189
|
+
this.variables.set(name, []);
|
|
190
|
+
}
|
|
191
|
+
this.variables.get(name)?.push(variable);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (node.type === 'Function' && node.name === 'var') {
|
|
195
|
+
const children = node.children;
|
|
196
|
+
if (children && children.head) {
|
|
197
|
+
const firstChild = children.head.data;
|
|
198
|
+
// Handle var(--name) or var(--name, fallback)
|
|
199
|
+
// In csstree, --name is an Identifier
|
|
200
|
+
if (firstChild.type === 'Identifier' && firstChild.name.startsWith('--')) {
|
|
201
|
+
const name = firstChild.name;
|
|
202
|
+
const usageContext = selectorStack.length > 0 ? selectorStack[selectorStack.length - 1] : '';
|
|
203
|
+
if (node.loc) {
|
|
204
|
+
const startPos = document.positionAt(offset + node.loc.start.offset);
|
|
205
|
+
const endPos = document.positionAt(offset + node.loc.end.offset);
|
|
206
|
+
const usage = {
|
|
207
|
+
name,
|
|
208
|
+
uri,
|
|
209
|
+
range: node_1.Range.create(startPos, endPos),
|
|
210
|
+
usageContext
|
|
211
|
+
};
|
|
212
|
+
if (!this.usages.has(name)) {
|
|
213
|
+
this.usages.set(name, []);
|
|
214
|
+
}
|
|
215
|
+
this.usages.get(name)?.push(usage);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
leave: (node) => {
|
|
222
|
+
if (node.type === 'Rule') {
|
|
223
|
+
selectorStack.pop();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
catch (e) {
|
|
229
|
+
this.logger.error(`Error parsing CSS in ${uri}: ${e}`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Parse inline style attributes for variable usages.
|
|
234
|
+
* Inline styles don't have selectors, they apply directly to elements (highest specificity).
|
|
235
|
+
*/
|
|
236
|
+
parseInlineStyle(text, uri, document, offset, attributeOffset) {
|
|
237
|
+
try {
|
|
238
|
+
const ast = csstree.parse(text, {
|
|
239
|
+
context: 'declarationList',
|
|
240
|
+
positions: true,
|
|
241
|
+
onParseError: () => { }
|
|
242
|
+
});
|
|
243
|
+
csstree.walk(ast, {
|
|
244
|
+
enter: (node) => {
|
|
245
|
+
if (node.type === 'Function' && node.name === 'var') {
|
|
246
|
+
const children = node.children;
|
|
247
|
+
if (children && children.head) {
|
|
248
|
+
const firstChild = children.head.data;
|
|
249
|
+
if (firstChild.type === 'Identifier' && firstChild.name.startsWith('--')) {
|
|
250
|
+
const name = firstChild.name;
|
|
251
|
+
if (node.loc) {
|
|
252
|
+
const startPos = document.positionAt(offset + node.loc.start.offset);
|
|
253
|
+
const endPos = document.positionAt(offset + node.loc.end.offset);
|
|
254
|
+
// Try to find the DOM node for this inline style
|
|
255
|
+
const domTree = this.domTrees.get(uri);
|
|
256
|
+
// Use the attributeOffset (start of 'style="...') to find the correct DOM node
|
|
257
|
+
const domNode = domTree?.findNodeAtPosition(attributeOffset);
|
|
258
|
+
const usage = {
|
|
259
|
+
name,
|
|
260
|
+
uri,
|
|
261
|
+
range: node_1.Range.create(startPos, endPos),
|
|
262
|
+
usageContext: 'inline-style',
|
|
263
|
+
domNode: domNode
|
|
264
|
+
};
|
|
265
|
+
if (!this.usages.has(name)) {
|
|
266
|
+
this.usages.set(name, []);
|
|
267
|
+
}
|
|
268
|
+
this.usages.get(name)?.push(usage);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
catch (e) {
|
|
277
|
+
this.logger.error(`Error parsing inline style in ${uri}: ${e}`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
async updateFile(uri) {
|
|
281
|
+
try {
|
|
282
|
+
const filePath = vscode_uri_1.URI.parse(uri).fsPath;
|
|
283
|
+
if (!fs.existsSync(filePath)) {
|
|
284
|
+
this.logger.log(`[css-lsp] File ${uri} does not exist on disk, removing from manager.`);
|
|
285
|
+
this.removeFile(uri);
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
const stat = fs.statSync(filePath);
|
|
289
|
+
if (!stat.isFile()) {
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
293
|
+
let languageId = 'css';
|
|
294
|
+
if (filePath.endsWith('.html')) {
|
|
295
|
+
languageId = 'html';
|
|
296
|
+
}
|
|
297
|
+
else if (filePath.endsWith('.scss')) {
|
|
298
|
+
languageId = 'scss';
|
|
299
|
+
}
|
|
300
|
+
else if (filePath.endsWith('.sass')) {
|
|
301
|
+
languageId = 'sass';
|
|
302
|
+
}
|
|
303
|
+
else if (filePath.endsWith('.less')) {
|
|
304
|
+
languageId = 'less';
|
|
305
|
+
}
|
|
306
|
+
else if (!filePath.endsWith('.css')) {
|
|
307
|
+
// Skip unsupported file types
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
this.parseContent(content, uri, languageId);
|
|
311
|
+
this.parseContent(content, uri, languageId);
|
|
312
|
+
this.logger.log(`[css-lsp] Updated file ${uri} from disk.`);
|
|
313
|
+
}
|
|
314
|
+
catch (error) {
|
|
315
|
+
this.logger.error(`[css-lsp] Error updating file ${uri}: ${error}`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
removeFile(uri) {
|
|
319
|
+
this.clearDocumentVariables(uri);
|
|
320
|
+
this.clearDocumentUsages(uri);
|
|
321
|
+
this.clearDocumentDOMTree(uri);
|
|
322
|
+
}
|
|
323
|
+
clearDocumentVariables(uri) {
|
|
324
|
+
for (const [name, vars] of this.variables.entries()) {
|
|
325
|
+
const filtered = vars.filter(v => v.uri !== uri);
|
|
326
|
+
if (filtered.length === 0) {
|
|
327
|
+
this.variables.delete(name);
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
this.variables.set(name, filtered);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
clearDocumentUsages(uri) {
|
|
335
|
+
for (const [name, usgs] of this.usages.entries()) {
|
|
336
|
+
const filtered = usgs.filter(u => u.uri !== uri);
|
|
337
|
+
if (filtered.length === 0) {
|
|
338
|
+
this.usages.delete(name);
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
this.usages.set(name, filtered);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
clearDocumentDOMTree(uri) {
|
|
346
|
+
this.domTrees.delete(uri);
|
|
347
|
+
}
|
|
348
|
+
getAllVariables() {
|
|
349
|
+
const allVars = [];
|
|
350
|
+
for (const vars of this.variables.values()) {
|
|
351
|
+
allVars.push(...vars);
|
|
352
|
+
}
|
|
353
|
+
return allVars;
|
|
354
|
+
}
|
|
355
|
+
getVariables(name) {
|
|
356
|
+
return this.variables.get(name) || [];
|
|
357
|
+
}
|
|
358
|
+
getVariableUsages(name) {
|
|
359
|
+
return this.usages.get(name) || [];
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Get all references (definitions + usages) for a variable
|
|
363
|
+
*/
|
|
364
|
+
getReferences(name) {
|
|
365
|
+
const definitions = this.getVariables(name);
|
|
366
|
+
const usages = this.getVariableUsages(name);
|
|
367
|
+
return [...definitions, ...usages];
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Get all variable definitions across the workspace (for workspace symbols)
|
|
371
|
+
*/
|
|
372
|
+
getAllDefinitions() {
|
|
373
|
+
return this.getAllVariables();
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Get all variable definitions in a specific document (for document symbols)
|
|
377
|
+
*/
|
|
378
|
+
getDocumentDefinitions(uri) {
|
|
379
|
+
const allVars = this.getAllVariables();
|
|
380
|
+
return allVars.filter(v => v.uri === uri);
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Get the DOM tree for a document (if it's HTML)
|
|
384
|
+
*/
|
|
385
|
+
getDOMTree(uri) {
|
|
386
|
+
return this.domTrees.get(uri);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
exports.CssVariableManager = CssVariableManager;
|
|
390
|
+
//# sourceMappingURL=cssVariableManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cssVariableManager.js","sourceRoot":"","sources":["../src/cssVariableManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DOM Tree wrapper using node-html-parser
|
|
4
|
+
* Provides a lightweight DOM tree for CSS selector matching
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DOMTree = void 0;
|
|
8
|
+
const node_html_parser_1 = require("node-html-parser");
|
|
9
|
+
class DOMTree {
|
|
10
|
+
constructor(htmlText) {
|
|
11
|
+
this.htmlText = htmlText;
|
|
12
|
+
this.root = (0, node_html_parser_1.parse)(htmlText, {
|
|
13
|
+
lowerCaseTagName: true,
|
|
14
|
+
comment: false,
|
|
15
|
+
blockTextElements: {
|
|
16
|
+
script: true,
|
|
17
|
+
noscript: true,
|
|
18
|
+
style: false, // We want to parse style content
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Find the DOM node at a specific character position in the HTML
|
|
24
|
+
*/
|
|
25
|
+
findNodeAtPosition(position) {
|
|
26
|
+
return this.findNodeAtPositionRecursive(this.root, position);
|
|
27
|
+
}
|
|
28
|
+
findNodeAtPositionRecursive(node, position) {
|
|
29
|
+
if (!(node instanceof node_html_parser_1.HTMLElement)) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
// Check if position is within this node's range
|
|
33
|
+
const range = node.range;
|
|
34
|
+
if (!range || position < range[0] || position > range[1]) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
// Check children first (most specific match)
|
|
38
|
+
for (const child of node.childNodes) {
|
|
39
|
+
const found = this.findNodeAtPositionRecursive(child, position);
|
|
40
|
+
if (found) {
|
|
41
|
+
return found;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Return this node if no child matched
|
|
45
|
+
// Manually extract classes from DOMTokenList using item()
|
|
46
|
+
const classes = [];
|
|
47
|
+
for (let i = 0; i < node.classList.length; i++) {
|
|
48
|
+
const className = node.classList[i]; // Type assertion needed due to library types
|
|
49
|
+
if (className)
|
|
50
|
+
classes.push(className);
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
tagName: node.tagName,
|
|
54
|
+
id: node.id,
|
|
55
|
+
classes: classes,
|
|
56
|
+
element: node
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if a CSS selector matches a given DOM node
|
|
61
|
+
*/
|
|
62
|
+
matchesSelector(nodeInfo, selector) {
|
|
63
|
+
try {
|
|
64
|
+
// Use querySelectorAll on parent and check if element is in results
|
|
65
|
+
// This is a workaround since node-html-parser doesn't have matches()
|
|
66
|
+
const parent = nodeInfo.element.parentNode;
|
|
67
|
+
if (!parent || !(parent instanceof node_html_parser_1.HTMLElement)) {
|
|
68
|
+
// If no parent, try matching against root
|
|
69
|
+
const matches = this.root.querySelectorAll(selector);
|
|
70
|
+
return matches.includes(nodeInfo.element);
|
|
71
|
+
}
|
|
72
|
+
const matches = parent.querySelectorAll(selector);
|
|
73
|
+
return matches.includes(nodeInfo.element);
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
// Invalid selector, return false
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Find all nodes that match a CSS selector
|
|
82
|
+
*/
|
|
83
|
+
querySelectorAll(selector) {
|
|
84
|
+
try {
|
|
85
|
+
const elements = this.root.querySelectorAll(selector);
|
|
86
|
+
return elements.map(el => {
|
|
87
|
+
// Manually extract classes from DOMTokenList
|
|
88
|
+
const classes = [];
|
|
89
|
+
for (let i = 0; i < el.classList.length; i++) {
|
|
90
|
+
const className = el.classList[i]; // Type assertion needed due to library types
|
|
91
|
+
if (className)
|
|
92
|
+
classes.push(className);
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
tagName: el.tagName,
|
|
96
|
+
id: el.id,
|
|
97
|
+
classes: classes,
|
|
98
|
+
element: el
|
|
99
|
+
};
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
catch (e) {
|
|
103
|
+
// Invalid selector
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get the root element
|
|
109
|
+
*/
|
|
110
|
+
getRoot() {
|
|
111
|
+
return this.root;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.DOMTree = DOMTree;
|
|
115
|
+
//# sourceMappingURL=domTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domTree.js","sourceRoot":"","sources":["../src/domTree.ts"],"names":[],"mappings":"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"}
|