Skip to content

Commit 278e04f

Browse files
SCANPY-164 Allow the use of kebab cases for all properties in pyproject.toml
1 parent 3cf8570 commit 278e04f

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

src/pysonar_scanner/configuration/pyproject_toml.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ def __read_sonar_properties(toml_dict) -> Dict[str, str]:
6464
sonar_config = toml_dict["tool"]["sonar"]
6565
python_to_java_names = {prop.python_name(): prop.name for prop in properties.PROPERTIES}
6666
flattened_sonar_config = TomlConfigurationLoader.__flatten_config_dict(sonar_config, prefix="sonar.")
67-
return {python_to_java_names.get(key, key): value for key, value in flattened_sonar_config.items()}
67+
return {
68+
python_to_java_names.get(key, TomlConfigurationLoader.__kebab_to_camel_case(key)): value
69+
for key, value in flattened_sonar_config.items()
70+
}
6871
return {}
6972

7073
@staticmethod
@@ -105,3 +108,8 @@ def __convert_arrays_to_string(property) -> str:
105108
return ",".join(str(item) for item in property)
106109
else:
107110
return property
111+
112+
@staticmethod
113+
def __kebab_to_camel_case(key: str) -> str:
114+
parts = key.split("-")
115+
return parts[0] + "".join(word.capitalize() for word in parts[1:])

tests/unit/test_pyproject_toml.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,22 @@ def test_load_toml_file_kebab_case(self):
6565
self.assertEqual(properties.sonar_properties.get("sonar.projectKey"), "my-project")
6666
self.assertEqual(properties.sonar_properties.get("sonar.projectName"), "My Project")
6767

68+
def test_load_toml_file_kebab_case_unknown_properties(self):
69+
self.fs.create_file(
70+
"pyproject.toml",
71+
contents="""
72+
[tool.sonar]
73+
coverage-report-paths = "coverage.xml"
74+
some-unknown-property = "some-value"
75+
nested-property.some-nested-key = "nested-value"
76+
""",
77+
)
78+
properties = TomlConfigurationLoader.load(Path("."))
79+
80+
self.assertEqual(properties.sonar_properties.get("sonar.coverageReportPaths"), "coverage.xml")
81+
self.assertEqual(properties.sonar_properties.get("sonar.someUnknownProperty"), "some-value")
82+
self.assertEqual(properties.sonar_properties.get("sonar.nestedProperty.someNestedKey"), "nested-value")
83+
6884
def test_load_toml_file_without_sonar_section(self):
6985
self.fs.create_file(
7086
"pyproject.toml",

0 commit comments

Comments
 (0)