nvim-treesitter/queries/python/injections.scm
Santos Gallegos af36d31cb7
Python: inject rst in docstrings (#917)
Since hasn't been much discussion around
https://github.com/nvim-treesitter/nvim-treesitter/issues/806.
I'm just porting the injection queries.
I've been using this for a while now.

Things I've noticed:

- Due that rst uses indentation for its syntax,
  everything is treated as an block quote (but it looks good).
  This can be solved by having a predicate like `#dedent!`.
- Looks like there is a bug in how the injected content is extracted

  ```
  def foo():
      """Foo bar"""
  ```

  That would be parsed as a section title for some reason,
  but it's a paragraph.

  In rst it would be a title if the content was:

  ```
  """
  Foo bar
  """
  ```

  If the content is

  ```
  """Foo bar"""
  ```

  That's just a paragraph.

I'll try to debug that from the neovim side next week or so.
2021-02-05 15:01:50 +00:00

24 lines
629 B
Scheme

((call
function: (attribute
object: (identifier) @_re)
arguments: (argument_list (string) @regex))
(#eq? @_re "re")
(#match? @regex "^r.*"))
; Module docstring
((module . (expression_statement (string) @rst))
(#offset! @rst 0 3 0 -3))
; Class docstring
((class_definition
body: (block . (expression_statement (string) @rst)))
(#offset! @rst 0 3 0 -3))
; Function/method docstring
((function_definition
body: (block . (expression_statement (string) @rst)))
(#offset! @rst 0 3 0 -3))
; Attribute docstring
(((expression_statement (assignment)) . (expression_statement (string) @rst))
(#offset! @rst 0 3 0 -3))