aboutsummaryrefslogtreecommitdiff
path: root/scripts/apply_vimgrep_updates.fnl
blob: b70e93e13a5a3021394345d06795834fc5d0051d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env -S fennel --lua luajit

(local M {})

(fn M.main []
  (local write-count (M.apply-vimgrep-changes))
  (print (.. "Applied " write-count " changes")))

(fn M.apply-vimgrep-changes []
  (var count 0)
  (each [line (io.lines)]
    (local (filepath linenr _ text) (M.parse-vimgrep line))
    (when filepath
      (local applied? (M.update-line filepath linenr text))
      (when applied?
        (set count (+ count 1)))))
  count)

(fn M.parse-vimgrep [line]
  (local (filepath linenr col text) (string.match line "(.*):(%d+):(%d+):(.*)"))
  (values filepath (tonumber linenr) col text))

(fn M.update-line [filepath linenr text]
  (local lines (M.read-lines filepath))
  (var written? false)
  (when (and (> (length lines) linenr) (not= (. lines linenr) text))
    (set (. lines linenr) text)
    (local file (io.open filepath :w))
    (file:write (table.concat lines "\n"))
    (file:close)
    (set written? true))
  written?)

(fn M.read-lines [filepath]
  (local file (io.open filepath :r))
  (local lines [])
  (each [line (file:lines)] (table.insert lines line))
  (file:close)
  lines)