mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] scripts/tags.sh: fix Kconfig indexing when using etags from emacs package
@ 2026-10-27 10:25 Vladimir Gorsunov
  0 siblings, 0 replies; only message in thread
From: Vladimir Gorsunov @ 2026-10-27 10:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-kbuild, Nathan Chancellor, Nicolas Schier, Vladimir Gorsunov

'+' and '?' operators in regular expressions are handled differently
in Universal/Exuberant ctags and emacs. In emacs, + and ? are
operators, and \+ and \? are literals. In Universal, it's the
reverse

Replace \+ with an interval the same way \? is handled already

Signed-off-by: Vladimir Gorsunov <gorsunov@gmail.com>
---

 Hello, my first attempt to contribute something here. If anyone
 could test, you need Emacs >= 31.0, because character classes
 (:alnum: etc.) did not work in etags since 27.0 due to a bug

 scripts/tags.sh | 45 +++++++++++++++++++++++----------------------
 1 file changed, 23 insertions(+), 22 deletions(-)

diff --git a/scripts/tags.sh b/scripts/tags.sh
index 41e38df96984..ce2fa0ef5910 100755
--- a/scripts/tags.sh
+++ b/scripts/tags.sh
@@ -162,6 +162,7 @@ dogtags()
 # the following limitations:
 # - No regex modifiers
 # - Use \{0,1\} instead of \?, because etags expects an unescaped ?
+# - Use \{1,\} instead of \+, because etags expects an unescaped +
 # - \s is not working with etags, use a space or [ \t]
 # - \w works, but does not match underscores in etags
 # - etags regular expressions have to match at the start of a line;
