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