blob: 21482d336ef48f3e41945e0ab6578e2070f9793c (
plain)
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
40
41
|
#!/usr/bin/env nomsu -V4.10.12.7
#
Find an action by its stub. Usage:
nomsu tools/find_action.nom "foo %" file1 file2 directory1 ...
Will print all the code locations and code that uses the stub.
use "lib/os.nom"
use "lib/consolecolor.nom"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%stub = (command line args).1
say "Looking for stub: \%stub..."
%files = ((command line args).% for % in 2 to (size of (command line args)))
for %path in %files:
for file %filename in %path:
unless (%filename::matches "%.nom$"): do next %filename
%file = (read file %filename)
%code = (NomsuCode from (%Source %filename 1 (size of %file)) %file)
try:
%tree = (%code parsed)
..and if it barfs %msg:
say (red "\%filename failed to parse:\n\%msg")
%tree = (nil)
unless %tree:
do next %filename
%results = []
for %t in recursive %tree:
if ((%t is "Action" syntax tree) and (%t.stub is %stub)):
%line_num = (line number of %t.source.start in %file)
%results::add {..}
line: %line_num, text: "\(blue "\%filename:\%line_num:")\n\(yellow (source lines of %t))"
if (%t is syntax tree):
for %sub in %t:
recurse %t on %sub
sort %results by % -> %.line
for % in %results:
say %.text
|