@@ -212,8 +213,8 @@ regex_c=(
 	'/\<DEFINE_\(RT_MUTEX\|MUTEX\|SEMAPHORE\|SPINLOCK\)([[:space:]]*\([[:alnum:]_]*\)/\2/v/'
 	'/\<DEFINE_\(RAW_SPINLOCK\|RWLOCK\|SEQLOCK\)([[:space:]]*\([[:alnum:]_]*\)/\2/v/'
 	'/\<DEFINE_TIMER(\([^,)]*\),/\1/'
-	'/\<DECLARE_\(RWSEM\|COMPLETION\)([[:space:]]*\([[:alnum:]_]\+\)/\2/v/'
-	'/\<DECLARE_BITMAP([[:space:]]*\([[:alnum:]_]\+\)/\1/v/'
+	'/\<DECLARE_\(RWSEM\|COMPLETION\)([[:space:]]*\([[:alnum:]_]\{1,\}\)/\2/v/'
+	'/\<DECLARE_BITMAP([[:space:]]*\([[:alnum:]_]\{1,\}\)/\1/v/'
 	'/\(^\|\s\)\(\|L\|H\)LIST_HEAD([[:space:]]*\([[:alnum:]_]*\)/\3/v/'
 	'/\(^\|\s\)RADIX_TREE([[:space:]]*\([[:alnum:]_]*\)/\2/v/'
 	'/\<DEFINE_PER_CPU([^,]*,[[:space:]]*\([[:alnum:]_]*\)/\1/v/'
@@ -223,31 +224,31 @@ regex_c=(
 	'/\(^\s\)OFFSET([[:space:]]*\([[:alnum:]_]*\)/\2/v/'
 	'/\(^\s\)DEFINE([[:space:]]*\([[:alnum:]_]*\)/\2/v/'
 	'/\<\(DEFINE\|DECLARE\)_HASHTABLE([[:space:]]*\([[:alnum:]_]*\)/\2/v/'
-	'/\<DEFINE_ID\(R\|A\)([[:space:]]*\([[:alnum:]_]\+\)/\2/'
-	'/\<DEFINE_WD_CLASS([[:space:]]*\([[:alnum:]_]\+\)/\1/'
-	'/\<ATOMIC_NOTIFIER_HEAD([[:space:]]*\([[:alnum:]_]\+\)/\1/'
-	'/\<RAW_NOTIFIER_HEAD([[:space:]]*\([[:alnum:]_]\+\)/\1/'
-	'/\<DECLARE_FAULT_ATTR([[:space:]]*\([[:alnum:]_]\+\)/\1/'
-	'/\<BLOCKING_NOTIFIER_HEAD([[:space:]]*\([[:alnum:]_]\+\)/\1/'
-	'/\<DEVICE_ATTR_\(RW\|RO\|WO\)([[:space:]]*\([[:alnum:]_]\+\)/dev_attr_\2/'
-	'/\<DRIVER_ATTR_\(RW\|RO\|WO\)([[:space:]]*\([[:alnum:]_]\+\)/driver_attr_\2/'
-	'/\<\(DEFINE\|DECLARE\)_STATIC_KEY_\(TRUE\|FALSE\)\(\|_RO\)([[:space:]]*\([[:alnum:]_]\+\)/\4/'
+	'/\<DEFINE_ID\(R\|A\)([[:space:]]*\([[:alnum:]_]\{1,\}\)/\2/'
+	'/\<DEFINE_WD_CLASS([[:space:]]*\([[:alnum:]_]\{1,\}\)/\1/'
+	'/\<ATOMIC_NOTIFIER_HEAD([[:space:]]*\([[:alnum:]_]\{1,\}\)/\1/'
+	'/\<RAW_NOTIFIER_HEAD([[:space:]]*\([[:alnum:]_]\{1,\}\)/\1/'
+	'/\<DECLARE_FAULT_ATTR([[:space:]]*\([[:alnum:]_]\{1,\}\)/\1/'
+	'/\<BLOCKING_NOTIFIER_HEAD([[:space:]]*\([[:alnum:]_]\{1,\}\)/\1/'
+	'/\<DEVICE_ATTR_\(RW\|RO\|WO\)([[:space:]]*\([[:alnum:]_]\{1,\}\)/dev_attr_\2/'
+	'/\<DRIVER_ATTR_\(RW\|RO\|WO\)([[:space:]]*\([[:alnum:]_]\{1,\}\)/driver_attr_\2/'
+	'/\<\(DEFINE\|DECLARE\)_STATIC_KEY_\(TRUE\|FALSE\)\(\|_RO\)([[:space:]]*\([[:alnum:]_]\{1,\}\)/\4/'
 	'/^SEQCOUNT_LOCKTYPE(\([^,]*\),[[:space:]]*\([^,]*\),[^)]*)/seqcount_\2_t/'
 	'/^SEQCOUNT_LOCKTYPE(\([^,]*\),[[:space:]]*\([^,]*\),[^)]*)/seqcount_\2_init/'
-	'/^\<DECLARE_IDTENTRY[[:alnum:]_]*([^,)]*,[[:space:]]*\([[:alnum:]_]\+\)/\1/'
-	'/^\<DEFINE_IDTENTRY[[:alnum:]_]*([[:space:]]*\([[:alnum:]_]\+\)/\1/'
-	'/^\<DEFINE_FREE(\([[:alnum:]_]\+\)/cleanup_\1/'
-	'/^\<DEFINE_CLASS(\([[:alnum:]_]\+\)/class_\1/'
-	'/^\<EXTEND_CLASS(\([[:alnum:]_]\+\),[[:space:]]*\([[:alnum:]_]\+\)/class_\1\2/'
-	'/^\<DEFINE_GUARD(\([[:alnum:]_]\+\)/class_\1/'
-	'/^\<DEFINE_GUARD_COND(\([[:alnum:]_]\+\),[[:space:]]*\([[:alnum:]_]\+\)/class_\1\2/'
-	'/^\<DEFINE_LOCK_GUARD_[[:digit:]](\([[:alnum:]_]\+\)/class_\1/'
-	'/^\<DEFINE_LOCK_GUARD_[[:digit:]]_COND(\([[:alnum:]_]\+\),[[:space:]]*\([[:alnum:]_]\+\)/class_\1\2/'
+	'/^\<DECLARE_IDTENTRY[[:alnum:]_]*([^,)]*,[[:space:]]*\([[:alnum:]_]\{1,\}\)/\1/'
+	'/^\<DEFINE_IDTENTRY[[:alnum:]_]*([[:space:]]*\([[:alnum:]_]\{1,\}\)/\1/'
+	'/^\<DEFINE_FREE(\([[:alnum:]_]\{1,\}\)/cleanup_\1/'
+	'/^\<DEFINE_CLASS(\([[:alnum:]_]\{1,\}\)/class_\1/'
+	'/^\<EXTEND_CLASS(\([[:alnum:]_]\{1,\}\),[[:space:]]*\([[:alnum:]_]\{1,\}\)/class_\1\2/'
+	'/^\<DEFINE_GUARD(\([[:alnum:]_]\{1,\}\)/class_\1/'
+	'/^\<DEFINE_GUARD_COND(\([[:alnum:]_]\{1,\}\),[[:space:]]*\([[:alnum:]_]\{1,\}\)/class_\1\2/'
+	'/^\<DEFINE_LOCK_GUARD_[[:digit:]](\([[:alnum:]_]\{1,\}\)/class_\1/'
+	'/^\<DEFINE_LOCK_GUARD_[[:digit:]]_COND(\([[:alnum:]_]\{1,\}\),[[:space:]]*\([[:alnum:]_]\{1,\}\)/class_\1\2/'
 	'/^context_lock_struct(\([^,)]*\)[^)]*)/struct \1/'
 )
 regex_kconfig=(
-	'/^[[:blank:]]*\(menu\|\)config[[:blank:]]\+\([[:alnum:]_]\+\)/\2/'
-	'/^[[:blank:]]*\(menu\|\)config[[:blank:]]\+\([[:alnum:]_]\+\)/CONFIG_\2/'
+	'/^[[:blank:]]*\(menu\|\)config[[:blank:]]\{1,\}\([[:alnum:]_]\{1,\}\)/\2/'
+	'/^[[:blank:]]*\(menu\|\)config[[:blank:]]\{1,\}\([[:alnum:]_]\{1,\}\)/CONFIG_\2/'
 )
 setup_regex()
 {

base-commit: 83deedcf85af511dc120b3cd8ee597d211cdf2fb
-- 
2.56.0


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-10-27 10:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-27 10:25 [PATCH] scripts/tags.sh: fix Kconfig indexing when using etags from emacs package Vladimir Gorsunov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®