@@ -51,20 +51,23 @@ function Files.reload(file, callback)
51
51
local category = vim .fn .fnamemodify (file , ' :t:r' )
52
52
local is_archived = config :is_archive_file (file )
53
53
local stat = vim .loop .fs_stat (file )
54
+ local prev_file = Files .get (file )
54
55
if not stat then
55
56
local lines = vim .api .nvim_buf_get_lines (0 , 0 , - 1 , true )
56
57
Files .files [file ] = parser .parse (lines , category , file , is_archived )
58
+ Files ._check_source_blocks (prev_file , Files .get (file ))
57
59
Files ._build_tags ()
58
60
if callback then
59
61
callback ()
60
62
end
61
- return Files .files [ file ]
63
+ return Files .get ( file )
62
64
end
63
65
return utils .readfile (file , function (err , result )
64
66
if err then
65
67
return
66
68
end
67
69
Files .files [file ] = parser .parse (result , category , file , is_archived )
70
+ Files ._check_source_blocks (prev_file , Files .get (file ))
68
71
Files ._build_tags ()
69
72
if callback then
70
73
callback ()
@@ -207,6 +210,20 @@ function Files._build_tags()
207
210
Files .tags = taglist
208
211
end
209
212
213
+ --- @param old_file ? Root
214
+ --- @param new_file Root
215
+ function Files ._check_source_blocks (old_file , new_file )
216
+ local old_source_blocks = old_file and old_file .source_code_filetypes or {}
217
+ local new_source_blocks = new_file .source_code_filetypes or {}
218
+ for _ , ft in ipairs (new_source_blocks ) do
219
+ if not vim .tbl_contains (old_source_blocks , ft ) then
220
+ return vim .schedule (function ()
221
+ vim .cmd ([[ filetype detect]] )
222
+ end )
223
+ end
224
+ end
225
+ end
226
+
210
227
function Files .autocomplete_tags (arg_lead )
211
228
local join_char = ' [%+%-:&|]'
212
229
local parts = vim .split (arg_lead , join_char )
0 commit comments