ctags-lang-julia(7) Universal-ctags ctags-lang-julia(7)

# [Name](#Name)

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

# [SYNOPSIS](#SYNOPSIS)

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

# [DESCRIPTION](#DESCRIPTION)

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

# [TAGGING import AND using EXPRESSIONS](#TAGGING_import_AND_using_EXPRESSIONS)

## [Summary](#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](#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](#SEE_ALSO)

[ctags(1)](/man/os/universal-ctags/ctags.1), [ctags-client-tools(7)](/man/os/universal-ctags/ctags-client-tools.7)

6.2.1

---

Document: ctags-lang-julia(7) from universal-ctags 6.2.1-r1 (Chainguard OS)
Source: https://github.com/universal-ctags/ctags
