106 lines
2.7 KiB
Lua
106 lines
2.7 KiB
Lua
|
local suc, codeFormat = pcall(require, 'code_format')
|
||
|
if not suc then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local ws = require 'workspace'
|
||
|
local furi = require 'file-uri'
|
||
|
local fs = require 'bee.filesystem'
|
||
|
local fw = require 'filewatch'
|
||
|
local util = require 'utility'
|
||
|
local diagnostics = require 'provider.diagnostic'
|
||
|
local config = require 'config'
|
||
|
|
||
|
local loadedUris = {}
|
||
|
|
||
|
local updateType = {
|
||
|
Created = 1,
|
||
|
Changed = 2,
|
||
|
Deleted = 3,
|
||
|
}
|
||
|
|
||
|
fw.event(function(ev, path)
|
||
|
if util.stringEndWith(path, '.editorconfig') then
|
||
|
for uri, fsPath in pairs(loadedUris) do
|
||
|
loadedUris[uri] = nil
|
||
|
if fsPath ~= true then
|
||
|
local status, err = codeFormat.update_config(updateType.Deleted, uri, fsPath:string())
|
||
|
if not status and err then
|
||
|
log.error(err)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
|
||
|
local m = {}
|
||
|
|
||
|
m.loadedDefaultConfig = false
|
||
|
|
||
|
---@param uri uri
|
||
|
function m.updateConfig(uri)
|
||
|
if not m.loadedDefaultConfig then
|
||
|
m.loadedDefaultConfig = true
|
||
|
codeFormat.set_default_config(config.get(uri, 'Lua.format.defaultConfig'))
|
||
|
m.updateNonStandardSymbols(config.get(nil, 'Lua.runtime.nonstandardSymbol'))
|
||
|
end
|
||
|
|
||
|
local currentUri = uri
|
||
|
while true do
|
||
|
currentUri = currentUri:match('^(.+)/[^/]*$')
|
||
|
if not currentUri or loadedUris[currentUri] then
|
||
|
return
|
||
|
end
|
||
|
loadedUris[currentUri] = true
|
||
|
|
||
|
local currentPath = furi.decode(currentUri)
|
||
|
local editorConfigFSPath = fs.path(currentPath) / '.editorconfig'
|
||
|
if fs.exists(editorConfigFSPath) then
|
||
|
loadedUris[currentUri] = editorConfigFSPath
|
||
|
local status, err = codeFormat.update_config(updateType.Created, currentUri, editorConfigFSPath:string())
|
||
|
if not status and err then
|
||
|
log.error(err)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if not ws.rootUri then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
for _, scp in ipairs(ws.folders) do
|
||
|
if scp.uri == currentUri then
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
---@param symbols? string[]
|
||
|
function m.updateNonStandardSymbols(symbols)
|
||
|
if symbols == nil then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local eqTokens = {}
|
||
|
for _, token in ipairs(symbols) do
|
||
|
if token:find("=") and token ~= "!=" then
|
||
|
table.insert(eqTokens, token)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if #eqTokens ~= 0 then
|
||
|
codeFormat.set_nonstandard_symbol('=', eqTokens)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
config.watch(function(uri, key, value)
|
||
|
if key == "Lua.format.defaultConfig" then
|
||
|
codeFormat.set_default_config(value)
|
||
|
elseif key == "Lua.runtime.nonstandardSymbol" then
|
||
|
m.updateNonStandardSymbols(value)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
return m
|