annotations: introduce --source
authorAndrea Righi <andrea.righi@canonical.com>
Mon, 5 Dec 2022 17:06:38 +0000 (18:06 +0100)
committerAndrea Righi <andrea.righi@canonical.com>
Mon, 30 Jan 2023 08:12:28 +0000 (09:12 +0100)
Add an option to jump to the definition of a specific config option in
the kernel source code (this requires a prior `make tags` to work).

Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
annotations

index c74dbe745043d6a4a71731a7ed6ae6fa9b8ad0c1..877ee2207e5d37185216b482ffbdfbececb8f787 100755 (executable)
@@ -5,6 +5,7 @@
 
 import sys
 sys.dont_write_bytecode = True
+import os
 import argparse
 import json
 from kconfig.annotations import Annotation, KConfig
@@ -39,6 +40,8 @@ def make_parser():
                         help='Write a specific note to a config option in annotations')
     parser.add_argument('--autocomplete', action='store_true',
                         help='Enable config bash autocomplete: `source <(annotations --autocomplete)`')
+    parser.add_argument('--source', '-t', action='store_true',
+                        help='Jump to a config definition in the kernel source code')
 
     ga = parser.add_argument_group(title='Action').add_mutually_exclusive_group(required=False)
     ga.add_argument('--write', '-w', action='store',
@@ -84,6 +87,18 @@ def do_autocomplete(args):
     res = (c.removeprefix('CONFIG_') for c in a.search_config())
     print('complete -W "{}" annotations'.format(' '.join(res)))
 
+def do_source(args):
+    if args.config is None:
+        arg_fail('error: --source requires --config')
+    if args.config.startswith('CONFIG_'):
+        config = args.config
+    else:
+        config = 'CONFIG_' + args.config
+    if not os.path.exists('tags'):
+        print('tags not found in the current directory, try: `make tags`')
+        exit(1)
+    os.system(f'vim -t {config}')
+
 def do_note(args):
     if args.config is None:
         arg_fail('error: --note requires --config')
@@ -235,6 +250,8 @@ def main():
         do_check(args)
     elif args.autocomplete:
         do_autocomplete(args)
+    elif args.source:
+        do_source(args)
     else:
         do_query(args)