Files
pebble/src/completer/completer.py

39 lines
1.0 KiB
Python

from typing import Optional
from src.interpreter.environment import Environment
from src.interpreter.interpreter import Interpreter
class Completer:
def __init__(self, interpreter: Interpreter):
self.interpreter: Interpreter = interpreter
self.options: list[str] = []
self.matches: list[str] = []
def complete(self, text: str, state: int) -> Optional[str]:
if state == 0:
self.update_matches(text)
try:
return self.matches[state]
except IndexError:
return None
def update_matches(self, text: str):
self.options = []
env: Optional[Environment] = self.interpreter.env
while env is not None:
self.options.extend(env.values.keys())
env = env.enclosing
self.options = sorted(self.options)
if not text:
self.matches = self.options
else:
self.matches = [
opt
for opt in self.options
if opt.startswith(text)
]