original_docstring: If after a dot, the attribute being completed
docstring: If after a dot, the attribute being completed
docstring_tokens: If after a dot the attribute being completed
code: def current_expression_attribute(
      cursor_offset: int, line: str
  ) -> Optional[LinePart]:
      """If after a dot, the attribute being completed"""
      # TODO replace with more general current_expression_attribute
      for m in _current_expression_attribute_re.finditer(line):
          if m.start(1) <= cursor_offset <= m.end(1):
              return LinePart(m.start(1), m.end(1), m.group(1))
      return None
code_tokens: def current_expression_attribute ( cursor_offset : int , line : str ) -> Optional [ LinePart ] : for m in _current_expression_attribute_re . finditer ( line ) : if m . start ( 1 ) <= cursor_offset <= m . end ( 1 ) : return LinePart ( m . start ( 1 ) , m . end ( 1 ) , m . group ( 1 ) ) return None
short_docstring: If after a dot, the attribute being completed
short_docstring_tokens: If after a dot the attribute being completed
comment: """If after a dot, the attribute being completed"""$SEP$# TODO replace with more general current_expression_attribute