From 78d487491de73010fa6dc6f938fef6e2650c34af Mon Sep 17 00:00:00 2001 From: Antonis Loukis Date: Sat, 22 Aug 2026 13:39:09 +0300 Subject: [PATCH] Support up to 8 languages --- README.md | 9 +++--- config.json | 2 +- scripts/generate_stats.py | 14 ++++----- tests/test_generate_stats.py | 56 +++++++++++++++++++++++++++++++++++- 4 files changed, 68 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 409532e..3c623ff 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ Default configuration: ```json { "output_path": "assets/github-stats.svg", - "max_languages": 6, + "max_languages": 8, "exclude_languages": [], "theme": { "background": "#0d1117", @@ -175,18 +175,19 @@ Default configuration: ### Number of languages -Display between one and six language entries: +Display between one and eight language entries: ```json -"max_languages": 6 +"max_languages": 8 ``` Supported values: ```text -1–6 +1–8 ``` +With eight entries, the language legend is displayed in two columns with four rows each. When more languages exist than the configured limit, the remaining languages are grouped under `Other`. ### Exclude languages diff --git a/config.json b/config.json index b1bedc9..dda428d 100644 --- a/config.json +++ b/config.json @@ -1,6 +1,6 @@ { "output_path": "assets/github-stats.svg", - "max_languages": 6, + "max_languages": 8, "exclude_languages": [], "theme": { "background": "#0d1117", diff --git a/scripts/generate_stats.py b/scripts/generate_stats.py index f18d67a..1658760 100644 --- a/scripts/generate_stats.py +++ b/scripts/generate_stats.py @@ -20,7 +20,7 @@ DEFAULT_CONFIG: dict[str, Any] = { "username": "", "output_path": "assets/github-stats.svg", - "max_languages": 6, + "max_languages": 8, "exclude_languages": [], "theme": { "background": "#0d1117", @@ -422,13 +422,13 @@ def load_config( ] if ( - not isinstance(max_languages, int) - or isinstance(max_languages, bool) - or not 1 <= max_languages <= 6 + not isinstance(max_languages, int) + or isinstance(max_languages, bool) + or not 1 <= max_languages <= 8 ): raise ConfigurationError( - "'max_languages' must be an " - "integer from 1 to 6." + "'max_languages' must be an " + "integer from 1 to 8." ) excluded = config[ @@ -1196,7 +1196,7 @@ def build_language_svg( legend_y = ( bar_y + 34 - + row * 31 + + row * 26 ) legend.append( diff --git a/tests/test_generate_stats.py b/tests/test_generate_stats.py index 86f9123..2999e26 100644 --- a/tests/test_generate_stats.py +++ b/tests/test_generate_stats.py @@ -80,6 +80,24 @@ def test_load_config_merges_defaults(self) -> None: "", ) + def test_eight_languages_are_allowed( + self, + ) -> None: + with tempfile.TemporaryDirectory() as directory: + path = self.write_config( + directory, + { + "max_languages": 8, + }, + ) + + config = generator.load_config(path) + + self.assertEqual( + config["max_languages"], + 8, + ) + def test_invalid_language_limit_is_rejected( self, ) -> None: @@ -87,7 +105,7 @@ def test_invalid_language_limit_is_rejected( path = self.write_config( directory, { - "max_languages": 7, + "max_languages": 9, }, ) @@ -414,6 +432,42 @@ def make_stats(self) -> dict: ], } + def test_language_legend_supports_eight_entries( + self, + ) -> None: + languages = [ + { + "name": f"Language {index}", + "percentage": 12.5, + "color": "#58a6ff", + } + for index in range(1, 9) + ] + + _, legend = generator.build_language_svg( + languages, + bar_x=535, + bar_y=98, + bar_width=405, + bar_height=7, + muted="#8b949e", + ) + + self.assertEqual( + legend.count(" None: