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)