@@ -7,17 +7,28 @@ local builtin = {
7
7
lazy = {},
8
8
}
9
9
10
- function builtin .lazy .TM_FILENAME () return vim .fn .expand (' %:t' ) end
11
-
12
- function builtin .lazy .TM_FILENAME_BASE () return vim .fn .expand (' %:t:s?\\ .[^\\ .]\\ +$??' ) end
13
-
14
- function builtin .lazy .TM_DIRECTORY () return vim .fn .expand (' %:p:h' ) end
15
-
16
- function builtin .lazy .TM_FILEPATH () return vim .fn .expand (' %:p' ) end
17
-
18
- function builtin .lazy .TM_SELECTED_TEXT () return vim .fn .trim (vim .fn .getreg (vim .v .register , true ), ' \n ' , 2 ) end
10
+ --- Higher-order function to add single-value caching
11
+ local function cached (fn )
12
+ local cache_key = - 1
13
+ local cached_value = nil
14
+ return function (key , ...)
15
+ assert (key ~= - 1 , ' key cannot be -1' )
16
+ if cache_key == key then return cached_value end
17
+
18
+ cached_value = fn (... )
19
+ cache_key = key
20
+ return cached_value
21
+ end
22
+ end
19
23
20
- function builtin .lazy .CLIPBOARD (opts ) return vim .fn .getreg (opts .clipboard_register or vim .v .register , true ) end
24
+ builtin .lazy .TM_FILENAME = cached (function () return vim .fn .expand (' %:t' ) end )
25
+ builtin .lazy .TM_FILENAME_BASE = cached (function () return vim .fn .expand (' %:t:s?\\ .[^\\ .]\\ +$??' ) end )
26
+ builtin .lazy .TM_DIRECTORY = cached (function () return vim .fn .expand (' %:p:h' ) end )
27
+ builtin .lazy .TM_FILEPATH = cached (function () return vim .fn .expand (' %:p' ) end )
28
+ builtin .lazy .TM_SELECTED_TEXT = cached (function () return vim .fn .trim (vim .fn .getreg (vim .v .register , true ), ' \n ' , 2 ) end )
29
+ builtin .lazy .CLIPBOARD = cached (
30
+ function (opts ) return vim .fn .getreg (opts .clipboard_register or vim .v .register , true ) end
31
+ )
21
32
22
33
local function buf_to_ws_part ()
23
34
local LSP_WORSKPACE_PARTS = ' LSP_WORSKPACE_PARTS'
@@ -38,18 +49,18 @@ local function buf_to_ws_part()
38
49
return ws_parts
39
50
end
40
51
41
- function builtin .lazy .RELATIVE_FILEPATH () -- The relative (to the opened workspace or folder) file path of the current document
42
- return buf_to_ws_part ()[2 ]
43
- end
44
-
45
- function builtin .lazy .WORKSPACE_FOLDER () -- The path of the opened workspace or folder
52
+ builtin .lazy .RELATIVE_FILEPATH = cached (
53
+ function () -- The relative (to the opened workspace or folder) file path of the current document
54
+ return buf_to_ws_part ()[2 ]
55
+ end
56
+ )
57
+ builtin .lazy .WORKSPACE_FOLDER = cached (function () -- The path of the opened workspace or folder
46
58
return buf_to_ws_part ()[1 ]
47
- end
48
-
49
- function builtin .lazy .WORKSPACE_NAME () -- The name of the opened workspace or folder
59
+ end )
60
+ builtin .lazy .WORKSPACE_NAME = cached (function () -- The name of the opened workspace or folder
50
61
local parts = vim .split (buf_to_ws_part ()[1 ] or ' ' , ' [\\ /]' )
51
62
return parts [# parts ]
52
- end
63
+ end )
53
64
54
65
function builtin .lazy .CURRENT_YEAR () return os.date (' %Y' ) end
55
66
@@ -129,11 +140,9 @@ local function buffer_comment_chars()
129
140
return comments
130
141
end
131
142
132
- function builtin .lazy .LINE_COMMENT () return buffer_comment_chars ()[1 ] end
133
-
134
- function builtin .lazy .BLOCK_COMMENT_START () return buffer_comment_chars ()[2 ] end
135
-
136
- function builtin .lazy .BLOCK_COMMENT_END () return buffer_comment_chars ()[3 ] end
143
+ builtin .lazy .LINE_COMMENT = cached (function () return buffer_comment_chars ()[1 ] end )
144
+ builtin .lazy .BLOCK_COMMENT_START = cached (function () return buffer_comment_chars ()[2 ] end )
145
+ builtin .lazy .BLOCK_COMMENT_END = cached (function () return buffer_comment_chars ()[3 ] end )
137
146
138
147
local function get_cursor ()
139
148
local c = vim .api .nvim_win_get_cursor (0 )
0 commit comments