Skip to content

Commit 2af4827

Browse files
committed
readtags: make -C/--canonicalize-input option work with -D/--list-psuedo-tags
Signed-off-by: Masatake YAMATO <[email protected]>
1 parent 3c46b5b commit 2af4827

File tree

5 files changed

+70
-21
lines changed

5 files changed

+70
-21
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 /../../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+
!_TAG_PROC_DUMMY /../../tmp //

Tmain/readtags-canonicalize-input-names.d/run.sh

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ echo2()
2424
run_test()
2525
{
2626
echo2 "# $@"
27-
"${READTAGS}" -F '(list $name "\t" $input "\n")' $2 -t $1 -l
27+
"${READTAGS}" -F '(list $name "\t" $input "\n")' $2 -t $1 $3
2828
}
2929

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
30+
run_test good0.tags -C -l &&
31+
run_test good1.tags --canonicalize-input -l &&
32+
run_test good2.tags -C -l &&
33+
! run_test drive-letter0.tags --canonicalize-input -l &&
34+
! run_test drive-letter1.tags -C -l &&
35+
run_test good-ptags.tags -C -D
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
# good0.tags -C
2-
# good1.tags --canonicalize-input
3-
# good2.tags -C
4-
# drive-letter0.tags --canonicalize-input
1+
# good0.tags -C -l
2+
# good1.tags --canonicalize-input -l
3+
# good2.tags -C -l
4+
# drive-letter0.tags --canonicalize-input -l
55
!_TAG_PROC_CWD must start with '/': C:\tmp
6-
# drive-letter1.tags -C
6+
# drive-letter1.tags -C -l
77
!_TAG_PROC_CWD must start with '/': D:/tmp
8+
# good-ptags.tags -C -D

Tmain/readtags-canonicalize-input-names.d/stdout-expected.txt

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# good0.tags -C
1+
# good0.tags -C -l
22
a_fn xyz/a.c
33
b_fn b.c
44
c_fn c.c
@@ -22,7 +22,7 @@ t_fn /t.c
2222
u_fn /tmp/u.c
2323
v_fn /tmp/abc/v.c
2424
w_fn /abc/w.c
25-
# good1.tags --canonicalize-input
25+
# good1.tags --canonicalize-input -l
2626
a_fn xyz/a.c
2727
b_fn b.c
2828
c_fn c.c
@@ -46,7 +46,7 @@ t_fn /t.c
4646
u_fn /tmp/u.c
4747
v_fn /tmp/abc/v.c
4848
w_fn /abc/w.c
49-
# good2.tags -C
49+
# good2.tags -C -l
5050
a_fn xyz/a.c
5151
b_fn b.c
5252
c_fn c.c
@@ -70,5 +70,18 @@ t_fn /t.c
7070
u_fn /tmp/u.c
7171
v_fn /tmp/abc/v.c
7272
w_fn /abc/w.c
73-
# drive-letter0.tags --canonicalize-input
74-
# drive-letter1.tags -C
73+
# drive-letter0.tags --canonicalize-input -l
74+
# drive-letter1.tags -C -l
75+
# good-ptags.tags -C -D
76+
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
77+
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
78+
!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/
79+
!_TAG_OUTPUT_FILESEP slash /slash or backslash/
80+
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
81+
!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/
82+
!_TAG_PROC_CWD /tmp //
83+
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
84+
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
85+
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
86+
!_TAG_PROGRAM_VERSION 5.9.0 /e08db39a3/
87+
!_TAG_PROC_DUMMY /../../tmp //

