Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
f4b44fa6
Kaydet (Commit)
f4b44fa6
authored
Nis 06, 1998
tarafından
Guido van Rossum
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Tim's latest version (supports old and new tokenize modules)
üst
5d97ebf2
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
384 additions
and
231 deletions
+384
-231
tabnanny.py
Lib/tabnanny.py
+128
-77
tabnanny.py
Tools/idle/tabnanny.py
+128
-77
tabnanny.py
Tools/scripts/tabnanny.py
+128
-77
No files found.
Lib/tabnanny.py
Dosyayı görüntüle @
f4b44fa6
#! /home/guido/python/src/sparc/python
#! /usr/bin/env python
#! /usr/bin/env python
"""The Tab Nanny despises ambiguous indentation. She knows no mercy.
"""The Tab Nanny despises ambiguous indentation. She knows no mercy.
"""
CAUTION: this version requires Guido's "NL" patch to lib/tokenize.py,
# Released to the public domain, by Tim Peters, 4 April 1998.
posted 30-Mar-98. This version will not run at all with an unpatched
tokenize (it will raise AttributeError while loading), while previous
versions will run incorrectly with the patched tokenize.
"""
# Released to the public domain, by Tim Peters, 30 March 1998.
__version__
=
"3"
__version__
=
"2"
import
os
import
os
import
sys
import
sys
import
getopt
import
getopt
import
tokenize
import
tokenize
try
:
tokenize
.
NL
except
AttributeError
:
raise
AttributeError
,
"Sorry, I need a version of tokenize.py "
\
"that supports the NL pseudo-token."
verbose
=
0
verbose
=
0
def
main
():
def
main
():
...
@@ -235,67 +222,131 @@ def format_witnesses(w):
...
@@ -235,67 +222,131 @@ def format_witnesses(w):
prefix
=
prefix
+
"s"
prefix
=
prefix
+
"s"
return
prefix
+
" "
+
string
.
join
(
firsts
,
', '
)
return
prefix
+
" "
+
string
.
join
(
firsts
,
', '
)
indents
=
[]
# The collection of globals, the reset_globals() function, and the
check_equal
=
0
# tokeneater() function, depend on which version of tokenize is
# in use.
def
reset_globals
():
global
indents
,
check_equal
if
hasattr
(
tokenize
,
'NL'
):
check_equal
=
0
# take advantage of Guido's patch!
indents
=
[
Whitespace
(
""
)]
indents
=
[]
def
tokeneater
(
type
,
token
,
start
,
end
,
line
,
check_equal
=
0
INDENT
=
tokenize
.
INDENT
,
DEDENT
=
tokenize
.
DEDENT
,
def
reset_globals
():
NEWLINE
=
tokenize
.
NEWLINE
,
global
indents
,
check_equal
COMMENT
=
tokenize
.
COMMENT
,
check_equal
=
0
NL
=
tokenize
.
NL
):
indents
=
[
Whitespace
(
""
)]
global
indents
,
check_equal
def
tokeneater
(
type
,
token
,
start
,
end
,
line
,
# test in decreasing order of frequency, although the check_equal
INDENT
=
tokenize
.
INDENT
,
# test *must* be last; INDENT and DEDENT appear equally often
DEDENT
=
tokenize
.
DEDENT
,
NEWLINE
=
tokenize
.
NEWLINE
,
if
type
in
(
COMMENT
,
NL
):
COMMENT
=
tokenize
.
COMMENT
,
# the indentation of these guys is meaningless
NL
=
tokenize
.
NL
):
pass
global
indents
,
check_equal
elif
type
==
NEWLINE
:
# test in decreasing order of frequency, although the check_equal
# a program statement, or ENDMARKER, will eventually follow,
# test *must* be last; INDENT and DEDENT appear equally often
# after some (possibly empty) run of tokens of the form
# (NL | COMMENT)* (INDENT | DEDENT+)?
if
type
in
(
COMMENT
,
NL
):
# If an INDENT appears, setting check_equal is wrong, and will
# the indentation of these guys is meaningless
# be undone when we see the INDENT.
pass
check_equal
=
1
elif
type
==
NEWLINE
:
elif
type
==
INDENT
:
# a program statement, or ENDMARKER, will eventually follow,
check_equal
=
0
# after some (possibly empty) run of tokens of the form
thisguy
=
Whitespace
(
token
)
# (NL | COMMENT)* (INDENT | DEDENT+)?
if
not
indents
[
-
1
]
.
less
(
thisguy
):
# If an INDENT appears, setting check_equal is wrong, and will
witness
=
indents
[
-
1
]
.
not_less_witness
(
thisguy
)
# be undone when we see the INDENT.
msg
=
"indent not greater e.g. "
+
format_witnesses
(
witness
)
check_equal
=
1
raise
NannyNag
(
start
[
0
],
msg
,
line
)
indents
.
append
(
thisguy
)
elif
type
==
INDENT
:
check_equal
=
0
elif
type
==
DEDENT
:
thisguy
=
Whitespace
(
token
)
# there's nothing we need to check here! what's important is
if
not
indents
[
-
1
]
.
less
(
thisguy
):
# that when the run of DEDENTs ends, the indentation of the
witness
=
indents
[
-
1
]
.
not_less_witness
(
thisguy
)
# program statement (or ENDMARKER) that triggered the run is
msg
=
"indent not greater e.g. "
+
format_witnesses
(
witness
)
# equal to what's left at the top of the indents stack
raise
NannyNag
(
start
[
0
],
msg
,
line
)
assert
check_equal
# else no earlier NEWLINE, or an earlier INDENT
indents
.
append
(
thisguy
)
del
indents
[
-
1
]
elif
type
==
DEDENT
:
elif
check_equal
:
# there's nothing we need to check here! what's important is
# this is the first "real token" following a NEWLINE, so it
# that when the run of DEDENTs ends, the indentation of the
# must be the first token of the next program statment, or an
# program statement (or ENDMARKER) that triggered the run is
# ENDMARKER; the "line" argument exposes the leading whitespace
# equal to what's left at the top of the indents stack
# for this statement; in the case of ENDMARKER, line is an empty
assert
check_equal
# else no earlier NEWLINE, or an earlier INDENT
# string, so will properly match the empty string with which the
del
indents
[
-
1
]
# "indents" stack was seeded
check_equal
=
0
elif
check_equal
:
thisguy
=
Whitespace
(
line
)
# this is the first "real token" following a NEWLINE, so it
if
not
indents
[
-
1
]
.
equal
(
thisguy
):
# must be the first token of the next program statement, or an
witness
=
indents
[
-
1
]
.
not_equal_witness
(
thisguy
)
# ENDMARKER; the "line" argument exposes the leading whitespace
msg
=
"indent not equal e.g. "
+
format_witnesses
(
witness
)
# for this statement; in the case of ENDMARKER, line is an empty
raise
NannyNag
(
start
[
0
],
msg
,
line
)
# string, so will properly match the empty string with which the
# "indents" stack was seeded
check_equal
=
0
thisguy
=
Whitespace
(
line
)
if
not
indents
[
-
1
]
.
equal
(
thisguy
):
witness
=
indents
[
-
1
]
.
not_equal_witness
(
thisguy
)
msg
=
"indent not equal e.g. "
+
format_witnesses
(
witness
)
raise
NannyNag
(
start
[
0
],
msg
,
line
)
else
:
# unpatched version of tokenize
nesting_level
=
0
indents
=
[]
check_equal
=
0
def
reset_globals
():
global
nesting_level
,
indents
,
check_equal
nesting_level
=
check_equal
=
0
indents
=
[
Whitespace
(
""
)]
def
tokeneater
(
type
,
token
,
start
,
end
,
line
,
INDENT
=
tokenize
.
INDENT
,
DEDENT
=
tokenize
.
DEDENT
,
NEWLINE
=
tokenize
.
NEWLINE
,
COMMENT
=
tokenize
.
COMMENT
,
OP
=
tokenize
.
OP
):
global
nesting_level
,
indents
,
check_equal
if
type
==
INDENT
:
check_equal
=
0
thisguy
=
Whitespace
(
token
)
if
not
indents
[
-
1
]
.
less
(
thisguy
):
witness
=
indents
[
-
1
]
.
not_less_witness
(
thisguy
)
msg
=
"indent not greater e.g. "
+
format_witnesses
(
witness
)
raise
NannyNag
(
start
[
0
],
msg
,
line
)
indents
.
append
(
thisguy
)
elif
type
==
DEDENT
:
del
indents
[
-
1
]
elif
type
==
NEWLINE
:
if
nesting_level
==
0
:
check_equal
=
1
elif
type
==
COMMENT
:
pass
elif
check_equal
:
check_equal
=
0
thisguy
=
Whitespace
(
line
)
if
not
indents
[
-
1
]
.
equal
(
thisguy
):
witness
=
indents
[
-
1
]
.
not_equal_witness
(
thisguy
)
msg
=
"indent not equal e.g. "
+
format_witnesses
(
witness
)
raise
NannyNag
(
start
[
0
],
msg
,
line
)
if
type
==
OP
and
token
in
(
'{'
,
'['
,
'('
):
nesting_level
=
nesting_level
+
1
elif
type
==
OP
and
token
in
(
'}'
,
']'
,
')'
):
if
nesting_level
==
0
:
raise
NannyNag
(
start
[
0
],
"unbalanced bracket '"
+
token
+
"'"
,
line
)
nesting_level
=
nesting_level
-
1
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
main
()
main
()
...
...
Tools/idle/tabnanny.py
Dosyayı görüntüle @
f4b44fa6
#! /home/guido/python/src/sparc/python
#! /usr/bin/env python
#! /usr/bin/env python
"""The Tab Nanny despises ambiguous indentation. She knows no mercy.
"""The Tab Nanny despises ambiguous indentation. She knows no mercy.
"""
CAUTION: this version requires Guido's "NL" patch to lib/tokenize.py,
# Released to the public domain, by Tim Peters, 4 April 1998.
posted 30-Mar-98. This version will not run at all with an unpatched
tokenize (it will raise AttributeError while loading), while previous
versions will run incorrectly with the patched tokenize.
"""
# Released to the public domain, by Tim Peters, 30 March 1998.
__version__
=
"3"
__version__
=
"2"
import
os
import
os
import
sys
import
sys
import
getopt
import
getopt
import
tokenize
import
tokenize
try
:
tokenize
.
NL
except
AttributeError
:
raise
AttributeError
,
"Sorry, I need a version of tokenize.py "
\
"that supports the NL pseudo-token."
verbose
=
0
verbose
=
0
def
main
():
def
main
():
...
@@ -235,67 +222,131 @@ def format_witnesses(w):
...
@@ -235,67 +222,131 @@ def format_witnesses(w):
prefix
=
prefix
+
"s"
prefix
=
prefix
+
"s"
return
prefix
+
" "
+
string
.
join
(
firsts
,
', '
)
return
prefix
+
" "
+
string
.
join
(
firsts
,
', '
)
indents
=
[]
# The collection of globals, the reset_globals() function, and the
check_equal
=
0
# tokeneater() function, depend on which version of tokenize is
# in use.
def
reset_globals
():
global
indents
,
check_equal
if
hasattr
(
tokenize
,
'NL'
):
check_equal
=
0
# take advantage of Guido's patch!
indents
=
[
Whitespace
(
""
)]
indents
=
[]
def
tokeneater
(
type
,
token
,
start
,
end
,
line
,
check_equal
=
0
INDENT
=
tokenize
.
INDENT
,
DEDENT
=
tokenize
.
DEDENT
,
def
reset_globals
():
NEWLINE
=
tokenize
.
NEWLINE
,
global
indents
,
check_equal
COMMENT
=
tokenize
.
COMMENT
,
check_equal
=
0
NL
=
tokenize
.
NL
):
indents
=
[
Whitespace
(
""
)]
global
indents
,
check_equal
def
tokeneater
(
type
,
token
,
start
,
end
,
line
,
# test in decreasing order of frequency, although the check_equal
INDENT
=
tokenize
.
INDENT
,
# test *must* be last; INDENT and DEDENT appear equally often
DEDENT
=
tokenize
.
DEDENT
,
NEWLINE
=
tokenize
.
NEWLINE
,
if
type
in
(
COMMENT
,
NL
):
COMMENT
=
tokenize
.
COMMENT
,
# the indentation of these guys is meaningless
NL
=
tokenize
.
NL
):
pass
global
indents
,
check_equal
elif
type
==
NEWLINE
:
# test in decreasing order of frequency, although the check_equal
# a program statement, or ENDMARKER, will eventually follow,
# test *must* be last; INDENT and DEDENT appear equally often
# after some (possibly empty) run of tokens of the form
# (NL | COMMENT)* (INDENT | DEDENT+)?
if
type
in
(
COMMENT
,
NL
):
# If an INDENT appears, setting check_equal is wrong, and will
# the indentation of these guys is meaningless
# be undone when we see the INDENT.
pass
check_equal
=
1
elif
type
==
NEWLINE
:
elif
type
==
INDENT
:
# a program statement, or ENDMARKER, will eventually follow,
check_equal
=
0
# after some (possibly empty) run of tokens of the form
thisguy
=
Whitespace
(
token
)
# (NL | COMMENT)* (INDENT | DEDENT+)?
if
not
indents
[
-
1
]
.
less
(
thisguy
):
# If an INDENT appears, setting check_equal is wrong, and will
witness
=
indents
[
-
1
]
.
not_less_witness
(
thisguy
)
# be undone when we see the INDENT.
msg
=
"indent not greater e.g. "
+
format_witnesses
(
witness
)
check_equal
=
1
raise
NannyNag
(
start
[
0
],
msg
,
line
)
indents
.
append
(
thisguy
)
elif
type
==
INDENT
:
check_equal
=
0
elif
type
==
DEDENT
:
thisguy
=
Whitespace
(
token
)
# there's nothing we need to check here! what's important is
if
not
indents
[
-
1
]
.
less
(
thisguy
):
# that when the run of DEDENTs ends, the indentation of the
witness
=
indents
[
-
1
]
.
not_less_witness
(
thisguy
)
# program statement (or ENDMARKER) that triggered the run is
msg
=
"indent not greater e.g. "
+
format_witnesses
(
witness
)
# equal to what's left at the top of the indents stack
raise
NannyNag
(
start
[
0
],
msg
,
line
)
assert
check_equal
# else no earlier NEWLINE, or an earlier INDENT
indents
.
append
(
thisguy
)
del
indents
[
-
1
]
elif
type
==
DEDENT
:
elif
check_equal
:
# there's nothing we need to check here! what's important is
# this is the first "real token" following a NEWLINE, so it
# that when the run of DEDENTs ends, the indentation of the
# must be the first token of the next program statment, or an
# program statement (or ENDMARKER) that triggered the run is
# ENDMARKER; the "line" argument exposes the leading whitespace
# equal to what's left at the top of the indents stack
# for this statement; in the case of ENDMARKER, line is an empty
assert
check_equal
# else no earlier NEWLINE, or an earlier INDENT
# string, so will properly match the empty string with which the
del
indents
[
-
1
]
# "indents" stack was seeded
check_equal
=
0
elif
check_equal
:
thisguy
=
Whitespace
(
line
)
# this is the first "real token" following a NEWLINE, so it
if
not
indents
[
-
1
]
.
equal
(
thisguy
):
# must be the first token of the next program statement, or an
witness
=
indents
[
-
1
]
.
not_equal_witness
(
thisguy
)
# ENDMARKER; the "line" argument exposes the leading whitespace
msg
=
"indent not equal e.g. "
+
format_witnesses
(
witness
)
# for this statement; in the case of ENDMARKER, line is an empty
raise
NannyNag
(
start
[
0
],
msg
,
line
)
# string, so will properly match the empty string with which the
# "indents" stack was seeded
check_equal
=
0
thisguy
=
Whitespace
(
line
)
if
not
indents
[
-
1
]
.
equal
(
thisguy
):
witness
=
indents
[
-
1
]
.
not_equal_witness
(
thisguy
)
msg
=
"indent not equal e.g. "
+
format_witnesses
(
witness
)
raise
NannyNag
(
start
[
0
],
msg
,
line
)
else
:
# unpatched version of tokenize
nesting_level
=
0
indents
=
[]
check_equal
=
0
def
reset_globals
():
global
nesting_level
,
indents
,
check_equal
nesting_level
=
check_equal
=
0
indents
=
[
Whitespace
(
""
)]
def
tokeneater
(
type
,
token
,
start
,
end
,
line
,
INDENT
=
tokenize
.
INDENT
,
DEDENT
=
tokenize
.
DEDENT
,
NEWLINE
=
tokenize
.
NEWLINE
,
COMMENT
=
tokenize
.
COMMENT
,
OP
=
tokenize
.
OP
):
global
nesting_level
,
indents
,
check_equal
if
type
==
INDENT
:
check_equal
=
0
thisguy
=
Whitespace
(
token
)
if
not
indents
[
-
1
]
.
less
(
thisguy
):
witness
=
indents
[
-
1
]
.
not_less_witness
(
thisguy
)
msg
=
"indent not greater e.g. "
+
format_witnesses
(
witness
)
raise
NannyNag
(
start
[
0
],
msg
,
line
)
indents
.
append
(
thisguy
)
elif
type
==
DEDENT
:
del
indents
[
-
1
]
elif
type
==
NEWLINE
:
if
nesting_level
==
0
:
check_equal
=
1
elif
type
==
COMMENT
:
pass
elif
check_equal
:
check_equal
=
0
thisguy
=
Whitespace
(
line
)
if
not
indents
[
-
1
]
.
equal
(
thisguy
):
witness
=
indents
[
-
1
]
.
not_equal_witness
(
thisguy
)
msg
=
"indent not equal e.g. "
+
format_witnesses
(
witness
)
raise
NannyNag
(
start
[
0
],
msg
,
line
)
if
type
==
OP
and
token
in
(
'{'
,
'['
,
'('
):
nesting_level
=
nesting_level
+
1
elif
type
==
OP
and
token
in
(
'}'
,
']'
,
')'
):
if
nesting_level
==
0
:
raise
NannyNag
(
start
[
0
],
"unbalanced bracket '"
+
token
+
"'"
,
line
)
nesting_level
=
nesting_level
-
1
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
main
()
main
()
...
...
Tools/scripts/tabnanny.py
Dosyayı görüntüle @
f4b44fa6
#! /home/guido/python/src/sparc/python
#! /usr/bin/env python
#! /usr/bin/env python
"""The Tab Nanny despises ambiguous indentation. She knows no mercy.
"""The Tab Nanny despises ambiguous indentation. She knows no mercy.
"""
CAUTION: this version requires Guido's "NL" patch to lib/tokenize.py,
# Released to the public domain, by Tim Peters, 4 April 1998.
posted 30-Mar-98. This version will not run at all with an unpatched
tokenize (it will raise AttributeError while loading), while previous
versions will run incorrectly with the patched tokenize.
"""
# Released to the public domain, by Tim Peters, 30 March 1998.
__version__
=
"3"
__version__
=
"2"
import
os
import
os
import
sys
import
sys
import
getopt
import
getopt
import
tokenize
import
tokenize
try
:
tokenize
.
NL
except
AttributeError
:
raise
AttributeError
,
"Sorry, I need a version of tokenize.py "
\
"that supports the NL pseudo-token."
verbose
=
0
verbose
=
0
def
main
():
def
main
():
...
@@ -235,67 +222,131 @@ def format_witnesses(w):
...
@@ -235,67 +222,131 @@ def format_witnesses(w):
prefix
=
prefix
+
"s"
prefix
=
prefix
+
"s"
return
prefix
+
" "
+
string
.
join
(
firsts
,
', '
)
return
prefix
+
" "
+
string
.
join
(
firsts
,
', '
)
indents
=
[]
# The collection of globals, the reset_globals() function, and the
check_equal
=
0
# tokeneater() function, depend on which version of tokenize is
# in use.
def
reset_globals
():
global
indents
,
check_equal
if
hasattr
(
tokenize
,
'NL'
):
check_equal
=
0
# take advantage of Guido's patch!
indents
=
[
Whitespace
(
""
)]
indents
=
[]
def
tokeneater
(
type
,
token
,
start
,
end
,
line
,
check_equal
=
0
INDENT
=
tokenize
.
INDENT
,
DEDENT
=
tokenize
.
DEDENT
,
def
reset_globals
():
NEWLINE
=
tokenize
.
NEWLINE
,
global
indents
,
check_equal
COMMENT
=
tokenize
.
COMMENT
,
check_equal
=
0
NL
=
tokenize
.
NL
):
indents
=
[
Whitespace
(
""
)]
global
indents
,
check_equal
def
tokeneater
(
type
,
token
,
start
,
end
,
line
,
# test in decreasing order of frequency, although the check_equal
INDENT
=
tokenize
.
INDENT
,
# test *must* be last; INDENT and DEDENT appear equally often
DEDENT
=
tokenize
.
DEDENT
,
NEWLINE
=
tokenize
.
NEWLINE
,
if
type
in
(
COMMENT
,
NL
):
COMMENT
=
tokenize
.
COMMENT
,
# the indentation of these guys is meaningless
NL
=
tokenize
.
NL
):
pass
global
indents
,
check_equal
elif
type
==
NEWLINE
:
# test in decreasing order of frequency, although the check_equal
# a program statement, or ENDMARKER, will eventually follow,
# test *must* be last; INDENT and DEDENT appear equally often
# after some (possibly empty) run of tokens of the form
# (NL | COMMENT)* (INDENT | DEDENT+)?
if
type
in
(
COMMENT
,
NL
):
# If an INDENT appears, setting check_equal is wrong, and will
# the indentation of these guys is meaningless
# be undone when we see the INDENT.
pass
check_equal
=
1
elif
type
==
NEWLINE
:
elif
type
==
INDENT
:
# a program statement, or ENDMARKER, will eventually follow,
check_equal
=
0
# after some (possibly empty) run of tokens of the form
thisguy
=
Whitespace
(
token
)
# (NL | COMMENT)* (INDENT | DEDENT+)?
if
not
indents
[
-
1
]
.
less
(
thisguy
):
# If an INDENT appears, setting check_equal is wrong, and will
witness
=
indents
[
-
1
]
.
not_less_witness
(
thisguy
)
# be undone when we see the INDENT.
msg
=
"indent not greater e.g. "
+
format_witnesses
(
witness
)
check_equal
=
1
raise
NannyNag
(
start
[
0
],
msg
,
line
)
indents
.
append
(
thisguy
)
elif
type
==
INDENT
:
check_equal
=
0
elif
type
==
DEDENT
:
thisguy
=
Whitespace
(
token
)
# there's nothing we need to check here! what's important is
if
not
indents
[
-
1
]
.
less
(
thisguy
):
# that when the run of DEDENTs ends, the indentation of the
witness
=
indents
[
-
1
]
.
not_less_witness
(
thisguy
)
# program statement (or ENDMARKER) that triggered the run is
msg
=
"indent not greater e.g. "
+
format_witnesses
(
witness
)
# equal to what's left at the top of the indents stack
raise
NannyNag
(
start
[
0
],
msg
,
line
)
assert
check_equal
# else no earlier NEWLINE, or an earlier INDENT
indents
.
append
(
thisguy
)
del
indents
[
-
1
]
elif
type
==
DEDENT
:
elif
check_equal
:
# there's nothing we need to check here! what's important is
# this is the first "real token" following a NEWLINE, so it
# that when the run of DEDENTs ends, the indentation of the
# must be the first token of the next program statment, or an
# program statement (or ENDMARKER) that triggered the run is
# ENDMARKER; the "line" argument exposes the leading whitespace
# equal to what's left at the top of the indents stack
# for this statement; in the case of ENDMARKER, line is an empty
assert
check_equal
# else no earlier NEWLINE, or an earlier INDENT
# string, so will properly match the empty string with which the
del
indents
[
-
1
]
# "indents" stack was seeded
check_equal
=
0
elif
check_equal
:
thisguy
=
Whitespace
(
line
)
# this is the first "real token" following a NEWLINE, so it
if
not
indents
[
-
1
]
.
equal
(
thisguy
):
# must be the first token of the next program statement, or an
witness
=
indents
[
-
1
]
.
not_equal_witness
(
thisguy
)
# ENDMARKER; the "line" argument exposes the leading whitespace
msg
=
"indent not equal e.g. "
+
format_witnesses
(
witness
)
# for this statement; in the case of ENDMARKER, line is an empty
raise
NannyNag
(
start
[
0
],
msg
,
line
)
# string, so will properly match the empty string with which the
# "indents" stack was seeded
check_equal
=
0
thisguy
=
Whitespace
(
line
)
if
not
indents
[
-
1
]
.
equal
(
thisguy
):
witness
=
indents
[
-
1
]
.
not_equal_witness
(
thisguy
)
msg
=
"indent not equal e.g. "
+
format_witnesses
(
witness
)
raise
NannyNag
(
start
[
0
],
msg
,
line
)
else
:
# unpatched version of tokenize
nesting_level
=
0
indents
=
[]
check_equal
=
0
def
reset_globals
():
global
nesting_level
,
indents
,
check_equal
nesting_level
=
check_equal
=
0
indents
=
[
Whitespace
(
""
)]
def
tokeneater
(
type
,
token
,
start
,
end
,
line
,
INDENT
=
tokenize
.
INDENT
,
DEDENT
=
tokenize
.
DEDENT
,
NEWLINE
=
tokenize
.
NEWLINE
,
COMMENT
=
tokenize
.
COMMENT
,
OP
=
tokenize
.
OP
):
global
nesting_level
,
indents
,
check_equal
if
type
==
INDENT
:
check_equal
=
0
thisguy
=
Whitespace
(
token
)
if
not
indents
[
-
1
]
.
less
(
thisguy
):
witness
=
indents
[
-
1
]
.
not_less_witness
(
thisguy
)
msg
=
"indent not greater e.g. "
+
format_witnesses
(
witness
)
raise
NannyNag
(
start
[
0
],
msg
,
line
)
indents
.
append
(
thisguy
)
elif
type
==
DEDENT
:
del
indents
[
-
1
]
elif
type
==
NEWLINE
:
if
nesting_level
==
0
:
check_equal
=
1
elif
type
==
COMMENT
:
pass
elif
check_equal
:
check_equal
=
0
thisguy
=
Whitespace
(
line
)
if
not
indents
[
-
1
]
.
equal
(
thisguy
):
witness
=
indents
[
-
1
]
.
not_equal_witness
(
thisguy
)
msg
=
"indent not equal e.g. "
+
format_witnesses
(
witness
)
raise
NannyNag
(
start
[
0
],
msg
,
line
)
if
type
==
OP
and
token
in
(
'{'
,
'['
,
'('
):
nesting_level
=
nesting_level
+
1
elif
type
==
OP
and
token
in
(
'}'
,
']'
,
')'
):
if
nesting_level
==
0
:
raise
NannyNag
(
start
[
0
],
"unbalanced bracket '"
+
token
+
"'"
,
line
)
nesting_level
=
nesting_level
-
1
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
main
()
main
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment