Provided by: universal-ctags_5.9.20210829.0-1_amd64 bug

NAME

       ctags-lang-julia - Random notes about tagging Julia source code with Universal-ctags

SYNOPSIS

       ctags ... --languages=+Julia ...
       ctags ... --language-force=Julia ...
       ctags ... --map-Julia=+.jl ...

DESCRIPTION

       This man page gathers random notes about tagging Julia source code.

TAGGING IMPORT AND USING EXPRESSIONS

   Summary
       using X

                                     ┌─────┬────────┬──────┬────────────────────────┐
                                     │name │ kind   │ role │ other       noticeable │
                                     │     │        │      │ fields                 │
                                     ├─────┼────────┼──────┼────────────────────────┤
                                     │X    │ module │ used │ N/A                    │
                                     └─────┴────────┴──────┴────────────────────────┘

       using X: a, b

                                  ┌─────┬─────────┬───────────┬────────────────────────┐
                                  │name │ kind    │ role      │ other       noticeable │
                                  │     │         │           │ fields                 │
                                  ├─────┼─────────┼───────────┼────────────────────────┤
                                  │X    │ module  │ namespace │ N/A                    │
                                  ├─────┼─────────┼───────────┼────────────────────────┤
                                  │a, b │ unknown │ used      │ scope:module:X         │
                                  └─────┴─────────┴───────────┴────────────────────────┘

       import X

                                   ┌─────┬────────┬──────────┬────────────────────────┐
                                   │name │ kind   │ role     │ other       noticeable │
                                   │     │        │          │ fields                 │
                                   ├─────┼────────┼──────────┼────────────────────────┤
                                   │X    │ module │ imported │ N/A                    │
                                   └─────┴────────┴──────────┴────────────────────────┘

       import X.a, Y.b

                                  ┌─────┬─────────┬───────────┬────────────────────────┐
                                  │name │ kind    │ role      │ other       noticeable │
                                  │     │         │           │ fields                 │
                                  ├─────┼─────────┼───────────┼────────────────────────┤
                                  │X, Y │ module  │ namespace │ N/A                    │
                                  ├─────┼─────────┼───────────┼────────────────────────┤
                                  │a    │ unknown │ imported  │ scope:module:X         │
                                  ├─────┼─────────┼───────────┼────────────────────────┤
                                  │b    │ unknown │ imported  │ scope:module:Y         │
                                  └─────┴─────────┴───────────┴────────────────────────┘

       import X: a, b

                                  ┌─────┬─────────┬───────────┬────────────────────────┐
                                  │name │ kind    │ role      │ other       noticeable │
                                  │     │         │           │ fields                 │
                                  ├─────┼─────────┼───────────┼────────────────────────┤
                                  │X    │ module  │ namespace │ N/A                    │
                                  ├─────┼─────────┼───────────┼────────────────────────┤
                                  │a,b  │ unknown │ imported  │ scope:module:X         │
                                  └─────┴─────────┴───────────┴────────────────────────┘

   Examples
       "input.jl"

          using X0

       "output.tags" with "--options=NONE -o - --extras=+r --fields=+rzK input.jl"

          X0      input.jl        /^using X0$/;"  kind:module     roles:used

       --extras=+r (or --extras=+{reference}) option is needed for this tag, since it's a reference tag. This is
       because  module  X  is  not  defined  here.   It  is  defined  in  another file. Enable roles: field with
       --fields=+r is for recording that the module is "used", i.e., loaded by using.

       "input.jl"

          import X1.a, X2.b, X3

       "output.tags" with "--options=NONE -o - --extras=+r --fields=+rzKZ input.jl"

          X1      input.jl        /^import X1.a, X2.b, X3$/;"     kind:module     roles:namespace
          X2      input.jl        /^import X1.a, X2.b, X3$/;"     kind:module     roles:namespace
          X3      input.jl        /^import X1.a, X2.b, X3$/;"     kind:module     roles:imported
          a       input.jl        /^import X1.a, X2.b, X3$/;"     kind:unknown    scope:module:X1 roles:imported
          b       input.jl        /^import X1.a, X2.b, X3$/;"     kind:unknown    scope:module:X2 roles:imported

       Why X1 and X2 have role "namespace", while X3 have role "imported"?  It's because the symbol a in  module
       X1,  and  b  in  module  X2  are  brought  to the current scope, but X1 and X2 themselves are not. We use
       "namespace" role for such modules.

       X3 is different. The symbol X3, together with all exported symbols in X3, is brought  to  current  scope.
       For such modules, we use "imported" or "used" role depending whether they are loaded by import or using.

       Also,  notice  that  a  and  b  have  the  "unknown"  kind. This is because we cannot know whether it's a
       function, constant, or macro, etc.

SEE ALSO

       ctags(1), ctags-client-tools(7)