Skip to content

Commit 4fe968f

Browse files
committed
refactor: defer some requires
1 parent 62a2431 commit 4fe968f

File tree

6 files changed

+29
-16
lines changed

6 files changed

+29
-16
lines changed

lua/haskell-tools/dap.lua

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
---@mod haskell-tools.dap haskell-tools nvim-dap setup
22

3-
local log = require('haskell-tools.log')
4-
local OS = require('haskell-tools.os')
53
local deps = require('haskell-tools.deps')
6-
local HtProjectHelpers = require('haskell-tools.project.helpers')
7-
local Path = deps.require_plenary('plenary.path')
8-
local async = deps.require_plenary('plenary.async')
94

105
---@param root_dir string
116
local function get_ghci_dap_cmd(root_dir)
7+
local HtProjectHelpers = require('haskell-tools.project.helpers')
128
if HtProjectHelpers.is_cabal_project(root_dir) then
139
return 'cabal exec -- ghci-dap --interactive -i ${workspaceFolder}'
1410
else
@@ -22,11 +18,14 @@ end
2218
local function find_json_configurations(root_dir, opts)
2319
---@type HsDapLaunchConfiguration[]
2420
local configurations = {}
21+
local Path = deps.require_plenary('plenary.path')
22+
local log = require('haskell-tools.log')
2523
local results = vim.fn.glob(Path:new(root_dir, opts.settings_file_pattern).filename, true, true)
2624
if #results == 0 then
2725
log.info(opts.settings_file_pattern .. ' not found in project root ' .. root_dir)
2826
else
2927
for _, launch_json in pairs(results) do
28+
local OS = require('haskell-tools.os')
3029
local content = OS.read_file(launch_json)
3130
local success, settings = pcall(vim.json.decode, content)
3231
if not success then
@@ -44,6 +43,7 @@ end
4443
---@return table
4544
local function detect_launch_configurations(root_dir)
4645
local launch_configurations = {}
46+
local Path = deps.require_plenary('plenary.path')
4747
local HTConfig = require('haskell-tools.config.internal')
4848
local dap_opts = HTConfig.dap
4949
---@param entry_point HsEntryPoint
@@ -70,6 +70,7 @@ local function detect_launch_configurations(root_dir)
7070
}
7171
return HsDapLaunchConfiguration
7272
end
73+
local HtProjectHelpers = require('haskell-tools.project.helpers')
7374
for _, entry_point in pairs(HtProjectHelpers.parse_project_entrypoints(root_dir)) do
7475
table.insert(launch_configurations, mk_launch_configuration(entry_point))
7576
end
@@ -114,10 +115,13 @@ local DefaultAutoDapConfigOpts = {
114115
---@param opts AddDapConfigOpts|nil
115116
---@return nil
116117
HsDapTools.discover_configurations = function(bufnr, opts)
118+
local async = deps.require_plenary('plenary.async')
119+
local log = require('haskell-tools.log')
117120
async.run(function()
118121
bufnr = bufnr or 0 -- Default to current buffer
119122
opts = vim.tbl_deep_extend('force', {}, DefaultAutoDapConfigOpts, opts or {})
120123
local filename = vim.api.nvim_buf_get_name(bufnr)
124+
local HtProjectHelpers = require('haskell-tools.project.helpers')
121125
local project_root = HtProjectHelpers.match_project_root(filename)
122126
if not project_root then
123127
log.warn('haskell-tools.dap: Unable to detect project root for file ' .. filename)

lua/haskell-tools/hoogle.lua

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
---@mod haskell-tools.hoogle haskell-tools Hoogle search
22

33
local log = require('haskell-tools.log')
4-
local deps = require('haskell-tools.deps')
5-
local HtParser = require('haskell-tools.parser')
6-
local LspHelpers = require('haskell-tools.lsp.helpers')
74
local lsp_util = vim.lsp.util
85

96
---@type fun(sig_or_func_name:string, options:table|nil):nil
@@ -19,6 +16,7 @@ local function mk_lsp_hoogle_signature_handler(options)
1916
end
2017
local func_name = vim.fn.expand('<cword>')
2118
---@cast func_name string
19+
local HtParser = require('haskell-tools.parser')
2220
local signature_or_func_name = HtParser.try_get_signatures_from_markdown(func_name, result.contents.value)
2321
or func_name
2422
log.debug { 'Hoogle LSP signature search', signature_or_func_name }
@@ -67,6 +65,7 @@ elseif opts.mode == 'telescope-local' then
6765
set_web_handler()
6866
return
6967
end
68+
local deps = require('haskell-tools.deps')
7069
if not deps.has_telescope() then
7170
local msg = 'handler set to "telescope-local" but telescope.nvim is not installed.'
7271
log.warn(msg)
@@ -78,6 +77,7 @@ elseif opts.mode == 'telescope-local' then
7877
elseif opts.mode == 'browser' then
7978
set_browser_handler()
8079
elseif opts.mode == 'auto' then
80+
local deps = require('haskell-tools.deps')
8181
if not deps.has_telescope() then
8282
set_browser_handler()
8383
elseif hoogle_local.has_hoogle() then
@@ -99,6 +99,7 @@ HoogleTools.hoogle_signature = function(options)
9999
handler(options.search_term)
100100
return
101101
end
102+
local LspHelpers = require('haskell-tools.lsp.helpers')
102103
local clients = LspHelpers.get_clients { bufnr = vim.api.nvim_get_current_buf() }
103104
if #clients > 0 then
104105
lsp_hoogle_signature(options)

lua/haskell-tools/lsp.lua

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,6 @@
33
local HTConfig = require('haskell-tools.config.internal')
44
local log = require('haskell-tools.log')
55
local Types = require('haskell-tools.types.internal')
6-
local HtProjectHelpers = require('haskell-tools.project.helpers')
7-
local OS = require('haskell-tools.os')
8-
local deps = require('haskell-tools.deps')
9-
local Path = deps.require_plenary('plenary.path')
10-
local LspHelpers = require('haskell-tools.lsp.helpers')
116
local uv = vim.uv
127
---@diagnostic disable-next-line: deprecated
138
or vim.loop
@@ -42,6 +37,7 @@ end
4237
---@param client lsp.Client
4338
---@return nil
4439
local function fix_cabal_client(client)
40+
local LspHelpers = require('haskell-tools.lsp.helpers')
4541
if client.name == LspHelpers.cabal_client_name and client.server_capabilities then
4642
client.server_capabilities = vim.tbl_extend('force', client.server_capabilities, {
4743
foldingRangeProvider = false,
@@ -87,12 +83,15 @@ HlsTools.load_hls_settings = function(project_root, opts)
8783
end
8884
local default_opts = { settings_file_pattern = 'hls.json' }
8985
opts = vim.tbl_deep_extend('force', {}, default_opts, opts or {})
86+
local deps = require('haskell-tools.deps')
87+
local Path = deps.require_plenary('plenary.path')
9088
local results = vim.fn.glob(Path:new(project_root, opts.settings_file_pattern).filename, true, true)
9189
if #results == 0 then
9290
log.info(opts.settings_file_pattern .. ' not found in project root ' .. project_root)
9391
return default_settings
9492
end
9593
local settings_json = results[1]
94+
local OS = require('haskell-tools.os')
9695
local content = OS.read_file(settings_json)
9796
local success, settings = pcall(vim.json.decode, content)
9897
if not success then
@@ -119,9 +118,11 @@ HlsTools.start = function(bufnr)
119118
vim.notify('haskell-tools: ' .. msg, vim.log.levels.ERROR)
120119
return
121120
end
121+
local HtProjectHelpers = require('haskell-tools.project.helpers')
122122
local is_cabal = HtProjectHelpers.is_cabal_file(bufnr)
123123
local project_root = ht.project.root_dir(file)
124124
local hls_settings = type(hls_opts.settings) == 'function' and hls_opts.settings(project_root) or hls_opts.settings
125+
local LspHelpers = require('haskell-tools.lsp.helpers')
125126
local cmd = LspHelpers.get_hls_cmd()
126127
local hls_bin = cmd[1]
127128
if vim.fn.executable(hls_bin) == 0 then
@@ -178,6 +179,7 @@ end
178179
---@return table[] clients A list of clients that will be stopped
179180
HlsTools.stop = function(bufnr)
180181
bufnr = bufnr or vim.api.nvim_get_current_buf()
182+
local LspHelpers = require('haskell-tools.lsp.helpers')
181183
local clients = LspHelpers.get_active_ht_clients(bufnr)
182184
vim.lsp.stop_client(clients)
183185
return clients

lua/haskell-tools/project.lua

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
---@mod haskell-tools.project haskell-tools Project module
22

33
local log = require('haskell-tools.log')
4-
local HtProjectHelpers = require('haskell-tools.project.helpers')
54
local deps = require('haskell-tools.deps')
65

76
---@brief [[
@@ -22,6 +21,7 @@ local function telescope_package_search(callback, opts)
2221
vim.notify(err_msg, vim.log.levels.ERROR)
2322
return
2423
end
24+
local HtProjectHelpers = require('haskell-tools.project.helpers')
2525
local package_root = HtProjectHelpers.match_package_root(file)
2626
if not package_root then
2727
local err_msg = 'Telescope package search: No package root found for file ' .. file
@@ -63,6 +63,7 @@ local HsProjectTools = {}
6363
---@param project_file string The path to a project file
6464
---@return string|nil
6565
HsProjectTools.root_dir = function(project_file)
66+
local HtProjectHelpers = require('haskell-tools.project.helpers')
6667
return HtProjectHelpers.match_cabal_project_root(project_file)
6768
or HtProjectHelpers.match_stack_project_root(project_file)
6869
or HtProjectHelpers.match_package_root(project_file)
@@ -72,6 +73,7 @@ end
7273
---Open the package.yaml of the package containing the current buffer.
7374
---@return nil
7475
HsProjectTools.open_package_yaml = function()
76+
local HtProjectHelpers = require('haskell-tools.project.helpers')
7577
vim.schedule(function()
7678
local file = vim.api.nvim_buf_get_name(0)
7779
local result = HtProjectHelpers.get_package_yaml(file)
@@ -93,6 +95,7 @@ end
9395
---@return nil
9496
HsProjectTools.open_package_cabal = function()
9597
vim.schedule(function()
98+
local HtProjectHelpers = require('haskell-tools.project.helpers')
9699
local file = vim.api.nvim_buf_get_name(0)
97100
if vim.fn.filewritable(file) ~= 0 and not HtProjectHelpers.is_cabal_project(file) then
98101
vim.notify('HsPackageCabal: Not a cabal project?', vim.log.levels.ERROR)
@@ -113,6 +116,7 @@ end
113116
---@return nil
114117
HsProjectTools.open_project_file = function()
115118
vim.schedule(function()
119+
local HtProjectHelpers = require('haskell-tools.project.helpers')
116120
local file = vim.api.nvim_buf_get_name(0)
117121
local stack_project_root = HtProjectHelpers.match_stack_project_root(file)
118122
if stack_project_root then

lua/haskell-tools/repl.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
---@bruief ]]
66

77
local log = require('haskell-tools.log')
8-
local HtProjectHelpers = require('haskell-tools.project.helpers')
98
local Types = require('haskell-tools.types.internal')
109

1110
---Extend a repl command for `file`.
@@ -14,6 +13,7 @@ local Types = require('haskell-tools.types.internal')
1413
---@param file string|nil An optional project file
1514
---@return string[]|nil
1615
local function extend_repl_cmd(cmd, file)
16+
local HtProjectHelpers = require('haskell-tools.project.helpers')
1717
if file == nil then
1818
file = vim.api.nvim_buf_get_name(0)
1919
log.debug('extend_repl_cmd: No file specified. Using current buffer: ' .. file)
@@ -78,6 +78,7 @@ local function mk_repl_cmd(file)
7878
end
7979
local HTConfig = require('haskell-tools.config.internal')
8080
local opts = HTConfig.tools.repl
81+
local HtProjectHelpers = require('haskell-tools.project.helpers')
8182
if Types.evaluate(opts.prefer) == 'stack' and HtProjectHelpers.is_stack_project(chk_path) then
8283
return mk_stack_repl_cmd(file)
8384
end

lua/haskell-tools/tags.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ local HTConfig = require('haskell-tools.config.internal')
44
local Types = require('haskell-tools.types.internal')
55
local log = require('haskell-tools.log')
66
local deps = require('haskell-tools.deps')
7-
local HtProjectHelpers = require('haskell-tools.project.helpers')
87

98
local _state = {
109
fast_tags_generating = false,
@@ -29,6 +28,7 @@ local FastTagsTools = {}
2928
FastTagsTools.generate_project_tags = function(path, opts)
3029
path = path or vim.api.nvim_buf_get_name(0)
3130
opts = vim.tbl_extend('force', { refresh = true }, opts or {})
31+
local HtProjectHelpers = require('haskell-tools.project.helpers')
3232
local project_root = HtProjectHelpers.match_project_root(path) or vim.fn.getcwd() or 'UNDEFINED'
3333
if opts.refresh == false and _state.projects[project_root] then
3434
log.debug('Project tags already generated. Skipping.')
@@ -57,6 +57,7 @@ end
5757
FastTagsTools.generate_package_tags = function(path)
5858
path = path or vim.api.nvim_buf_get_name(0)
5959
_state.fast_tags_generating = true
60+
local HtProjectHelpers = require('haskell-tools.project.helpers')
6061
local rel_package_root = HtProjectHelpers.match_package_root(path)
6162
if not rel_package_root then
6263
log.warn('generate_package_tags: No rel_package root found.')

0 commit comments

Comments
 (0)