Skip to content

Commit 3c46b5b

Browse files
committed
readtags: add -C/--canonicalize-input option
Partially close #3168. TODO: * revise code, Signed-off-by: Masatake YAMATO <[email protected]>
1 parent 5d67d4c commit 3c46b5b

File tree

10 files changed

+357
-17
lines changed

10 files changed

+357
-17
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
2+
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
3+
!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/
4+
!_TAG_OUTPUT_FILESEP slash /slash or backslash/
5+
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
6+
!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/
7+
!_TAG_PROC_CWD C:\tmp //
8+
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
9+
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
10+
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
11+
!_TAG_PROGRAM_VERSION 5.9.0 /e08db39a3/
12+
a_fn xyz/a.c /^static void a_fn(void) {}$/;" f typeref:typename:void file:
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
2+
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
3+
!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/
4+
!_TAG_OUTPUT_FILESEP slash /slash or backslash/
5+
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
6+
!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/
7+
!_TAG_PROC_CWD D:/tmp //
8+
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
9+
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
10+
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
11+
!_TAG_PROGRAM_VERSION 5.9.0 /e08db39a3/
12+
a_fn xyz/a.c /^static void a_fn(void) {}$/;" f typeref:typename:void file:
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
2+
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
3+
!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/
4+
!_TAG_OUTPUT_FILESEP slash /slash or backslash/
5+
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
6+
!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/
7+
!_TAG_PROC_CWD /tmp/abc/ //
8+
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
9+
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
10+
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
11+
!_TAG_PROGRAM_VERSION 5.9.0 /e08db39a3/
12+
a_fn xyz/a.c /^static void a_fn(void) {}$/;" f typeref:typename:void file:
13+
b_fn b.c /^static void b_fn(void) {}$/;" f typeref:typename:void file:
14+
c_fn ./c.c /^static void c_fn(void) {}$/;" f typeref:typename:void file:
15+
d_fn ./../d.c /^static void d_fn(void) {}$/;" f typeref:typename:void file:
16+
e_fn ../e.c /^static void e_fn(void) {}$/;" f typeref:typename:void file:
17+
f_fn ../../f.c /^static void f_fn(void) {}$/;" f typeref:typename:void file:
18+
g_fn ../../../g.c /^static void g_fn(void) {}$/;" f typeref:typename:void file:
19+
h_fn ../../../../h.c /^static void h_fn(void) {}$/;" f typeref:typename:void file:
20+
i_fn .././../../../i.c /^static void i_fn(void) {}$/;" f typeref:typename:void file:
21+
j_fn .././../j.c /^static void j_fn(void) {}$/;" f typeref:typename:void file:
22+
k_fn .././.././././k.c /^static void k_fn(void) {}$/;" f typeref:typename:void file:
23+
l_fn ././././././l.c /^static void l_fn(void) {}$/;" f typeref:typename:void file:
24+
m_fn ./././../abc/./m.c /^static void m_fn(void) {}$/;" f typeref:typename:void file:
25+
n_fn ./././../abc/X/.././n.c /^static void n_fn(void) {}$/;" f typeref:typename:void file:
26+
o_fn .////.///////./////..//abc//X//..///.///o.c /^static void o_fn(void) {}$/;" f typeref:typename:void file:
27+
p_fn ./../xyz/p.c /^static void p_fn(void) {}$/;" f typeref:typename:void file:
28+
q_fn ./../xyz/../././xyz/q.c /^static void q_fn(void) {}$/;" f typeref:typename:void file:
29+
r_fn /r.c /^static void r_fn(void) {}$/;" f typeref:typename:void file:
30+
s_fn /../s.c /^static void s_fn(void) {}$/;" f typeref:typename:void file:
31+
t_fn /../././t.c /^static void t_fn(void) {}$/;" f typeref:typename:void file:
32+
u_fn /../././tmp/./u.c /^static void u_fn(void) {}$/;" f typeref:typename:void file:
33+
v_fn /../././tmp/./../tmp/abc/./v.c /^static void v_fn(void) {}$/;" f typeref:typename:void file:
34+
w_fn /../././tmp/./../tmp/../abc/./w.c /^static void w_fn(void) {}$/;" f typeref:typename:void file:
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
2+
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
3+
!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/
4+
!_TAG_OUTPUT_FILESEP slash /slash or backslash/
5+
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
6+
!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/
7+
!_TAG_PROC_CWD /tmp/abc/../././abc/../abc //
8+
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
9+
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
10+
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
11+
!_TAG_PROGRAM_VERSION 5.9.0 /e08db39a3/
12+
a_fn xyz/a.c /^static void a_fn(void) {}$/;" f typeref:typename:void file:
13+
b_fn b.c /^static void b_fn(void) {}$/;" f typeref:typename:void file:
14+
c_fn ./c.c /^static void c_fn(void) {}$/;" f typeref:typename:void file:
15+
d_fn ./../d.c /^static void d_fn(void) {}$/;" f typeref:typename:void file:
16+
e_fn ../e.c /^static void e_fn(void) {}$/;" f typeref:typename:void file:
17+
f_fn ../../f.c /^static void f_fn(void) {}$/;" f typeref:typename:void file:
18+
g_fn ../../../g.c /^static void g_fn(void) {}$/;" f typeref:typename:void file:
19+
h_fn ../../../../h.c /^static void h_fn(void) {}$/;" f typeref:typename:void file:
20+
i_fn .././../../../i.c /^static void i_fn(void) {}$/;" f typeref:typename:void file:
21+
j_fn .././../j.c /^static void j_fn(void) {}$/;" f typeref:typename:void file:
22+
k_fn .././.././././k.c /^static void k_fn(void) {}$/;" f typeref:typename:void file:
23+
l_fn ././././././l.c /^static void l_fn(void) {}$/;" f typeref:typename:void file:
24+
m_fn ./././../abc/./m.c /^static void m_fn(void) {}$/;" f typeref:typename:void file:
25+
n_fn ./././../abc/X/.././n.c /^static void n_fn(void) {}$/;" f typeref:typename:void file:
26+
o_fn .////.///////./////..//abc//X//..///.///o.c /^static void o_fn(void) {}$/;" f typeref:typename:void file:
27+
p_fn ./../xyz/p.c /^static void p_fn(void) {}$/;" f typeref:typename:void file:
28+
q_fn ./../xyz/../././xyz/q.c /^static void q_fn(void) {}$/;" f typeref:typename:void file:
29+
r_fn /r.c /^static void r_fn(void) {}$/;" f typeref:typename:void file:
30+
s_fn /../s.c /^static void s_fn(void) {}$/;" f typeref:typename:void file:
31+
t_fn /../././t.c /^static void t_fn(void) {}$/;" f typeref:typename:void file:
32+
u_fn /../././tmp/./u.c /^static void u_fn(void) {}$/;" f typeref:typename:void file:
33+
v_fn /../././tmp/./../tmp/abc/./v.c /^static void v_fn(void) {}$/;" f typeref:typename:void file:
34+
w_fn /../././tmp/./../tmp/../abc/./w.c /^static void w_fn(void) {}$/;" f typeref:typename:void file:
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
2+
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
3+
!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/
4+
!_TAG_OUTPUT_FILESEP slash /slash or backslash/
5+
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
6+
!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/
7+
!_TAG_PROC_CWD /tmp/abc/../././abc/../abc/ //
8+
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
9+
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
10+
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
11+
!_TAG_PROGRAM_VERSION 5.9.0 /e08db39a3/
12+
a_fn xyz/a.c /^static void a_fn(void) {}$/;" f typeref:typename:void file:
13+
b_fn b.c /^static void b_fn(void) {}$/;" f typeref:typename:void file:
14+
c_fn ./c.c /^static void c_fn(void) {}$/;" f typeref:typename:void file:
15+
d_fn ./../d.c /^static void d_fn(void) {}$/;" f typeref:typename:void file:
16+
e_fn ../e.c /^static void e_fn(void) {}$/;" f typeref:typename:void file:
17+
f_fn ../../f.c /^static void f_fn(void) {}$/;" f typeref:typename:void file:
18+
g_fn ../../../g.c /^static void g_fn(void) {}$/;" f typeref:typename:void file:
19+
h_fn ../../../../h.c /^static void h_fn(void) {}$/;" f typeref:typename:void file:
20+
i_fn .././../../../i.c /^static void i_fn(void) {}$/;" f typeref:typename:void file:
21+
j_fn .././../j.c /^static void j_fn(void) {}$/;" f typeref:typename:void file:
22+
k_fn .././.././././k.c /^static void k_fn(void) {}$/;" f typeref:typename:void file:
23+
l_fn ././././././l.c /^static void l_fn(void) {}$/;" f typeref:typename:void file:
24+
m_fn ./././../abc/./m.c /^static void m_fn(void) {}$/;" f typeref:typename:void file:
25+
n_fn ./././../abc/X/.././n.c /^static void n_fn(void) {}$/;" f typeref:typename:void file:
26+
o_fn .////.///////./////..//abc//X//..///.///o.c /^static void o_fn(void) {}$/;" f typeref:typename:void file:
27+
p_fn ./../xyz/p.c /^static void p_fn(void) {}$/;" f typeref:typename:void file:
28+
q_fn ./../xyz/../././xyz/q.c /^static void q_fn(void) {}$/;" f typeref:typename:void file:
29+
r_fn /r.c /^static void r_fn(void) {}$/;" f typeref:typename:void file:
30+
s_fn /../s.c /^static void s_fn(void) {}$/;" f typeref:typename:void file:
31+
t_fn /../././t.c /^static void t_fn(void) {}$/;" f typeref:typename:void file:
32+
u_fn /../././tmp/./u.c /^static void u_fn(void) {}$/;" f typeref:typename:void file:
33+
v_fn /../././tmp/./../tmp/abc/./v.c /^static void v_fn(void) {}$/;" f typeref:typename:void file:
34+
w_fn /../././tmp/./../tmp/../abc/./w.c /^static void w_fn(void) {}$/;" f typeref:typename:void file:
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/bin/sh
2+
3+
# Copyright: 2021 Masatake YAMATO
4+
# License: GPL-2
5+
6+
READTAGS=$3
7+
8+
. ../utils.sh
9+
10+
#V="valgrind --leak-check=full -v"
11+
V=
12+
13+
if ! [ -x "${READTAGS}" ]; then
14+
skip "no readtags"
15+
fi
16+
17+
18+
echo2()
19+
{
20+
echo "$@"
21+
echo "$@" 1>&2
22+
}
23+
24+
run_test()
25+
{
26+
echo2 "# $@"
27+
"${READTAGS}" -F '(list $name "\t" $input "\n")' $2 -t $1 -l
28+
}
29+
30+
run_test good0.tags -C &&
31+
run_test good1.tags --canonicalize-input &&
32+
run_test good2.tags -C &&
33+
! run_test drive-letter0.tags --canonicalize-input &&
34+
! run_test drive-letter1.tags -C
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# good0.tags -C
2+
# good1.tags --canonicalize-input
3+
# good2.tags -C
4+
# drive-letter0.tags --canonicalize-input
5+
!_TAG_PROC_CWD must start with '/': C:\tmp
6+
# drive-letter1.tags -C
7+
!_TAG_PROC_CWD must start with '/': D:/tmp
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# good0.tags -C
2+
a_fn xyz/a.c
3+
b_fn b.c
4+
c_fn c.c
5+
d_fn /tmp/d.c
6+
e_fn /tmp/e.c
7+
f_fn /f.c
8+
g_fn /g.c
9+
h_fn /h.c
10+
i_fn /i.c
11+
j_fn /j.c
12+
k_fn /k.c
13+
l_fn l.c
14+
m_fn m.c
15+
n_fn n.c
16+
o_fn o.c
17+
p_fn /tmp/xyz/p.c
18+
q_fn /tmp/xyz/q.c
19+
r_fn /r.c
20+
s_fn /s.c
21+
t_fn /t.c
22+
u_fn /tmp/u.c
23+
v_fn /tmp/abc/v.c
24+
w_fn /abc/w.c
25+
# good1.tags --canonicalize-input
26+
a_fn xyz/a.c
27+
b_fn b.c
28+
c_fn c.c
29+
d_fn /tmp/d.c
30+
e_fn /tmp/e.c
31+
f_fn /f.c
32+
g_fn /g.c
33+
h_fn /h.c
34+
i_fn /i.c
35+
j_fn /j.c
36+
k_fn /k.c
37+
l_fn l.c
38+
m_fn m.c
39+
n_fn n.c
40+
o_fn o.c
41+
p_fn /tmp/xyz/p.c
42+
q_fn /tmp/xyz/q.c
43+
r_fn /r.c
44+
s_fn /s.c
45+
t_fn /t.c
46+
u_fn /tmp/u.c
47+
v_fn /tmp/abc/v.c
48+
w_fn /abc/w.c
49+
# good2.tags -C
50+
a_fn xyz/a.c
51+
b_fn b.c
52+
c_fn c.c
53+
d_fn /tmp/d.c
54+
e_fn /tmp/e.c
55+
f_fn /f.c
56+
g_fn /g.c
57+
h_fn /h.c
58+
i_fn /i.c
59+
j_fn /j.c
60+
k_fn /k.c
61+
l_fn l.c
62+
m_fn m.c
63+
n_fn n.c
64+
o_fn o.c
65+
p_fn /tmp/xyz/p.c
66+
q_fn /tmp/xyz/q.c
67+
r_fn /r.c
68+
s_fn /s.c
69+
t_fn /t.c
70+
u_fn /tmp/u.c
71+
v_fn /tmp/abc/v.c
72+
w_fn /abc/w.c
73+
# drive-letter0.tags --canonicalize-input
74+
# drive-letter1.tags -C

0 commit comments

Comments
 (0)