extra-cmds/readtags-cmd.c

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ typedef struct sReadOption {
3131

3232
struct canonWorkArea {
3333
struct canonFnameCacheTable *cacheTable;
34+
int ptags;
3435
};
3536

3637
static const char *TagFileName = "tags";
@@ -208,7 +209,9 @@ static void walkTags (tagFile *const file, tagEntry *first_entry,
208209
{
209210
tagEntry *shadow = first_entry;
210211
tagEntry shadowRec;
211-
if (canon)
212+
if (canon
213+
&& (canon->ptags == 0
214+
|| strcmp (first_entry->name, "!_TAG_PROC_CWD") == 0))
212215
{
213216
shadowRec = *first_entry;
214217
shadow = &shadowRec;
@@ -264,7 +267,9 @@ static void walkTags (tagFile *const file, tagEntry *first_entry,
264267
{
265268
tagEntry *shadow = first_entry;
266269
tagEntry shadowRec;
267-
if (canon)
270+
if (canon
271+
&& (canon->ptags == 0
272+
|| strcmp (first_entry->name, "!_TAG_PROC_CWD") == 0))
268273
{
269274
shadow = &shadowRec;
270275
shadowRec = *first_entry;
@@ -481,7 +486,7 @@ static void listTags (int pseudoTags, tagPrintOptions *printOpts,
481486
exit (1);
482487
}
483488

484-
if (pseudoTags == 0 && canon && canon->cacheTable == NULL)
489+
if (canon && canon->cacheTable == NULL)
485490
canon->cacheTable = makeCanonFnameCacheTable (file);
486491

487492
if (printOpts->escaping)
@@ -660,6 +665,7 @@ extern int main (int argc, char **argv)
660665

661666
struct canonWorkArea canonWorkArea = {
662667
.cacheTable = NULL,
668+
.ptags = 0,
663669
};
664670
struct canonWorkArea *canon = NULL;
665671

@@ -673,6 +679,8 @@ extern int main (int argc, char **argv)
673679
const char *const arg = argv [i];
674680
if (ignore_prefix || arg [0] != '-')
675681
{
682+
if (canon)
683+
canon->ptags = 0;
676684
findTag (arg, &readOpts, &printOpts, canon);
677685
actionSupplied = 1;
678686
}
@@ -685,6 +693,8 @@ extern int main (int argc, char **argv)
685693
debugMode++;
686694
else if (strcmp (optname, "list-pseudo-tags") == 0)
687695
{
696+
if (canon)
697+
canon->ptags = 1;
688698
listTags (1, &printOpts, NULL);
689699
actionSupplied = 1;
690700
}
@@ -730,6 +740,8 @@ extern int main (int argc, char **argv)
730740
readOpts.matchOpts |= TAG_PARTIALMATCH;
731741
else if (strcmp (optname, "list") == 0)
732742
{
743+
if (canon)
744+
canon->ptags = 0;
733745
listTags (0, &printOpts, canon);
734746
actionSupplied = 1;
735747
}
@@ -829,7 +841,12 @@ extern int main (int argc, char **argv)
829841
switch (arg [j])
830842
{
831843
case 'd': debugMode++; break;
832-
case 'D': listTags (1, &printOpts, NULL); actionSupplied = 1; break;
844+
case 'D':
845+
if (canon)
846+
canon->ptags = 1;
847+
listTags (1, &printOpts, canon);
848+
actionSupplied = 1;
849+
break;
833850
case 'h': printUsage (stdout, 0); break;
834851
#ifdef READTAGS_DSL
835852
case 'H':
@@ -853,7 +870,12 @@ extern int main (int argc, char **argv)
853870
case 'e': printOpts.extensionFields = 1; break;
854871
case 'i': readOpts.matchOpts |= TAG_IGNORECASE; break;
855872
case 'p': readOpts.matchOpts |= TAG_PARTIALMATCH; break;
856-
case 'l': listTags (0, &printOpts, canon); actionSupplied = 1; break;
873+
case 'l':
874+
if (canon)
875+
canon->ptags = 0;
876+
listTags (0, &printOpts, canon);
877+
actionSupplied = 1;
878+
break;
857879
case 'n': printOpts.lineNumber = 1; break;
858880
case 't':
859881
if (arg [j+1] != '\0')

0 commit comments

Comments
 (0)