From f11d48e3ed267e2d3c9641698f592885de540c47 Mon Sep 17 00:00:00 2001 From: Masatake YAMATO Date: Sun, 16 Jun 2024 03:06:22 +0900 Subject: [PATCH 1/2] dls: mark as a special form Signed-off-by: Masatake YAMATO --- .../readtags-sorter-cmp_or-sform.d/README.md | 5 ++ .../exit-expected.txt | 1 + .../input.d/bar.c | 2 + .../input.d/decl.h | 1 + .../input.d/foo.c | 1 + .../output.tags | 59 +++++++++++++++++++ Tmain/readtags-sorter-cmp_or-sform.d/run.sh | 25 ++++++++ .../stderr-expected.txt | 0 .../stdout-expected.txt | 4 ++ dsl/sorter.c | 2 +- 10 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 Tmain/readtags-sorter-cmp_or-sform.d/README.md create mode 100644 Tmain/readtags-sorter-cmp_or-sform.d/exit-expected.txt create mode 100644 Tmain/readtags-sorter-cmp_or-sform.d/input.d/bar.c create mode 100644 Tmain/readtags-sorter-cmp_or-sform.d/input.d/decl.h create mode 100644 Tmain/readtags-sorter-cmp_or-sform.d/input.d/foo.c create mode 100644 Tmain/readtags-sorter-cmp_or-sform.d/output.tags create mode 100644 Tmain/readtags-sorter-cmp_or-sform.d/run.sh create mode 100644 Tmain/readtags-sorter-cmp_or-sform.d/stderr-expected.txt create mode 100644 Tmain/readtags-sorter-cmp_or-sform.d/stdout-expected.txt diff --git a/Tmain/readtags-sorter-cmp_or-sform.d/README.md b/Tmain/readtags-sorter-cmp_or-sform.d/README.md new file mode 100644 index 0000000000..cfde11d4f6 --- /dev/null +++ b/Tmain/readtags-sorter-cmp_or-sform.d/README.md @@ -0,0 +1,5 @@ +How to generate output.tags:: + + ctags --kinds-C=+p -o output.tags input.d/foo.c input.d/bar.c input.d/decl.h + +This is taken from https://github.com/universal-ctags/ctags/issues/4015#issuecomment-2157023359 diff --git a/Tmain/readtags-sorter-cmp_or-sform.d/exit-expected.txt b/Tmain/readtags-sorter-cmp_or-sform.d/exit-expected.txt new file mode 100644 index 0000000000..573541ac97 --- /dev/null +++ b/Tmain/readtags-sorter-cmp_or-sform.d/exit-expected.txt @@ -0,0 +1 @@ +0 diff --git a/Tmain/readtags-sorter-cmp_or-sform.d/input.d/bar.c b/Tmain/readtags-sorter-cmp_or-sform.d/input.d/bar.c new file mode 100644 index 0000000000..6009b84c7f --- /dev/null +++ b/Tmain/readtags-sorter-cmp_or-sform.d/input.d/bar.c @@ -0,0 +1,2 @@ +void bar(void); +void bar(void) {} diff --git a/Tmain/readtags-sorter-cmp_or-sform.d/input.d/decl.h b/Tmain/readtags-sorter-cmp_or-sform.d/input.d/decl.h new file mode 100644 index 0000000000..ee83a3dec7 --- /dev/null +++ b/Tmain/readtags-sorter-cmp_or-sform.d/input.d/decl.h @@ -0,0 +1 @@ +void foo(void); diff --git a/Tmain/readtags-sorter-cmp_or-sform.d/input.d/foo.c b/Tmain/readtags-sorter-cmp_or-sform.d/input.d/foo.c new file mode 100644 index 0000000000..a53eae6b57 --- /dev/null +++ b/Tmain/readtags-sorter-cmp_or-sform.d/input.d/foo.c @@ -0,0 +1 @@ +void foo(void) {} diff --git a/Tmain/readtags-sorter-cmp_or-sform.d/output.tags b/Tmain/readtags-sorter-cmp_or-sform.d/output.tags new file mode 100644 index 0000000000..f4191bc4e6 --- /dev/null +++ b/Tmain/readtags-sorter-cmp_or-sform.d/output.tags @@ -0,0 +1,59 @@ +!_TAG_EXTRA_DESCRIPTION anonymous /Include tags for non-named objects like lambda/ +!_TAG_EXTRA_DESCRIPTION fileScope /Include tags of file scope/ +!_TAG_EXTRA_DESCRIPTION pseudo /Include pseudo tags/ +!_TAG_EXTRA_DESCRIPTION subparser /Include tags generated by subparsers/ +!_TAG_FIELD_DESCRIPTION epoch /the last modified time of the input file (only for F\/file kind tag)/ +!_TAG_FIELD_DESCRIPTION file /File-restricted scoping/ +!_TAG_FIELD_DESCRIPTION input /input file/ +!_TAG_FIELD_DESCRIPTION name /tag name/ +!_TAG_FIELD_DESCRIPTION pattern /pattern/ +!_TAG_FIELD_DESCRIPTION typeref /Type and name of a variable or typedef/ +!_TAG_FIELD_DESCRIPTION!C++ name /aliased names/ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_KIND_DESCRIPTION!C d,macro /macro definitions/ +!_TAG_KIND_DESCRIPTION!C e,enumerator /enumerators (values inside an enumeration)/ +!_TAG_KIND_DESCRIPTION!C f,function /function definitions/ +!_TAG_KIND_DESCRIPTION!C g,enum /enumeration names/ +!_TAG_KIND_DESCRIPTION!C h,header /included header files/ +!_TAG_KIND_DESCRIPTION!C m,member /struct, and union members/ +!_TAG_KIND_DESCRIPTION!C p,prototype /function prototypes/ +!_TAG_KIND_DESCRIPTION!C s,struct /structure names/ +!_TAG_KIND_DESCRIPTION!C t,typedef /typedefs/ +!_TAG_KIND_DESCRIPTION!C u,union /union names/ +!_TAG_KIND_DESCRIPTION!C v,variable /variable definitions/ +!_TAG_KIND_DESCRIPTION!C++ c,class /classes/ +!_TAG_KIND_DESCRIPTION!C++ d,macro /macro definitions/ +!_TAG_KIND_DESCRIPTION!C++ e,enumerator /enumerators (values inside an enumeration)/ +!_TAG_KIND_DESCRIPTION!C++ f,function /function definitions/ +!_TAG_KIND_DESCRIPTION!C++ g,enum /enumeration names/ +!_TAG_KIND_DESCRIPTION!C++ h,header /included header files/ +!_TAG_KIND_DESCRIPTION!C++ m,member /class, struct, and union members/ +!_TAG_KIND_DESCRIPTION!C++ n,namespace /namespaces/ +!_TAG_KIND_DESCRIPTION!C++ p,prototype /function prototypes/ +!_TAG_KIND_DESCRIPTION!C++ s,struct /structure names/ +!_TAG_KIND_DESCRIPTION!C++ t,typedef /typedefs/ +!_TAG_KIND_DESCRIPTION!C++ u,union /union names/ +!_TAG_KIND_DESCRIPTION!C++ v,variable /variable definitions/ +!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/ +!_TAG_OUTPUT_FILESEP slash /slash or backslash/ +!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/ +!_TAG_OUTPUT_VERSION 0.0 /current.age/ +!_TAG_PARSER_VERSION!C 0.0 /current.age/ +!_TAG_PARSER_VERSION!C++ 0.0 /current.age/ +!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/ +!_TAG_PROC_CWD /home/yamato/var/ctags-github/Tmain/readtags-sorter-if3-sform.d/ // +!_TAG_PROGRAM_AUTHOR Universal Ctags Team // +!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/ +!_TAG_PROGRAM_URL https://ctags.io/ /official site/ +!_TAG_PROGRAM_VERSION 6.0.0 // +!_TAG_ROLE_DESCRIPTION!C!header local /local header/ +!_TAG_ROLE_DESCRIPTION!C!header system /system header/ +!_TAG_ROLE_DESCRIPTION!C!macro undef /undefined/ +!_TAG_ROLE_DESCRIPTION!C++!header local /local header/ +!_TAG_ROLE_DESCRIPTION!C++!header system /system header/ +!_TAG_ROLE_DESCRIPTION!C++!macro undef /undefined/ +bar input.d/bar.c /^void bar(void) {}$/;" f typeref:typename:void +bar input.d/bar.c /^void bar(void);$/;" p typeref:typename:void file: +foo input.d/decl.h /^void foo(void);$/;" p typeref:typename:void +foo input.d/foo.c /^void foo(void) {}$/;" f typeref:typename:void diff --git a/Tmain/readtags-sorter-cmp_or-sform.d/run.sh b/Tmain/readtags-sorter-cmp_or-sform.d/run.sh new file mode 100644 index 0000000000..031ca9f431 --- /dev/null +++ b/Tmain/readtags-sorter-cmp_or-sform.d/run.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +# Copyright: 2024 Masatake YAMATO +# License: GPL-2 + +READTAGS=$3 + +. ../utils.sh + +#V="valgrind --leak-check=full -v" +V= + +if ! [ -x "${READTAGS}" ]; then + skip "no readtags" +fi + +if ! ( "${READTAGS}" -h | grep -q -e -S ); then + skip "no sorter function in readtags" +fi + +ERRLOG=/tmp/ctags-Tmain-$$ +${READTAGS} -et output.tags -S ' +( (<> $name &name) + (and (eq? $kind "p") (eq? &kind "f") 1) + (and (eq? $kind "f") (eq? &kind "p") -1))' -l diff --git a/Tmain/readtags-sorter-cmp_or-sform.d/stderr-expected.txt b/Tmain/readtags-sorter-cmp_or-sform.d/stderr-expected.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Tmain/readtags-sorter-cmp_or-sform.d/stdout-expected.txt b/Tmain/readtags-sorter-cmp_or-sform.d/stdout-expected.txt new file mode 100644 index 0000000000..ec392cf863 --- /dev/null +++ b/Tmain/readtags-sorter-cmp_or-sform.d/stdout-expected.txt @@ -0,0 +1,4 @@ +bar input.d/bar.c /^void bar(void) {}$/;" kind:f typeref:typename:void +bar input.d/bar.c /^void bar(void);$/;" kind:p file: typeref:typename:void +foo input.d/foo.c /^void foo(void) {}$/;" kind:f typeref:typename:void +foo input.d/decl.h /^void foo(void);$/;" kind:p typeref:typename:void diff --git a/dsl/sorter.c b/dsl/sorter.c index cf6115dd03..3a8cdaeb82 100644 --- a/dsl/sorter.c +++ b/dsl/sorter.c @@ -89,7 +89,7 @@ static DSLProcBind pbinds [] = { .helpstr = "(<> ) -> -1|0|1; compare a b. The types of a and b must be the same." }, { "*-", sorter_proc_flip, NULL, DSL_PATTR_CHECK_ARITY, 1, .helpstr = "(*- ) -> -; filp the result of comparison." }, - { "", sorter_sform_cmp_or, NULL, DSL_PATTR_CHECK_ARITY_OPT, 1, + { "", sorter_sform_cmp_or, NULL, DSL_PATTR_SELF_EVAL|DSL_PATTR_CHECK_ARITY_OPT, 1, .helpstr = "( ...) -> -1|0|1; evaluate arguments left to right till one of thme returns -1 or 1." }, { "&", sorter_alt_entry_ref, NULL, DSL_PATTR_CHECK_ARITY_OPT, 1, From 7c2160cff31d20bcf356fab1fbc4c159f31ba7f5 Mon Sep 17 00:00:00 2001 From: Masatake YAMATO Date: Sun, 16 Jun 2024 03:58:04 +0900 Subject: [PATCH 2/2] dsl: fix a typo in the help message of Signed-off-by: Masatake YAMATO --- dsl/sorter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dsl/sorter.c b/dsl/sorter.c index 3a8cdaeb82..f75cbaafc4 100644 --- a/dsl/sorter.c +++ b/dsl/sorter.c @@ -90,7 +90,7 @@ static DSLProcBind pbinds [] = { { "*-", sorter_proc_flip, NULL, DSL_PATTR_CHECK_ARITY, 1, .helpstr = "(*- ) -> -; filp the result of comparison." }, { "", sorter_sform_cmp_or, NULL, DSL_PATTR_SELF_EVAL|DSL_PATTR_CHECK_ARITY_OPT, 1, - .helpstr = "( ...) -> -1|0|1; evaluate arguments left to right till one of thme returns -1 or 1." }, + .helpstr = "( ...) -> -1|0|1; evaluate arguments left to right till one of them returns -1 or 1." }, { "&", sorter_alt_entry_ref, NULL, DSL_PATTR_CHECK_ARITY_OPT, 1, .helpstr = "(& ) -> |#f\n"