Skip to content

Commit e959bc4

Browse files
committed
FIX: -- to reverse line
1 parent 277bf27 commit e959bc4

File tree

6 files changed

+57
-9
lines changed

6 files changed

+57
-9
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
name: "bmad setup"
2+
description: "Clone the latest bmad"
3+
runs:
4+
using: "composite"
5+
steps:
6+
- uses: actions/checkout@v5
7+
with:
8+
repository: bmad-sim/bmad-ecosystem
9+
fetch-depth: 1
10+
path: bmad-eco
11+
12+
- name: Set ACC_ROOT_DIR
13+
shell: bash -l {0}
14+
run: |
15+
echo "ACC_ROOT_DIR=$GITHUB_WORKSPACE/bmad-eco" >> $GITHUB_ENV

.github/workflows/test.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ jobs:
3737
with:
3838
fetch-depth: 0
3939

40+
- uses: ./.github/actions/bmad-setup # -> sets ACC_ROOT_DIR
41+
4042
- name: Set up Python ${{ matrix.python-version }}
4143
uses: actions/setup-python@v6
4244
with:

src/latform/parser.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,21 @@ def _nab_comments(items) -> Comments:
106106
return res
107107

108108

109+
def _line_elements_from_block(block: Block) -> Seq:
110+
if block.opener != "(":
111+
raise ValueError(f"Unexpected block opener: {block.opener}")
112+
113+
eles = Seq.from_delimited_block(block, delimiter=COMMA)
114+
assert isinstance(eles, Seq)
115+
for idx, ele in enumerate(list(eles.items)):
116+
match ele:
117+
case Seq(items=["-", "-", name]):
118+
assert isinstance(ele, Seq)
119+
eles.items[idx].items = [Delimiter("--"), name]
120+
121+
return eles
122+
123+
109124
def parse_items(items: list[TokenizerItem]):
110125
if not items:
111126
raise ValueError("No items provided")
@@ -151,14 +166,14 @@ def parse_items(items: list[TokenizerItem]):
151166
return ElementList(
152167
comments=comments,
153168
name=name,
154-
elements=Seq.from_delimited_block(elements_block, delimiter=COMMA),
169+
elements=_line_elements_from_block(elements_block),
155170
)
156171

157172
case [Token() as name, ":", Token("line"), "=", Block(opener="(") as elements_block]:
158173
return Line(
159174
comments=comments,
160175
name=name,
161-
elements=Seq.from_delimited_block(elements_block, delimiter=COMMA),
176+
elements=_line_elements_from_block(elements_block),
162177
)
163178

164179
case [
@@ -167,12 +182,12 @@ def parse_items(items: list[TokenizerItem]):
167182
Token("line"),
168183
Block(opener="[") as multipass,
169184
"=",
170-
Block(opener="(") as eles,
185+
Block(opener="(") as elements_block,
171186
] if _is_multipass_marker(multipass):
172187
return Line(
173188
comments=comments,
174189
name=name,
175-
elements=Seq.from_delimited_block(eles, delimiter=COMMA),
190+
elements=_line_elements_from_block(elements_block),
176191
multipass=True,
177192
)
178193

@@ -182,15 +197,15 @@ def parse_items(items: list[TokenizerItem]):
182197
":",
183198
Token("line"),
184199
"=",
185-
Block(opener="(") as eles,
200+
Block(opener="(") as elements_block,
186201
]:
187202
return Line(
188203
comments=comments,
189204
name=CallName(
190205
name=Seq.from_item(name),
191206
args=Seq.from_item(line_args),
192207
),
193-
elements=Seq.from_delimited_block(eles, delimiter=COMMA),
208+
elements=_line_elements_from_block(elements_block),
194209
)
195210

196211
case [Token() as name, ":", Token() as element_type, *rest]:

src/latform/tests/conftest.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
from __future__ import annotations
22

3+
import os
34
import pathlib
45

56
TEST_ROOT = pathlib.Path(__file__).resolve().parent
67
LATTICE_ROOT = TEST_ROOT / "files"
78
LATTICE_FILES = [
89
LATTICE_ROOT / "fodo.bmad",
910
]
11+
12+
ACC_ROOT_DIR = (
13+
pathlib.Path(os.environ.get("ACC_ROOT_DIR", "")) if "ACC_ROOT_DIR" in os.environ else None
14+
)
15+
16+
if ACC_ROOT_DIR is not None:
17+
LATTICE_FILES.extend([ACC_ROOT_DIR / "bmad-doc/lattices/figure_8/figure_8.bmad"])

src/latform/tests/test_output.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,16 @@ def test_format_element(item, expected):
318318
"ele: key, foo = call::/path/to/file",
319319
id="call_expr",
320320
),
321+
pytest.param(
322+
"ele: line = (a, b, c)",
323+
"ele: line = (a, b, c)",
324+
id="simple_line",
325+
),
326+
pytest.param(
327+
"ele: line = (a, b, c, --d, e, f)",
328+
"ele: line = (a, b, c, --d, e, f)",
329+
id="line_with_reverse",
330+
),
321331
],
322332
)
323333
def test_format_element_from_source(code: str, expected: str) -> None:

src/latform/tests/test_parse.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
EQUALS,
99
LBRACE,
1010
LPAREN,
11-
MINUS,
1211
OPEN_TO_CLOSE,
1312
RBRACE,
1413
RPAREN,
@@ -1361,8 +1360,7 @@ def roundtrip_code(code: str) -> None:
13611360
T("p1"),
13621361
Seq(
13631362
items=[
1364-
MINUS,
1365-
MINUS,
1363+
Delimiter("--"),
13661364
T("L3"),
13671365
],
13681366
delimiter=SPACE,

0 commit comments

Comments
 (0)