Skip to content

Commit 9aae728

Browse files
committed
One more round of tidying...
and being more clear about the meanings of variables
1 parent 78a33ac commit 9aae728

File tree

2 files changed

+62
-56
lines changed

2 files changed

+62
-56
lines changed

mathics_scanner/prescanner.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,11 @@ def replace_escape_sequences(self) -> str:
5252
Note: self.code is not modified.
5353
"""
5454

55-
line_fragments = (
56-
[]
57-
) # line fragments to be joined before returning from this method.
58-
self.fragment_start = (
59-
self.pos
60-
) # start position of line fragment under consideration
55+
# Line fragments to be joined before returning from this method.
56+
line_fragments = []
57+
58+
# Fragment start position of line fragment under consideration.
59+
self.fragment_start = self.pos
6160

6261
def start_new_fragment(pos: int) -> None:
6362
"""
@@ -71,14 +70,14 @@ def try_parse_base(start_shift: int, end_shift: int, base: int) -> None:
7170
See if characters self.pos+start_shift .. self.pos+end shift
7271
can be converted to an integer in base ``base``.
7372
74-
If so, we append, the characters before the escape sequence without the
73+
If so, we append the characters before the escape sequence without the
7574
escaping characters like ``\.`` or ``\:``.
7675
77-
We also append the converted integer to ``line_fragments``, and updated
76+
We also append the converted integer to ``line_fragments``, and update
7877
position cursors for a new line fragment.
7978
80-
However, if the conversion fails, error messages are issued and nothing
81-
is updated
79+
However, if the conversion fails, then error messages are
80+
issued and nothing is updated
8281
"""
8382
start, end = self.pos + start_shift, self.pos + end_shift
8483
result = None
@@ -102,6 +101,10 @@ def try_parse_base(start_shift: int, end_shift: int, base: int) -> None:
102101
"Syntax", "sntxb", self.code[self.pos :].rstrip("\n")
103102
)
104103
raise ScanError()
104+
105+
# Add text from prior line fragment as well
106+
# as the escape sequence, a character, from the escape sequence
107+
# that was just matched.
105108
line_fragments.append(self.code[start : self.pos])
106109
line_fragments.append(chr(result))
107110

@@ -131,6 +134,9 @@ def try_parse_named_character(start_shift: int):
131134
self.feeder.message("Syntax", "sntufn", named_character)
132135
# stay in same line fragment
133136
else:
137+
# Add text from prior line fragment as well
138+
# as the escape sequence, a character, from the escape sequence
139+
# just matched.
134140
line_fragments.append(self.code[self.fragment_start : self.pos])
135141
line_fragments.append(char)
136142
start_new_fragment(i + 1)
@@ -180,7 +186,7 @@ def try_parse_named_character(start_shift: int):
180186
else:
181187
self.pos += 1
182188

183-
# Close out final line fragment
189+
# Add the final line fragment.
184190
line_fragments.append(self.code[self.fragment_start :])
185191

186192
# produce and return the replacement string.

test/test_prescanner.py

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -6,100 +6,100 @@
66
from mathics_scanner.feed import SingleLineFeeder
77

88

9-
def replace_escape_sequences(code):
10-
prescanner = Prescanner(SingleLineFeeder(code))
9+
def replace_escape_sequences(mathics_text: str):
10+
prescanner = Prescanner(SingleLineFeeder(mathics_text))
1111
return prescanner.replace_escape_sequences()
1212

1313

14-
def invalid(code):
14+
def assert_invalid(mathics_text: str):
1515
with pytest.raises(ScanError):
16-
replace_escape_sequences(code)
16+
replace_escape_sequences(mathics_text)
1717

1818

19-
def incomplete(code):
19+
def assert_incomplete(mathics_text: str):
2020
with pytest.raises(IncompleteSyntaxError):
21-
replace_escape_sequences(code)
21+
replace_escape_sequences(mathics_text)
2222

2323

24-
def equal(code, result):
25-
assert replace_escape_sequences(code) == result
24+
def assert_equal(mathics_text: str, result: str):
25+
assert replace_escape_sequences(mathics_text) == result
2626

2727

28-
def equal_length(code, length):
29-
assert len(replace_escape_sequences(code)) == length
28+
def assert_equal_length(mathics_text: str, length):
29+
assert len(replace_escape_sequences(mathics_text)) == length
3030

3131

3232
def test_named_characters():
33-
equal(r"\[Theta]", "\u03B8")
34-
equal(r"\[CapitalPi]", "\u03A0")
35-
equal(r"\[Fake]", r"\[Fake]")
36-
equal("z \\[Conjugate]", "z \uF3C8")
37-
equal("z \\[Integral]", "z \u222b")
38-
equal("z \\\\[Integral]", "z \\\\[Integral]")
39-
equal("z \\\\\\[Integral]", "z \\\\\u222b")
40-
equal("abc\\\\", "abc\\\\")
33+
assert_equal(r"\[Theta]", "\u03B8")
34+
assert_equal(r"\[CapitalPi]", "\u03A0")
35+
assert_equal(r"\[Fake]", r"\[Fake]")
36+
assert_equal("z \\[Conjugate]", "z \uF3C8")
37+
assert_equal("z \\[Integral]", "z \u222b")
38+
assert_equal("z \\\\[Integral]", "z \\\\[Integral]")
39+
assert_equal("z \\\\\\[Integral]", "z \\\\\u222b")
40+
assert_equal("abc\\\\", "abc\\\\")
4141

4242

4343
def test_text_lengths():
44-
equal_length(r'"\[Integral]"', 3)
44+
assert_equal_length(r'"\[Integral]"', 3)
4545
# Prescanner keep both slashes and quotes.
4646
# The tokenizer brings \\ into \ if it appears
4747
# inside a string.
48-
equal_length(r'"\\[Integral]"', 14)
48+
assert_equal_length(r'"\\[Integral]"', 14)
4949

5050

5151
def test_oct():
52-
equal(r"\051", ")")
52+
assert_equal(r"\051", ")")
5353

5454

5555
def test_hex_dot():
56-
equal(r"\.30", "0")
56+
assert_equal(r"\.30", "0")
5757

5858

5959
def test_hex_colon():
60-
equal(r"\:0030", "0")
61-
equal(r"\:03B8", "\u03B8")
62-
equal(r"\:03b8", "\u03B8")
60+
assert_equal(r"\:0030", "0")
61+
assert_equal(r"\:03B8", "\u03B8")
62+
assert_equal(r"\:03b8", "\u03B8")
6363

6464

6565
def test_hex_vbar():
66-
equal(r"\|01D451", "\U0001D451")
66+
assert_equal(r"\|01D451", "\U0001D451")
6767

6868

6969
def test_incomplete():
70-
incomplete(r"\[")
71-
incomplete(r"\[Theta")
70+
assert_incomplete(r"\[")
71+
assert_incomplete(r"\[Theta")
7272

7373

74-
def test_invalid_oct():
75-
invalid(r"\093")
76-
invalid(r"\01")
74+
def test_invalid_octal():
75+
assert_invalid(r"\093")
76+
assert_invalid(r"\01")
7777

7878

7979
def test_invalid_colon():
80-
invalid(r"\:")
81-
invalid(r"\:A")
82-
invalid(r"\:01")
83-
invalid(r"\:A1")
84-
invalid(r"\:ak")
85-
invalid(r"\:A10")
86-
invalid(r"\:a1g")
87-
invalid(r"\:A1g9")
88-
invalid(r"\:01-2")
80+
assert_invalid(r"\:")
81+
assert_invalid(r"\:A")
82+
assert_invalid(r"\:01")
83+
assert_invalid(r"\:A1")
84+
assert_invalid(r"\:ak")
85+
assert_invalid(r"\:A10")
86+
assert_invalid(r"\:a1g")
87+
assert_invalid(r"\:A1g9")
88+
assert_invalid(r"\:01-2")
8989

9090

9191
def test_invalid_dot():
92-
invalid(r"\.")
93-
invalid(r"\.0")
92+
assert_invalid(r"\.")
93+
assert_invalid(r"\.0")
9494

9595

9696
def test_combined():
97-
equal(r"\:03B8\[Theta]\.30\052", "\u03B8\u03B80*")
97+
assert_equal(r"\:03B8\[Theta]\.30\052", "\u03B8\u03B80*")
9898

9999

100100
def test_nested():
101-
equal(r"\[Thet\141]", r"\[Thet\141]")
101+
assert_equal(r"\[Thet\141]", r"\[Thet\141]")
102102

103103

104104
def test_trailing_backslash():
105-
incomplete("x \\")
105+
assert_incomplete("x \\")

0 commit comments

Comments
 (0)