##// END OF EJS Templates
stricter types
M Bussonnier -
Show More
@@ -10,12 +10,18 b' Inheritance diagram:'
10 import os
10 import os
11 import re
11 import re
12 import string
12 import string
13 import sys
13 import textwrap
14 import textwrap
14 import warnings
15 import warnings
15 from string import Formatter
16 from string import Formatter
16 from pathlib import Path
17 from pathlib import Path
17
18
18 from typing import List, Dict, Tuple, Optional, cast
19 from typing import List, Dict, Tuple, Optional, cast, Sequence, Mapping, Any
20
21 if sys.version_info < (3, 12):
22 from typing_extensions import Self
23 else:
24 from typing import Self
19
25
20
26
21 class LSString(str):
27 class LSString(str):
@@ -34,7 +40,11 b' class LSString(str):'
34 Such strings are very useful to efficiently interact with the shell, which
40 Such strings are very useful to efficiently interact with the shell, which
35 typically only understands whitespace-separated options for commands."""
41 typically only understands whitespace-separated options for commands."""
36
42
37 def get_list(self):
43 __list: List[str]
44 __spstr: str
45 __paths: List[Path]
46
47 def get_list(self) -> List[str]:
38 try:
48 try:
39 return self.__list
49 return self.__list
40 except AttributeError:
50 except AttributeError:
@@ -43,7 +53,7 b' class LSString(str):'
43
53
44 l = list = property(get_list)
54 l = list = property(get_list)
45
55
46 def get_spstr(self):
56 def get_spstr(self) -> str:
47 try:
57 try:
48 return self.__spstr
58 return self.__spstr
49 except AttributeError:
59 except AttributeError:
@@ -52,12 +62,12 b' class LSString(str):'
52
62
53 s = spstr = property(get_spstr)
63 s = spstr = property(get_spstr)
54
64
55 def get_nlstr(self):
65 def get_nlstr(self) -> Self:
56 return self
66 return self
57
67
58 n = nlstr = property(get_nlstr)
68 n = nlstr = property(get_nlstr)
59
69
60 def get_paths(self):
70 def get_paths(self) -> List[Path]:
61 try:
71 try:
62 return self.__paths
72 return self.__paths
63 except AttributeError:
73 except AttributeError:
@@ -92,12 +102,16 b' class SList(list):'
92 Any values which require transformations are computed only once and
102 Any values which require transformations are computed only once and
93 cached."""
103 cached."""
94
104
95 def get_list(self):
105 __spstr: str
106 __nlstr: str
107 __paths: List[Path]
108
109 def get_list(self) -> Self:
96 return self
110 return self
97
111
98 l = list = property(get_list)
112 l = list = property(get_list)
99
113
100 def get_spstr(self):
114 def get_spstr(self) -> str:
101 try:
115 try:
102 return self.__spstr
116 return self.__spstr
103 except AttributeError:
117 except AttributeError:
@@ -106,7 +120,7 b' class SList(list):'
106
120
107 s = spstr = property(get_spstr)
121 s = spstr = property(get_spstr)
108
122
109 def get_nlstr(self):
123 def get_nlstr(self) -> str:
110 try:
124 try:
111 return self.__nlstr
125 return self.__nlstr
112 except AttributeError:
126 except AttributeError:
@@ -115,7 +129,7 b' class SList(list):'
115
129
116 n = nlstr = property(get_nlstr)
130 n = nlstr = property(get_nlstr)
117
131
118 def get_paths(self):
132 def get_paths(self) -> List[Path]:
119 try:
133 try:
120 return self.__paths
134 return self.__paths
121 except AttributeError:
135 except AttributeError:
@@ -538,7 +552,9 b' class FullEvalFormatter(Formatter):'
538 """
552 """
539 # copied from Formatter._vformat with minor changes to allow eval
553 # copied from Formatter._vformat with minor changes to allow eval
540 # and replace the format_spec code with slicing
554 # and replace the format_spec code with slicing
541 def vformat(self, format_string: str, args, kwargs) -> str:
555 def vformat(
556 self, format_string: str, args: Sequence[Any], kwargs: Mapping[str, Any]
557 ) -> str:
542 result = []
558 result = []
543 conversion: Optional[str]
559 conversion: Optional[str]
544 for literal_text, field_name, format_spec, conversion in self.parse(
560 for literal_text, field_name, format_spec, conversion in self.parse(
@@ -559,7 +575,7 b' class FullEvalFormatter(Formatter):'
559
575
560 # eval the contents of the field for the object
576 # eval the contents of the field for the object
561 # to be formatted
577 # to be formatted
562 obj = eval(field_name, kwargs)
578 obj = eval(field_name, dict(kwargs))
563
579
564 # do any conversion on the resulting object
580 # do any conversion on the resulting object
565 # type issue in typeshed, fined in https://github.com/python/typeshed/pull/11377
581 # type issue in typeshed, fined in https://github.com/python/typeshed/pull/11377
@@ -629,7 +645,9 b' def _col_chunks(l, max_rows, row_first=False):'
629 yield l[i:(i + max_rows)]
645 yield l[i:(i + max_rows)]
630
646
631
647
632 def _find_optimal(rlist, row_first: bool, separator_size: int, displaywidth: int):
648 def _find_optimal(
649 rlist: List[str], row_first: bool, separator_size: int, displaywidth: int
650 ) -> Dict[str, Any]:
633 """Calculate optimal info to columnize a list of string"""
651 """Calculate optimal info to columnize a list of string"""
634 for max_rows in range(1, len(rlist) + 1):
652 for max_rows in range(1, len(rlist) + 1):
635 col_widths = list(map(max, _col_chunks(rlist, max_rows, row_first)))
653 col_widths = list(map(max, _col_chunks(rlist, max_rows, row_first)))
@@ -653,7 +671,12 b' def _get_or_default(mylist, i, default=None):'
653
671
654
672
655 def compute_item_matrix(
673 def compute_item_matrix(
656 items, row_first: bool = False, empty=None, *, separator_size=2, displaywidth=80
674 items: List[str],
675 row_first: bool = False,
676 empty: Optional[str] = None,
677 *,
678 separator_size: int = 2,
679 displaywidth: int = 80,
657 ) -> Tuple[List[List[int]], Dict[str, int]]:
680 ) -> Tuple[List[List[int]], Dict[str, int]]:
658 """Returns a nested list, and info to columnize items
681 """Returns a nested list, and info to columnize items
659
682
@@ -710,7 +733,7 b' def compute_item_matrix('
710 category=PendingDeprecationWarning,
733 category=PendingDeprecationWarning,
711 )
734 )
712 info = _find_optimal(
735 info = _find_optimal(
713 list(map(len, items)),
736 list(map(len, items)), # type: ignore[arg-type]
714 row_first,
737 row_first,
715 separator_size=separator_size,
738 separator_size=separator_size,
716 displaywidth=displaywidth,
739 displaywidth=displaywidth,
@@ -728,7 +751,7 b' def columnize('
728 separator: str = " ",
751 separator: str = " ",
729 displaywidth: int = 80,
752 displaywidth: int = 80,
730 spread: bool = False,
753 spread: bool = False,
731 ):
754 ) -> str:
732 """Transform a list of strings into a single string with columns.
755 """Transform a list of strings into a single string with columns.
733
756
734 Parameters
757 Parameters
@@ -136,6 +136,164 b' exclude = ['
136 'IPython/utils/_process_win32.py',
136 'IPython/utils/_process_win32.py',
137 'IPython/utils/path.py',
137 'IPython/utils/path.py',
138 ]
138 ]
139 disallow_untyped_defs = true
140 # ignore_errors = false
141 # ignore_missing_imports = false
142 # disallow_untyped_calls = true
143 disallow_incomplete_defs = true
144 # check_untyped_defs = true
145 # disallow_untyped_decorators = true
146 warn_redundant_casts = true
147
148 [[tool.mypy.overrides]]
149 module = [
150 "IPython.utils.text",
151 ]
152 disallow_untyped_defs = false
153 check_untyped_defs = false
154 disallow_untyped_decorators = false
155
156
157 # gloabl ignore error
158 [[tool.mypy.overrides]]
159 module = [
160 "IPython",
161 "IPython.conftest",
162 "IPython.core.alias",
163 "IPython.core.async_helpers",
164 "IPython.core.autocall",
165 "IPython.core.builtin_trap",
166 "IPython.core.compilerop",
167 "IPython.core.completer",
168 "IPython.core.completerlib",
169 "IPython.core.crashhandler",
170 "IPython.core.debugger",
171 "IPython.core.display",
172 "IPython.core.display_functions",
173 "IPython.core.display_trap",
174 "IPython.core.displayhook",
175 "IPython.core.displaypub",
176 "IPython.core.events",
177 "IPython.core.excolors",
178 "IPython.core.extensions",
179 "IPython.core.formatters",
180 "IPython.core.getipython",
181 "IPython.core.guarded_eval",
182 "IPython.core.history",
183 "IPython.core.historyapp",
184 "IPython.core.hooks",
185 "IPython.core.inputsplitter",
186 "IPython.core.inputtransformer",
187 "IPython.core.inputtransformer2",
188 "IPython.core.interactiveshell",
189 "IPython.core.logger",
190 "IPython.core.macro",
191 "IPython.core.magic",
192 "IPython.core.magic_arguments",
193 "IPython.core.magics.ast_mod",
194 "IPython.core.magics.auto",
195 "IPython.core.magics.basic",
196 "IPython.core.magics.code",
197 "IPython.core.magics.config",
198 "IPython.core.magics.display",
199 "IPython.core.magics.execution",
200 "IPython.core.magics.extension",
201 "IPython.core.magics.history",
202 "IPython.core.magics.logging",
203 "IPython.core.magics.namespace",
204 "IPython.core.magics.osm",
205 "IPython.core.magics.packaging",
206 "IPython.core.magics.pylab",
207 "IPython.core.magics.script",
208 "IPython.core.oinspect",
209 "IPython.core.page",
210 "IPython.core.payload",
211 "IPython.core.payloadpage",
212 "IPython.core.prefilter",
213 "IPython.core.profiledir",
214 "IPython.core.prompts",
215 "IPython.core.pylabtools",
216 "IPython.core.shellapp",
217 "IPython.core.splitinput",
218 "IPython.core.ultratb",
219 "IPython.extensions.autoreload",
220 "IPython.extensions.storemagic",
221 "IPython.external.qt_for_kernel",
222 "IPython.external.qt_loaders",
223 "IPython.lib.backgroundjobs",
224 "IPython.lib.clipboard",
225 "IPython.lib.demo",
226 "IPython.lib.display",
227 "IPython.lib.editorhooks",
228 "IPython.lib.guisupport",
229 "IPython.lib.latextools",
230 "IPython.lib.lexers",
231 "IPython.lib.pretty",
232 "IPython.paths",
233 "IPython.sphinxext.ipython_console_highlighting",
234 "IPython.terminal.debugger",
235 "IPython.terminal.embed",
236 "IPython.terminal.interactiveshell",
237 "IPython.terminal.magics",
238 "IPython.terminal.prompts",
239 "IPython.terminal.pt_inputhooks",
240 "IPython.terminal.pt_inputhooks.asyncio",
241 "IPython.terminal.pt_inputhooks.glut",
242 "IPython.terminal.pt_inputhooks.gtk",
243 "IPython.terminal.pt_inputhooks.gtk3",
244 "IPython.terminal.pt_inputhooks.gtk4",
245 "IPython.terminal.pt_inputhooks.osx",
246 "IPython.terminal.pt_inputhooks.pyglet",
247 "IPython.terminal.pt_inputhooks.qt",
248 "IPython.terminal.pt_inputhooks.tk",
249 "IPython.terminal.pt_inputhooks.wx",
250 "IPython.terminal.ptutils",
251 "IPython.terminal.shortcuts",
252 "IPython.terminal.shortcuts.auto_match",
253 "IPython.terminal.shortcuts.auto_suggest",
254 "IPython.terminal.shortcuts.filters",
255 "IPython.utils._process_cli",
256 "IPython.utils._process_common",
257 "IPython.utils._process_emscripten",
258 "IPython.utils._process_posix",
259 "IPython.utils.capture",
260 "IPython.utils.coloransi",
261 "IPython.utils.contexts",
262 "IPython.utils.data",
263 "IPython.utils.decorators",
264 "IPython.utils.dir2",
265 "IPython.utils.encoding",
266 "IPython.utils.frame",
267 "IPython.utils.generics",
268 "IPython.utils.importstring",
269 "IPython.utils.io",
270 "IPython.utils.ipstruct",
271 "IPython.utils.module_paths",
272 "IPython.utils.openpy",
273 "IPython.utils.process",
274 "IPython.utils.py3compat",
275 "IPython.utils.sentinel",
276 "IPython.utils.shimmodule",
277 "IPython.utils.strdispatch",
278 "IPython.utils.sysinfo",
279 "IPython.utils.syspathcontext",
280 "IPython.utils.tempdir",
281 "IPython.utils.terminal",
282 "IPython.utils.timing",
283 "IPython.utils.tokenutil",
284 "IPython.utils.tz",
285 "IPython.utils.ulinecache",
286 "IPython.utils.version",
287 "IPython.utils.wildcard",
288
289 ]
290 disallow_untyped_defs = false
291 ignore_errors = true
292 ignore_missing_imports = true
293 disallow_untyped_calls = false
294 disallow_incomplete_defs = false
295 check_untyped_defs = false
296 disallow_untyped_decorators = false
139
297
140 [tool.pytest.ini_options]
298 [tool.pytest.ini_options]
141 addopts = [
299 addopts = [
General Comments 0
You need to be logged in to leave comments. Login now