MCPcopy Index your code
hub / github.com/ipython/ipython / _strip_code_before_operator

Method _strip_code_before_operator

IPython/core/completer.py:1208–1248  ·  view source on GitHub ↗
(self, code: str)

Source from the content-addressed store, hash-verified

1206 _ATTR_MATCH_RE = re.compile(r"(.+)\.(\w*)$")
1207
1208 def _strip_code_before_operator(self, code: str) -> str:
1209 o_parens = {"(", "[", "{"}
1210 c_parens = {")", "]", "}"}
1211
1212 # Dry-run tokenize to catch errors
1213 try:
1214 _ = list(tokenize.generate_tokens(iter(code.splitlines()).__next__))
1215 except tokenize.TokenError:
1216 # Try trimming the expression and retrying
1217 trimmed_code = self._trim_expr(code)
1218 try:
1219 _ = list(
1220 tokenize.generate_tokens(iter(trimmed_code.splitlines()).__next__)
1221 )
1222 code = trimmed_code
1223 except tokenize.TokenError:
1224 return code
1225
1226 tokens = _parse_tokens(code)
1227 encountered_operator = False
1228 after_operator = []
1229 nesting_level = 0
1230
1231 for t in tokens:
1232 if t.type == tokenize.OP:
1233 if t.string in o_parens:
1234 nesting_level += 1
1235 elif t.string in c_parens:
1236 nesting_level -= 1
1237 elif t.string != "." and nesting_level == 0:
1238 encountered_operator = True
1239 after_operator = []
1240 continue
1241
1242 if encountered_operator:
1243 after_operator.append(t.string)
1244
1245 if encountered_operator:
1246 return "".join(after_operator)
1247 else:
1248 return code
1249
1250 def _extract_code(self, line: str):
1251 """No-op in Completer, but can be used in subclasses to customise behaviour"""

Callers 1

_attr_matchesMethod · 0.95

Calls 2

_trim_exprMethod · 0.95
_parse_tokensFunction · 0.85

Tested by

no test coverage detected