[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/sthagen/bpython-bpython/main/bpython/line.py [Back]  [Original]

"""Extracting and changing portions of the current line

All functions take cursor offset from the beginning of the line and the line of
Python code, and return None, or a tuple of the start index, end index, and the
word."""

import re

from dataclasses import dataclass
from itertools import chain

from .lazyre import LazyReCompile


@dataclass
class LinePart:
    start: int
    stop: int
    word: str


_current_word_re = LazyReCompile(r"(?.+))"""
)


def current_string(cursor_offset: int, line: str) -> LinePart | None:
    """If inside a string of nonzero length, return the string (excluding
    quotes)

    Weaker than bpython.Repl's current_string, because that checks that a
    string is a string based on previous lines in the buffer."""
    for m in _current_string_re.finditer(line):
        i = 3 if m.group(3) else 4
        if m.start(i)  LinePart | None:
    """If in attribute completion, the attribute being completed"""
    # TODO replace with more general current_expression_attribute
    match = current_word(cursor_offset, line)
    if match is None:
        return None
    matches = _current_object_attribute_re.finditer(match.word)
    next(matches)
    for m in matches:
        if m.start(1) + match.start  LinePart | None:
    """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)  0:
            prev_char = line[cursor_offset - 1]
            if (
                on_closing_char
                and prev_char in CHARACTER_PAIR_MAP
                and CHARACTER_PAIR_MAP[prev_char] == cur_char
            ):
                pair_close = True if ch is None else prev_char == ch
    return on_closing_char, pair_close

Web Proxy Viewer  |  New URL  |  Original Page