Skip to content

Commit 55b141c

Browse files
authored
Merge pull request #693 from Fortran-FOSS-Programmers/override-fixed-extensions
Raise error if fixed-form extension also appears in `extensions`
2 parents f420a03 + 7bbe556 commit 55b141c

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

ford/settings.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,12 @@ def __post_init__(self):
222222
if get_origin(default_type) is list and not isinstance(value, list):
223223
setattr(self, key, [value])
224224

225+
for fixed_extension in self.fixed_extensions:
226+
if fixed_extension in self.extensions:
227+
raise ValueError(
228+
f"Fixed-form extension '{fixed_extension}' also appears in free-form extension list (`extensions = {self.extensions}`)"
229+
)
230+
225231
self.display = [item.lower() for item in self.display]
226232
self.extensions = list(set(self.extensions) | set(self.fpp_extensions))
227233
self.exclude_dir.append(self.output_dir)
@@ -304,7 +310,10 @@ def load_toml_settings(directory: PathLike) -> Optional[ProjectSettings]:
304310
return None
305311

306312
print(f"Reading Ford options from {filename.absolute()}")
307-
return ProjectSettings(**settings["extra"]["ford"])
313+
try:
314+
return ProjectSettings(**settings["extra"]["ford"])
315+
except ValueError as e:
316+
raise ValueError(f"Error parsing settings from '{filename}': {e}")
308317

309318

310319
def load_markdown_settings(
@@ -326,7 +335,12 @@ def load_markdown_settings(
326335
include_preprocessor = IncludePreprocessor(None, configs)
327336
settings[option] = "\n".join(include_preprocessor.run(value.splitlines()))
328337

329-
return ProjectSettings.from_markdown_metadata(settings), "\n".join(project_lines)
338+
try:
339+
return ProjectSettings.from_markdown_metadata(settings), "\n".join(
340+
project_lines
341+
)
342+
except ValueError as e:
343+
raise ValueError(f"Error parsing settings from '{filename}': {e}")
330344

331345

332346
def convert_setting(default_type: Type, key: str, value: Any) -> Any:

test/test_settings.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,21 @@ def test_extra_filetype_error():
144144

145145
with pytest.raises(ValueError):
146146
ExtraFileType.from_string("c // c lexer")
147+
148+
149+
def test_duplicated_fixed_extension():
150+
text = dedent(
151+
'''\
152+
project = "some project"
153+
src_dir = "source"
154+
summary = """
155+
first
156+
second"""
157+
preprocess = true
158+
fpp_extensions = ["fpp", "F90"]
159+
fixed_extensions = ["f"]
160+
extensions = ["f90", "f"]
161+
'''
162+
)
163+
with pytest.raises(ValueError):
164+
ProjectSettings(**tomllib.loads(text))

0 commit comments

Comments
 (0)