xref: /Universal-ctags/man/ctags-lang-python.7.rst.in (revision 4a69cb14a715fc7984d5850712cb527c0bc10d7e)
1c396dfafSMasatake YAMATO.. _ctags-lang-python(7):
2c396dfafSMasatake YAMATO
3c396dfafSMasatake YAMATO==============================================================
4c396dfafSMasatake YAMATOctags-lang-python
5c396dfafSMasatake YAMATO==============================================================
6c396dfafSMasatake YAMATO-------------------------------------------------------------------
7dccba5efSHiroo HAYASHIRandom notes about tagging python source code with Universal Ctags
8c396dfafSMasatake YAMATO-------------------------------------------------------------------
95911c7c6SAlberto Fanjul:Version: @VERSION@
10dccba5efSHiroo HAYASHI:Manual group: Universal Ctags
11c396dfafSMasatake YAMATO:Manual section: 7
12c396dfafSMasatake YAMATO
13c396dfafSMasatake YAMATOSYNOPSIS
14c396dfafSMasatake YAMATO--------
15c396dfafSMasatake YAMATO|	**@CTAGS_NAME_EXECUTABLE@** ... --languages=+Python ...
16c396dfafSMasatake YAMATO|	**@CTAGS_NAME_EXECUTABLE@** ... --language-force=Python ...
17c396dfafSMasatake YAMATO|	**@CTAGS_NAME_EXECUTABLE@** ... --map-Python=+.py ...
18c396dfafSMasatake YAMATO
19c396dfafSMasatake YAMATODESCRIPTION
20c396dfafSMasatake YAMATO-----------
21c396dfafSMasatake YAMATOThis man page gathers random notes about tagging python source code.
22c396dfafSMasatake YAMATO
2362a25b0eSMasatake YAMATOTAGGING ``import`` STATEMENTS
2462a25b0eSMasatake YAMATO-----------------------------
25c396dfafSMasatake YAMATO
2662a25b0eSMasatake YAMATOSummary
2762a25b0eSMasatake YAMATO~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
28c396dfafSMasatake YAMATO
2962a25b0eSMasatake YAMATO`import X`
3062a25b0eSMasatake YAMATO
3162a25b0eSMasatake YAMATO	==== ========== ================== ===================
3262a25b0eSMasatake YAMATO	name kind       role               other noticeable fields
3362a25b0eSMasatake YAMATO	==== ========== ================== ===================
3462a25b0eSMasatake YAMATO	X    module     imported           N/A
3562a25b0eSMasatake YAMATO	==== ========== ================== ===================
3662a25b0eSMasatake YAMATO
3762a25b0eSMasatake YAMATO`import X as Y`
3862a25b0eSMasatake YAMATO
3962a25b0eSMasatake YAMATO	==== ========== ================== ===================
4062a25b0eSMasatake YAMATO	name kind       role               other noticeable fields
4162a25b0eSMasatake YAMATO	==== ========== ================== ===================
4262a25b0eSMasatake YAMATO	X    module     indirectlyImported N/A
4362a25b0eSMasatake YAMATO	Y    namespace  definition         nameref:module:X
4462a25b0eSMasatake YAMATO	==== ========== ================== ===================
4562a25b0eSMasatake YAMATO
4662a25b0eSMasatake YAMATO`from X import *`
4762a25b0eSMasatake YAMATO
4862a25b0eSMasatake YAMATO	==== ========== ================== ===================
4962a25b0eSMasatake YAMATO	name kind       role               other noticeable fields
5062a25b0eSMasatake YAMATO	==== ========== ================== ===================
5162a25b0eSMasatake YAMATO	`X`  module     namespace          N/A
5262a25b0eSMasatake YAMATO	==== ========== ================== ===================
5362a25b0eSMasatake YAMATO
5462a25b0eSMasatake YAMATO`from X import Y`
5562a25b0eSMasatake YAMATO
5662a25b0eSMasatake YAMATO	==== ========== ================== ===================
5762a25b0eSMasatake YAMATO	name kind       role               other noticeable fields
5862a25b0eSMasatake YAMATO	==== ========== ================== ===================
5962a25b0eSMasatake YAMATO	`X`  module     namespace          N/A
6062a25b0eSMasatake YAMATO	`Y`  unknown    imported           scope:module:`X`
6162a25b0eSMasatake YAMATO	==== ========== ================== ===================
6262a25b0eSMasatake YAMATO
6362a25b0eSMasatake YAMATO`from X import Y as Z`
6462a25b0eSMasatake YAMATO
6562a25b0eSMasatake YAMATO	==== ========== ================== ===================
6662a25b0eSMasatake YAMATO	name kind       role               other noticeable fields
6762a25b0eSMasatake YAMATO	==== ========== ================== ===================
6862a25b0eSMasatake YAMATO	`X`  module     namespace          N/A
6962a25b0eSMasatake YAMATO	`Y`  unknown    indirectlyImported scope:module:`X`
70*4a69cb14SMasatake YAMATO	`Z`  unknown    definition         nameref:unknown:`Y`
7162a25b0eSMasatake YAMATO	==== ========== ================== ===================
7262a25b0eSMasatake YAMATO
7362a25b0eSMasatake YAMATO..
7462a25b0eSMasatake YAMATO	===================== ==== ========== ================== ===================
7562a25b0eSMasatake YAMATO	input code            name kind       role               other noticeable fields
7662a25b0eSMasatake YAMATO	===================== ==== ========== ================== ===================
7762a25b0eSMasatake YAMATO	import X              X    module     imported
7862a25b0eSMasatake YAMATO	import X as Y         X    module     indirectlyImported
7962a25b0eSMasatake YAMATO	import X as Y         Y    namespace  definition         nameref:module:X
8062a25b0eSMasatake YAMATO	from X import *       X    module     namespace
8162a25b0eSMasatake YAMATO	from X import Y       X    module     namespace
8262a25b0eSMasatake YAMATO	from X import Y       Y    unknown    imported           scope:module:X
8362a25b0eSMasatake YAMATO	from X import Y as Z  X    module     namespace
8462a25b0eSMasatake YAMATO	from X import Y as Z  Y    unknown    indirectlyImported scope:module:X
85*4a69cb14SMasatake YAMATO	from X import Y as Z  Z    unknown    definition         nameref:unknown:Y
8662a25b0eSMasatake YAMATO	===================== ==== ========== ================== ===================
8762a25b0eSMasatake YAMATO
8862a25b0eSMasatake YAMATO..  a table having merged cells cannot be converted to man page
8962a25b0eSMasatake YAMATO..
9062a25b0eSMasatake YAMATO	+--------------------+------------------------------------------------------+
9162a25b0eSMasatake YAMATO	|input code          |output tags                                           |
9262a25b0eSMasatake YAMATO	|                    +----+----------+------------------+-------------------+
9362a25b0eSMasatake YAMATO	|                    |name| kind     |role              |other noticeable fields  |
9462a25b0eSMasatake YAMATO	+====================+====+==========+==================+===================+
9562a25b0eSMasatake YAMATO	|import X            |X   | module   |imported          |                   |
9662a25b0eSMasatake YAMATO	+--------------------+----+----------+------------------+-------------------+
9762a25b0eSMasatake YAMATO	|import X as Y       |X   | module   |indirectlyImported|                   |
9862a25b0eSMasatake YAMATO	|                    +----+----------+------------------+-------------------+
9962a25b0eSMasatake YAMATO	|                    |Y   | namespace|definition        |nameref:module:X   |
10062a25b0eSMasatake YAMATO	+--------------------+----+----------+------------------+-------------------+
10162a25b0eSMasatake YAMATO	|from X import *     |X   | module   |namespace         |                   |
10262a25b0eSMasatake YAMATO	+--------------------+----+----------+------------------+-------------------+
10362a25b0eSMasatake YAMATO	|from X import Y     |X   | module   |namespace         |                   |
10462a25b0eSMasatake YAMATO	|                    +----+----------+------------------+-------------------+
10562a25b0eSMasatake YAMATO	|                    |Y   | unknown  |imported          |scope:module:X     |
10662a25b0eSMasatake YAMATO	+--------------------+----+----------+------------------+-------------------+
10762a25b0eSMasatake YAMATO	|from X import Y as Z|X   | module   |namespace         |                   |
10862a25b0eSMasatake YAMATO	|                    +----+----------+------------------+-------------------+
10962a25b0eSMasatake YAMATO	|                    |Y   | unknown  |indirectlyImported|scope:module:X     |
11062a25b0eSMasatake YAMATO	|                    +----+----------+------------------+-------------------+
11162a25b0eSMasatake YAMATO	|                    |Z   | unknown  |definition        |nameref:unknown:Y  |
11262a25b0eSMasatake YAMATO	+--------------------+----+----------+------------------+-------------------+
11362a25b0eSMasatake YAMATO
11462a25b0eSMasatake YAMATOExamples
11562a25b0eSMasatake YAMATO~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
116c396dfafSMasatake YAMATO"input.py"
11778f2d350SMasatake YAMATO
118c396dfafSMasatake YAMATO.. code-block:: Python
119c396dfafSMasatake YAMATO
120c396dfafSMasatake YAMATO   import X0
121c396dfafSMasatake YAMATO
122c396dfafSMasatake YAMATO"output.tags"
123c396dfafSMasatake YAMATOwith "--options=NONE -o - --extras=+r --fields=+rzK input.py"
12478f2d350SMasatake YAMATO
125c396dfafSMasatake YAMATO.. code-block:: tags
126c396dfafSMasatake YAMATO
127c396dfafSMasatake YAMATO	X0	input.py	/^import X0$/;"	kind:module	roles:imported
128c396dfafSMasatake YAMATO
129c396dfafSMasatake YAMATOA tag for an imported module has ``module`` kind with ``imported`` role.  The
130c396dfafSMasatake YAMATOmodule is not defined here; it is defined in another file. So the tag for the
131c396dfafSMasatake YAMATOimported module is a reference tag; specify ``--extras=+r`` (or
132c396dfafSMasatake YAMATO``--extras=+{reference}``) option for tagging it.  "roles:" field enabled with
133c396dfafSMasatake YAMATO``--fields=+r`` is for recording the module is "imported" to the tag file.
134c396dfafSMasatake YAMATO
135c396dfafSMasatake YAMATO"input.py"
13678f2d350SMasatake YAMATO
137c396dfafSMasatake YAMATO.. code-block:: Python
138c396dfafSMasatake YAMATO
139c396dfafSMasatake YAMATO	import X1 as Y1
140c396dfafSMasatake YAMATO
141c396dfafSMasatake YAMATO"output.tags"
14278f2d350SMasatake YAMATOwith "--options=NONE -o - --extras=+r --fields=+rzK --fields-Python=+{nameref} input.py"
14378f2d350SMasatake YAMATO
14478f2d350SMasatake YAMATO.. code-block:: tags
145c396dfafSMasatake YAMATO
146c396dfafSMasatake YAMATO	X1	input.py	/^import X1 as Y1$/;"	kind:module	roles:indirectlyImported
147c396dfafSMasatake YAMATO	Y1	input.py	/^import X1 as Y1$/;"	kind:namespace	roles:def	nameref:module:X1
148c396dfafSMasatake YAMATO
149c396dfafSMasatake YAMATO"Y1" introduces a new name and is defined here. So "Y1" is tagged as a
150c396dfafSMasatake YAMATOdefinition tag.  "X1" is imported in a way that its name cannot be used
151c396dfafSMasatake YAMATOin this source file. For letting client tools know that the name cannot be used,
152c396dfafSMasatake YAMATO``indirectlyImported`` role is assigned for "X1".  "Y1" is the name for
153c396dfafSMasatake YAMATOaccessing objects defined in the module imported via "X1".  For recording this
154c396dfafSMasatake YAMATOrelationship, ``nameref:`` field is attached to the tag of "Y1".  Instead of
155c396dfafSMasatake YAMATO``module`` kind, ``namespace`` kind is assigned to "Y1" because "Y1" itself
156c396dfafSMasatake YAMATOisn't a module.
157c396dfafSMasatake YAMATO
158c396dfafSMasatake YAMATO"input.py"
15978f2d350SMasatake YAMATO
160c396dfafSMasatake YAMATO.. code-block:: Python
161c396dfafSMasatake YAMATO
162c396dfafSMasatake YAMATO	from X2 import *
163c396dfafSMasatake YAMATO
164c396dfafSMasatake YAMATO"output.tags"
165c396dfafSMasatake YAMATOwith "--options=NONE -o - --extras=+r --fields=+rzK input.py"
166c396dfafSMasatake YAMATO
16778f2d350SMasatake YAMATO.. code-block:: tags
16878f2d350SMasatake YAMATO
16978f2d350SMasatake YAMATO	X2	input.py	/^from X2 import *$/;"	kind:module	roles:namespace
170c396dfafSMasatake YAMATO
171c396dfafSMasatake YAMATOThe module is not defined here; it is defined in another file. So the tag for
172c396dfafSMasatake YAMATOthe imported module is a reference tag. Unlike "X0" in "import X0", "X2" may not
173c396dfafSMasatake YAMATObe used because the names defined in "X2" can be used in this source file. To represent
174c396dfafSMasatake YAMATOthe difference ``namespace`` role is attached to "X2" instead of ``imported``.
175c396dfafSMasatake YAMATO
176c396dfafSMasatake YAMATO"input.py"
17778f2d350SMasatake YAMATO
178c396dfafSMasatake YAMATO.. code-block:: Python
179c396dfafSMasatake YAMATO
180c396dfafSMasatake YAMATO	from X3 import Y3
181c396dfafSMasatake YAMATO
182c396dfafSMasatake YAMATO"output.tags"
183c396dfafSMasatake YAMATOwith "--options=NONE -o - --extras=+r --fields=+rzKZ input.py"
18478f2d350SMasatake YAMATO
18578f2d350SMasatake YAMATO.. code-block:: tags
186c396dfafSMasatake YAMATO
187c396dfafSMasatake YAMATO	X3	input.py	/^from X3 import Y3$/;"	kind:module	roles:namespace
188c396dfafSMasatake YAMATO	Y3	input.py	/^from X3 import Y3$/;"	kind:unknown	scope:module:X3	roles:imported
189c396dfafSMasatake YAMATO
190c396dfafSMasatake YAMATO"Y3" is a name for a language object defined in "X3" module. "scope:module:X3"
191c396dfafSMasatake YAMATOattached to "Y3" represents this relation between "Y3" and "X3". ctags
192c396dfafSMasatake YAMATOassigns ``unknown`` kind to "Y3" because ctags cannot know whether "Y3" is a
193c396dfafSMasatake YAMATOclass, a variable, or a function from the input file.
194c396dfafSMasatake YAMATO
195c396dfafSMasatake YAMATO"input.py"
19678f2d350SMasatake YAMATO
197c396dfafSMasatake YAMATO.. code-block:: Python
198c396dfafSMasatake YAMATO
199c396dfafSMasatake YAMATO	from X4 import Y4 as Z4
200c396dfafSMasatake YAMATO
201c396dfafSMasatake YAMATO"output.tags"
202c396dfafSMasatake YAMATOwith "--options=NONE -o - --extras=+r --fields=+rzKZ input.py"
20378f2d350SMasatake YAMATO
20478f2d350SMasatake YAMATO.. code-block:: tags
205c396dfafSMasatake YAMATO
206c396dfafSMasatake YAMATO	X4	input.py	/^from X4 import Y4 as Z4$/;"	kind:module	roles:namespace
207c396dfafSMasatake YAMATO	Y4	input.py	/^from X4 import Y4 as Z4$/;"	kind:unknown	scope:module:X4	roles:indirectlyImported
208c396dfafSMasatake YAMATO	Z4	input.py	/^from X4 import Y4 as Z4$/;"	kind:unknown	roles:def	nameref:unknown:Y4
209c396dfafSMasatake YAMATO
210c396dfafSMasatake YAMATO"Y4" is similar to "Y3" of "from X3 import Y3" but the name cannot be used here.
211c396dfafSMasatake YAMATO``indirectlyImported`` role assigned to "Y4" representing this. "Z4" is the name for
212c396dfafSMasatake YAMATOaccessing the language object named in "Y4" in "X4" module. "nameref:unknown:Y4"
213c396dfafSMasatake YAMATOattached to "Z4" and "scope:module:X4" attached to "Y4" represent the relations.
214c396dfafSMasatake YAMATO
21562a25b0eSMasatake YAMATOLAMBDA EXPRESSION AND TYPE HINT
21662a25b0eSMasatake YAMATO-------------------------------
21762a25b0eSMasatake YAMATO
21862a25b0eSMasatake YAMATOSummary
219a71454b5SMasatake YAMATO~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
220a71454b5SMasatake YAMATO
22162a25b0eSMasatake YAMATO`id = lambda var0: var0`
22262a25b0eSMasatake YAMATO
22362a25b0eSMasatake YAMATO	=========== ========== ================== ===================
22462a25b0eSMasatake YAMATO	name        kind       role               other noticeable fields
22562a25b0eSMasatake YAMATO	=========== ========== ================== ===================
22662a25b0eSMasatake YAMATO	`id`        function   definition         signature:(`var0`)
22762a25b0eSMasatake YAMATO	=========== ========== ================== ===================
22862a25b0eSMasatake YAMATO
22962a25b0eSMasatake YAMATO`id_t: Callable[[int], int] = lambda var1: var1`
23062a25b0eSMasatake YAMATO
23162a25b0eSMasatake YAMATO	=========== ========== ================== ===================
23262a25b0eSMasatake YAMATO	name        kind       role               other noticeable fields
23362a25b0eSMasatake YAMATO	=========== ========== ================== ===================
23462a25b0eSMasatake YAMATO	`id_t`      variable   definition         typeref:typename:`Callable[[int], int]` nameref:function:anonFuncN
23562a25b0eSMasatake YAMATO	anonFuncN   function   definition         signature:(`var1`)
23662a25b0eSMasatake YAMATO	=========== ========== ================== ===================
23762a25b0eSMasatake YAMATO
23862a25b0eSMasatake YAMATOExamples
23962a25b0eSMasatake YAMATO~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
240a71454b5SMasatake YAMATO"input.py"
24178f2d350SMasatake YAMATO
242a71454b5SMasatake YAMATO.. code-block:: Python
243a71454b5SMasatake YAMATO
244a71454b5SMasatake YAMATO	from typing import Callable
245a71454b5SMasatake YAMATO	id = lambda var0: var0
246a71454b5SMasatake YAMATO	id_t: Callable[[int], int] = lambda var1: var1
247a71454b5SMasatake YAMATO
248a71454b5SMasatake YAMATO"output.tags"
24978f2d350SMasatake YAMATOwith "--options=NONE -o - --sort=no --fields=+KS --fields-Python=+{nameref} --extras=+{anonymous} input.py"
25078f2d350SMasatake YAMATO
25178f2d350SMasatake YAMATO.. code-block:: tags
252a71454b5SMasatake YAMATO
253a71454b5SMasatake YAMATO	id	input.py	/^id = lambda var0: var0$/;"	function	signature:(var0)
254a71454b5SMasatake YAMATO	id_t	input.py	/^id_t: Callable[[int], int] = lambda var1: var1$/;"\
255a71454b5SMasatake YAMATO		variable	typeref:typename:Callable[[int], int]	nameref:function:anonFunc84011d2c0101
256a71454b5SMasatake YAMATO	anonFunc84011d2c0101	input.py	/^id_t: Callable[[int], int] = lambda var1: var1$/;"\
257a71454b5SMasatake YAMATO		function	signature:(var1)
258a71454b5SMasatake YAMATO
259a71454b5SMasatake YAMATOIf a variable ("id") with no type hint is initialized with a lambda expression,
260a71454b5SMasatake YAMATOctags assigns ``function`` kind for the tag of "id".
261a71454b5SMasatake YAMATO
262a71454b5SMasatake YAMATOIf a variable ("id_t") with a type hint is initialized with a lambda expression,
263a71454b5SMasatake YAMATOctags assigns ``variable`` kind for the tag of "id_t" with ``typeref:`` and
264a71454b5SMasatake YAMATO``nameref:`` fields. ctags fills ``typeref:`` field with the value of the type
265a71454b5SMasatake YAMATOhint. The way of filling ``nameref:`` is a bit complicated.
266a71454b5SMasatake YAMATO
267a71454b5SMasatake YAMATOFor the lambda expression used in initializing the type-hint'ed variable, ctags
268a71454b5SMasatake YAMATOcreates ``anonymous`` extra tag ("anonFunc84011d2c0101"). ctags fills the
269a71454b5SMasatake YAMATO``nameref:`` field of "id_t" with the name of ``anonymous`` extra tag:
270a71454b5SMasatake YAMATO"nameref:function:anonFunc84011d2c0101".
271a71454b5SMasatake YAMATO
272a71454b5SMasatake YAMATOYou may think why ctags does so complicated, and why ctags doesn't emit
273a71454b5SMasatake YAMATOfollowing tags output for the input::
274a71454b5SMasatake YAMATO
275a71454b5SMasatake YAMATO	id	input.py	/^id = \\$/;"	function	signature:(var0)
276a71454b5SMasatake YAMATO	id_t	input.py	/^id_t: \\$/;"	function	typeref:typename:Callable[[int], int]	signature:(var1)
277a71454b5SMasatake YAMATO
278a71454b5SMasatake YAMATOThere is a reason. The other languages of ctags obey the following rule: ctags fills
279a71454b5SMasatake YAMATO``typeref:`` field for a tag of a callable object (like function) with the type
280a71454b5SMasatake YAMATOof its return value. If we consider "id_t" is a function, its ``typeref:`` field
281a71454b5SMasatake YAMATOshould have "typename:int". However, for filling ``typeref:`` with "typename:int",
282a71454b5SMasatake YAMATOctags has to analyze "Callable[[int], int]" deeper. We don't want to do so.
283a71454b5SMasatake YAMATO
284c396dfafSMasatake YAMATOSEE ALSO
285c396dfafSMasatake YAMATO--------
28668e000ffSMasatake YAMATOctags(1), ctags-client-tools(7), ctags-lang-iPythonCell(7)
287