Skip to content

Commit 8ee7257

Browse files
committed
jedi: fix completion of builtin types
Completions for `x.` where `x` is an instance of a builtin type was broken because of filtering on the `builtins` modules. This extends the filtering to allow attributes available on common builtin types in Pybricks MicroPython.
1 parent 236bda5 commit 8ee7257

File tree

3 files changed

+291
-84
lines changed

3 files changed

+291
-84
lines changed

jedi/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
## Unreleased
66

7+
### Fixed
8+
- Fixed code completion for builtin types.
9+
710
## 1.6.0 - 2022-12-09
811

912
### Changed

jedi/src/pybricks_jedi/__init__.py

Lines changed: 146 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -31,88 +31,147 @@
3131

3232
# Subset of Python builtins included in Pybricks MicroPython.
3333
PYBRICKS_BUILTINS = {
34-
"abs",
35-
"all",
36-
"any",
37-
"ArithmeticError",
38-
"AssertionError",
39-
"AttributeError",
40-
"BaseException",
41-
"bin",
42-
"bool",
43-
"bytearray",
44-
"bytes",
45-
"callable",
46-
"chr",
47-
"classmethod",
48-
"complex",
49-
"dict",
50-
"dir",
51-
"divmod",
52-
"enumerate",
53-
"EOFError",
54-
"eval",
55-
"Exception",
56-
"exec",
57-
"float",
58-
"GeneratorExit",
59-
"getattr",
60-
"globals",
61-
"hasattr",
62-
"hash",
63-
"help",
64-
"hex",
65-
"id",
66-
"ImportError",
67-
"IndentationError",
68-
"IndexError",
69-
"input",
70-
"int",
71-
"isinstance",
72-
"issubclass",
73-
"iter",
74-
"KeyboardInterrupt",
75-
"KeyError",
76-
"len",
77-
"list",
78-
"locals",
79-
"LookupError",
80-
"map",
81-
"max",
82-
"MemoryError",
83-
"min",
84-
"NameError",
85-
"next",
86-
"NotImplementedError",
87-
"object",
88-
"oct",
89-
"ord",
90-
"OSError",
91-
"OverflowError",
92-
"pow",
93-
"print",
94-
"range",
95-
"repr",
96-
"reversed",
97-
"round",
98-
"RuntimeError",
99-
"set",
100-
"setattr",
101-
"slice",
102-
"sorted",
103-
"staticmethod",
104-
"StopIteration",
105-
"str",
106-
"sum",
107-
"super",
108-
"SyntaxError",
109-
"SystemExit",
110-
"tuple",
111-
"type",
112-
"TypeError",
113-
"ValueError",
114-
"ZeroDivisionError",
115-
"zip",
34+
"builtins.abs",
35+
"builtins.all",
36+
"builtins.any",
37+
"builtins.ArithmeticError",
38+
"builtins.AssertionError",
39+
"builtins.AttributeError",
40+
"builtins.BaseException",
41+
"builtins.bin",
42+
"builtins.bool",
43+
"builtins.bytearray",
44+
"builtins.bytes",
45+
"builtins.callable",
46+
"builtins.chr",
47+
"builtins.classmethod",
48+
"builtins.complex",
49+
"builtins.dict",
50+
"builtins.dir",
51+
"builtins.divmod",
52+
"builtins.enumerate",
53+
"builtins.EOFError",
54+
"builtins.eval",
55+
"builtins.Exception",
56+
"builtins.exec",
57+
"builtins.float",
58+
"builtins.GeneratorExit",
59+
"builtins.getattr",
60+
"builtins.globals",
61+
"builtins.hasattr",
62+
"builtins.hash",
63+
"builtins.help",
64+
"builtins.hex",
65+
"builtins.id",
66+
"builtins.ImportError",
67+
"builtins.IndentationError",
68+
"builtins.IndexError",
69+
"builtins.input",
70+
"builtins.int",
71+
"builtins.isinstance",
72+
"builtins.issubclass",
73+
"builtins.iter",
74+
"builtins.KeyboardInterrupt",
75+
"builtins.KeyError",
76+
"builtins.len",
77+
"builtins.list",
78+
"builtins.locals",
79+
"builtins.LookupError",
80+
"builtins.map",
81+
"builtins.max",
82+
"builtins.MemoryError",
83+
"builtins.min",
84+
"builtins.NameError",
85+
"builtins.next",
86+
"builtins.NotImplementedError",
87+
"builtins.object",
88+
"builtins.oct",
89+
"builtins.ord",
90+
"builtins.OSError",
91+
"builtins.OverflowError",
92+
"builtins.pow",
93+
"builtins.print",
94+
"builtins.range",
95+
"builtins.repr",
96+
"builtins.reversed",
97+
"builtins.round",
98+
"builtins.RuntimeError",
99+
"builtins.set",
100+
"builtins.setattr",
101+
"builtins.slice",
102+
"builtins.sorted",
103+
"builtins.staticmethod",
104+
"builtins.StopIteration",
105+
"builtins.str",
106+
"builtins.sum",
107+
"builtins.super",
108+
"builtins.SyntaxError",
109+
"builtins.SystemExit",
110+
"builtins.tuple",
111+
"builtins.type",
112+
"builtins.TypeError",
113+
"builtins.ValueError",
114+
"builtins.ZeroDivisionError",
115+
"builtins.zip",
116+
"builtins.bytearray.append",
117+
"builtins.bytearray.extend",
118+
"builtins.dict.clear",
119+
"builtins.dict.copy",
120+
"builtins.dict.fromkeys",
121+
"builtins.dict.get",
122+
"builtins.dict.items",
123+
"builtins.dict.keys",
124+
"builtins.dict.pop",
125+
"builtins.dict.popitem",
126+
"builtins.dict.setdefault",
127+
"builtins.dict.update",
128+
"builtins.dict.values",
129+
"builtins.int.from_bytes",
130+
"builtins.int.to_bytes",
131+
"builtins.list.append",
132+
"builtins.list.clear",
133+
"builtins.list.copy",
134+
"builtins.list.count",
135+
"builtins.list.extend",
136+
"builtins.list.index",
137+
"builtins.list.insert",
138+
"builtins.list.pop",
139+
"builtins.list.remove",
140+
"builtins.list.reverse",
141+
"builtins.list.sort",
142+
"builtins.str.count",
143+
"builtins.str.endswith",
144+
"builtins.str.find",
145+
"builtins.str.format",
146+
"builtins.str.index",
147+
"builtins.str.isalpha",
148+
"builtins.str.isdigit",
149+
"builtins.str.islower",
150+
"builtins.str.isspace",
151+
"builtins.str.isupper",
152+
"builtins.str.join",
153+
"builtins.str.lower",
154+
"builtins.str.lstrip",
155+
"builtins.str.replace",
156+
"builtins.str.rfind",
157+
"builtins.str.rindex",
158+
"builtins.str.rsplit",
159+
"builtins.str.rstrip",
160+
"builtins.str.split",
161+
"builtins.str.startswith",
162+
"builtins.str.strip",
163+
"builtins.str.upper",
164+
"builtins.tuple.count",
165+
"builtins.tuple.index",
166+
}
167+
168+
PYBRICKS_BUILTINS_NO_FULLNAME = {"items", "values"}
169+
170+
PYBRICKS_TYPING = {
171+
"typing.MutableSequence.append",
172+
"typing.MutableSequence.extend",
173+
"typing.MutableMapping.pop",
174+
"typing.Mapping.get",
116175
}
117176

118177
# Types from monaco editor
@@ -256,7 +315,7 @@ def _is_pybricks(c: Completion) -> bool:
256315
return False
257316

258317
# filter out typing types
259-
if c.full_name.startswith("typing."):
318+
if c.full_name.startswith("typing.") and c.full_name not in PYBRICKS_TYPING:
260319
return False
261320

262321
# filter out packages/modules that are not included in Pybricks firmware
@@ -265,7 +324,10 @@ def _is_pybricks(c: Completion) -> bool:
265324

266325
# filter subset of builtins
267326
if c.module_name == "builtins" and c.type != "keyword":
268-
return c.name in PYBRICKS_BUILTINS
327+
if c.full_name is None:
328+
return c.name in PYBRICKS_BUILTINS_NO_FULLNAME
329+
330+
return c.full_name in PYBRICKS_BUILTINS
269331

270332
# this is a type alias, not a real type
271333
if c.full_name == "pybricks.parameters.Number":

0 commit comments

Comments
 (0)