Skip to content

Commit 3db8fb8

Browse files
committed
fix #818
1 parent 9fab92c commit 3db8fb8

File tree

3 files changed

+52
-21
lines changed

3 files changed

+52
-21
lines changed

changelog.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# changelog
22

3+
## 2.4.11
4+
* `FIX` [#818](https://github.com./sumneko/lua-language-server/issues/818)
5+
36
## 2.4.10
47
`2021-11-23`
58
* `FIX` [#790](https://github.com./sumneko/lua-language-server/issues/790)

script/files.lua

+28
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
local platform = require 'bee.platform'
2+
local fs = require 'bee.filesystem'
23
local config = require 'config'
34
local glob = require 'glob'
45
local furi = require 'file-uri'
@@ -29,6 +30,33 @@ m.fileCount = 0
2930
m.astCount = 0
3031
m.astMap = {} -- setmetatable({}, { __mode = 'v' })
3132

33+
local fixedUri = {}
34+
--- 获取文件的真实uri(真实大小写)
35+
---@param uri uri
36+
---@return uri
37+
function m.getRealUri(uri)
38+
if platform.OS ~= 'Windows' then
39+
return uri
40+
end
41+
local filename = furi.decode(uri)
42+
local path = fs.path(filename)
43+
local suc, res = pcall(fs.exists, path)
44+
if not suc or not res then
45+
return uri
46+
end
47+
suc, res = pcall(fs.canonical, path)
48+
if not suc or res:string() == filename then
49+
return uri
50+
end
51+
filename = res:string()
52+
local ruri = furi.encode(filename)
53+
if not fixedUri[ruri] then
54+
fixedUri[ruri] = true
55+
log.warn(('Fix real file uri: %s -> %s'):format(uri, ruri))
56+
end
57+
return ruri
58+
end
59+
3260
--- 打开文件
3361
---@param uri uri
3462
function m.open(uri)

script/provider/provider.lua

+21-21
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ end)
112112
proto.on('textDocument/didOpen', function (params)
113113
workspace.awaitReady()
114114
local doc = params.textDocument
115-
local uri = doc.uri
115+
local uri = files.getRealUri(doc.uri)
116116
local text = doc.text
117117
log.debug('didOpen', uri)
118118
files.setText(uri, text, true)
@@ -121,7 +121,7 @@ end)
121121

122122
proto.on('textDocument/didClose', function (params)
123123
local doc = params.textDocument
124-
local uri = doc.uri
124+
local uri = files.getRealUri(doc.uri)
125125
log.debug('didClose', uri)
126126
files.close(uri)
127127
if not files.isLua(uri) then
@@ -133,7 +133,7 @@ proto.on('textDocument/didChange', function (params)
133133
workspace.awaitReady()
134134
local doc = params.textDocument
135135
local changes = params.contentChanges
136-
local uri = doc.uri
136+
local uri = files.getRealUri(doc.uri)
137137
--log.debug('changes', util.dump(changes))
138138
local text = files.getOriginText(uri) or ''
139139
local rows = files.getCachedRows(uri)
@@ -144,7 +144,7 @@ end)
144144

145145
proto.on('textDocument/hover', function (params)
146146
local doc = params.textDocument
147-
local uri = doc.uri
147+
local uri = files.getRealUri(doc.uri)
148148
if not workspace.isReady() then
149149
local count, max = workspace.getLoadProcess()
150150
return {
@@ -177,7 +177,7 @@ proto.on('textDocument/definition', function (params)
177177
workspace.awaitReady()
178178
local _ <close> = progress.create(lang.script.WINDOW_PROCESSING_DEFINITION, 0.5)
179179
local core = require 'core.definition'
180-
local uri = params.textDocument.uri
180+
local uri = files.getRealUri(params.textDocument.uri)
181181
if not files.exists(uri) then
182182
return nil
183183
end
@@ -212,7 +212,7 @@ proto.on('textDocument/typeDefinition', function (params)
212212
workspace.awaitReady()
213213
local _ <close> = progress.create(lang.script.WINDOW_PROCESSING_TYPE_DEFINITION, 0.5)
214214
local core = require 'core.type-definition'
215-
local uri = params.textDocument.uri
215+
local uri = files.getRealUri(params.textDocument.uri)
216216
if not files.exists(uri) then
217217
return nil
218218
end
@@ -247,7 +247,7 @@ proto.on('textDocument/references', function (params)
247247
workspace.awaitReady()
248248
local _ <close> = progress.create(lang.script.WINDOW_PROCESSING_REFERENCE, 0.5)
249249
local core = require 'core.reference'
250-
local uri = params.textDocument.uri
250+
local uri = files.getRealUri(params.textDocument.uri)
251251
if not files.exists(uri) then
252252
return nil
253253
end
@@ -268,7 +268,7 @@ end)
268268

269269
proto.on('textDocument/documentHighlight', function (params)
270270
local core = require 'core.highlight'
271-
local uri = params.textDocument.uri
271+
local uri = files.getRealUri(params.textDocument.uri)
272272
if not files.exists(uri) then
273273
return nil
274274
end
@@ -291,7 +291,7 @@ proto.on('textDocument/rename', function (params)
291291
workspace.awaitReady()
292292
local _ <close> = progress.create(lang.script.WINDOW_PROCESSING_RENAME, 0.5)
293293
local core = require 'core.rename'
294-
local uri = params.textDocument.uri
294+
local uri = files.getRealUri(params.textDocument.uri)
295295
if not files.exists(uri) then
296296
return nil
297297
end
@@ -316,7 +316,7 @@ end)
316316

317317
proto.on('textDocument/prepareRename', function (params)
318318
local core = require 'core.rename'
319-
local uri = params.textDocument.uri
319+
local uri = files.getRealUri(params.textDocument.uri)
320320
if not files.exists(uri) then
321321
return nil
322322
end
@@ -332,7 +332,7 @@ proto.on('textDocument/prepareRename', function (params)
332332
end)
333333

334334
proto.on('textDocument/completion', function (params)
335-
local uri = params.textDocument.uri
335+
local uri = files.getRealUri(params.textDocument.uri)
336336
if not workspace.isReady() then
337337
local count, max = workspace.getLoadProcess()
338338
return {
@@ -483,7 +483,7 @@ proto.on('textDocument/signatureHelp', function (params)
483483
end
484484
workspace.awaitReady()
485485
local _ <close> = progress.create(lang.script.WINDOW_PROCESSING_SIGNATURE, 0.5)
486-
local uri = params.textDocument.uri
486+
local uri = files.getRealUri(params.textDocument.uri)
487487
if not files.exists(uri) then
488488
return nil
489489
end
@@ -523,7 +523,7 @@ proto.on('textDocument/documentSymbol', function (params)
523523
workspace.awaitReady()
524524
local _ <close> = progress.create(lang.script.WINDOW_PROCESSING_SYMBOL, 0.5)
525525
local core = require 'core.document-symbol'
526-
local uri = params.textDocument.uri
526+
local uri = files.getRealUri(params.textDocument.uri)
527527

528528
local symbols = core(uri)
529529
if not symbols then
@@ -562,7 +562,7 @@ end)
562562

563563
proto.on('textDocument/codeAction', function (params)
564564
local core = require 'core.code-action'
565-
local uri = params.textDocument.uri
565+
local uri = files.getRealUri(params.textDocument.uri)
566566
local range = params.range
567567
local diagnostics = params.context.diagnostics
568568
if not files.exists(uri) then
@@ -641,7 +641,7 @@ proto.on('workspace/symbol', function (params)
641641
end)
642642

643643
proto.on('textDocument/semanticTokens/full', function (params)
644-
local uri = params.textDocument.uri
644+
local uri = files.getRealUri(params.textDocument.uri)
645645
workspace.awaitReady()
646646
local _ <close> = progress.create(lang.script.WINDOW_PROCESSING_SEMANTIC_FULL, 0.5)
647647
local core = require 'core.semantic-tokens'
@@ -652,7 +652,7 @@ proto.on('textDocument/semanticTokens/full', function (params)
652652
end)
653653

654654
proto.on('textDocument/semanticTokens/range', function (params)
655-
local uri = params.textDocument.uri
655+
local uri = files.getRealUri(params.textDocument.uri)
656656
workspace.awaitReady()
657657
local _ <close> = progress.create(lang.script.WINDOW_PROCESSING_SEMANTIC_RANGE, 0.5)
658658
local core = require 'core.semantic-tokens'
@@ -673,7 +673,7 @@ end)
673673

674674
proto.on('textDocument/foldingRange', function (params)
675675
local core = require 'core.folding'
676-
local uri = params.textDocument.uri
676+
local uri = files.getRealUri(params.textDocument.uri)
677677
if not files.exists(uri) then
678678
return nil
679679
end
@@ -706,7 +706,7 @@ proto.on('window/workDoneProgress/cancel', function (params)
706706
end)
707707

708708
proto.on('$/didChangeVisibleRanges', function (params)
709-
local uri = params.uri
709+
local uri = files.getRealUri(params.uri)
710710
await.close('visible:' .. uri)
711711
await.setID('visible:' .. uri)
712712
await.delay()
@@ -732,7 +732,7 @@ proto.on('textDocument/onTypeFormatting', function (params)
732732
workspace.awaitReady()
733733
local _ <close> = progress.create(lang.script.WINDOW_PROCESSING_TYPE_FORMATTING, 0.5)
734734
local ch = params.ch
735-
local uri = params.textDocument.uri
735+
local uri = files.getRealUri(params.textDocument.uri)
736736
if not files.exists(uri) then
737737
return nil
738738
end
@@ -766,7 +766,7 @@ proto.on('$/requestHint', function (params)
766766
return
767767
end
768768
workspace.awaitReady()
769-
local uri = params.textDocument.uri
769+
local uri = files.getRealUri(params.textDocument.uri)
770770
local start, finish = converter.unpackRange(uri, params.range)
771771
local results = core(uri, start, finish)
772772
local hintResults = {}
@@ -848,7 +848,7 @@ files.watch(function (ev, uri)
848848
if ev == 'update'
849849
or ev == 'remove' then
850850
for id, p in pairs(proto.holdon) do
851-
if p.params.textDocument and p.params.textDocument.uri == uri then
851+
if p.params.textDocument and files.getRealUri(p.params.textDocument.uri) == uri then
852852
proto.close(id, define.ErrorCodes.ContentModified)
853853
end
854854
end

0 commit comments

Comments
 (0)