gh-133158: Adjust c-analyzer max_sizes for typeobject.c (GH-133159)
This also improves the error message for when a file is too large.
This commit is contained in:
@@ -116,6 +116,8 @@ TODO:
|
||||
* alt impl using a state machine (& tokenizer or split on delimiters)
|
||||
"""
|
||||
|
||||
import textwrap
|
||||
|
||||
from ..info import ParsedItem
|
||||
from ._info import SourceInfo
|
||||
|
||||
@@ -208,7 +210,27 @@ def _iter_source(lines, *, maxtext=11_000, maxlines=200, showtext=False):
|
||||
return
|
||||
# At this point either the file ended prematurely
|
||||
# or there's "too much" text.
|
||||
filename, lno, text = srcinfo.filename, srcinfo._start, srcinfo.text
|
||||
filename, lno_from, lno_to = srcinfo.filename, srcinfo.start, srcinfo.end
|
||||
text = srcinfo.text
|
||||
if len(text) > 500:
|
||||
text = text[:500] + '...'
|
||||
raise Exception(f'unmatched text ({filename} starting at line {lno}):\n{text}')
|
||||
|
||||
if srcinfo.too_much_text(maxtext):
|
||||
msg = f'''
|
||||
too much text, try to increase MAX_SIZES[MAXTEXT] in cpython/_parser.py
|
||||
{filename} starting at line {lno_from} to {lno_to}
|
||||
has code with length {len(text)} greater than {maxtext}:
|
||||
{text}
|
||||
'''
|
||||
raise RuntimeError(textwrap.dedent(msg))
|
||||
|
||||
if srcinfo.too_many_lines(maxlines):
|
||||
msg = f'''
|
||||
too many lines, try to increase MAX_SIZES[MAXLINES] in cpython/_parser.py
|
||||
{filename} starting at line {lno_from} to {lno_to}
|
||||
has code with number of lines {lno_to - lno_from} greater than {maxlines}:
|
||||
{text}
|
||||
'''
|
||||
raise RuntimeError(textwrap.dedent(msg))
|
||||
|
||||
raise RuntimeError(f'unmatched text ({filename} starting at line {lno_from}):\n{text}')
|
||||
|
||||
@@ -123,10 +123,16 @@ class SourceInfo:
|
||||
def done(self):
|
||||
self._set_ready()
|
||||
|
||||
def too_much_text(self, maxtext):
|
||||
return maxtext and len(self.text) > maxtext
|
||||
|
||||
def too_many_lines(self, maxlines):
|
||||
return maxlines and self.end - self.start > maxlines
|
||||
|
||||
def too_much(self, maxtext, maxlines):
|
||||
if maxtext and len(self.text) > maxtext:
|
||||
if self.too_much_text(maxtext):
|
||||
pass
|
||||
elif maxlines and self.end - self.start > maxlines:
|
||||
elif self.too_many_lines(maxlines):
|
||||
pass
|
||||
else:
|
||||
return False
|
||||
|
||||
@@ -326,7 +326,7 @@ MAX_SIZES = {
|
||||
_abs('Modules/_testcapimodule.c'): (20_000, 400),
|
||||
_abs('Modules/expat/expat.h'): (10_000, 400),
|
||||
_abs('Objects/stringlib/unicode_format.h'): (10_000, 400),
|
||||
_abs('Objects/typeobject.c'): (35_000, 200),
|
||||
_abs('Objects/typeobject.c'): (380_000, 13_000),
|
||||
_abs('Python/compile.c'): (20_000, 500),
|
||||
_abs('Python/optimizer.c'): (100_000, 5_000),
|
||||
_abs('Python/parking_lot.c'): (40_000, 1000),
|
||||
|
||||
Reference in New Issue
Block a user