From a5680bb3bcc68f59362f71040c170749e10308d7 Mon Sep 17 00:00:00 2001 From: Boming Zhang Date: Wed, 5 Mar 2025 02:33:10 -0500 Subject: [PATCH] perf: better keyword time complexity --- joj3_config_generator/processers/task.py | 22 ++++----- tests/convert/basic/task.json | 60 ++++++++++++------------ tests/convert/clang-tidy/task.json | 28 +++++------ tests/convert/cppcheck/task.json | 12 ++--- tests/convert/cpplint/task.json | 8 ++-- tests/convert/keyword/task.json | 12 ++--- 6 files changed, 69 insertions(+), 73 deletions(-) diff --git a/joj3_config_generator/processers/task.py b/joj3_config_generator/processers/task.py index d18b341..c398acb 100644 --- a/joj3_config_generator/processers/task.py +++ b/joj3_config_generator/processers/task.py @@ -102,19 +102,15 @@ def get_executor_with( def fix_keyword( keyword_config: task.ParserKeyword, keyword_parser: result.Parser ) -> None: - keyword_weight: List[result.KeywordConfig] = [] - unique_weight = list(set(keyword_config.weight)) - for score in unique_weight: - keyword_weight.append(result.KeywordConfig(keywords=[], score=score)) - - for idx, score in enumerate(unique_weight): - for idx_, score_ in enumerate(keyword_config.weight): - if score == score_: - keyword_weight[idx].keywords.append(keyword_config.keyword[idx_]) - else: - continue - - keyword_parser.with_ = result.KeywordMatchConfig(matches=keyword_weight) + score_groups: Dict[int, List[str]] = {} + for keyword, score in zip(keyword_config.keyword, keyword_config.weight): + score_groups.setdefault(score, []).append(keyword) + keyword_parser.with_ = result.KeywordMatchConfig( + matches=[ + result.KeywordConfig(keywords=keywords, score=score) + for score, keywords in score_groups.items() + ] + ) def fix_result_detail( diff --git a/tests/convert/basic/task.json b/tests/convert/basic/task.json index 9ba8402..0580b0d 100644 --- a/tests/convert/basic/task.json +++ b/tests/convert/basic/task.json @@ -249,17 +249,17 @@ "name": "keyword", "with": { "matches": [ - { - "keywords": [ - "recommended" - ], - "score": 10 - }, { "keywords": [ "max" ], "score": 20 + }, + { + "keywords": [ + "recommended" + ], + "score": 10 } ] } @@ -349,20 +349,6 @@ "name": "clangtidy", "with": { "matches": [ - { - "keywords": [ - "readability-function-size" - ], - "score": 10 - }, - { - "keywords": [ - "codequality-no-global-variables", - "codequality-no-header-guard", - "codequality-no-fflush-stdin" - ], - "score": 20 - }, { "keywords": [ "codequality-unchecked-malloc-result", @@ -381,6 +367,20 @@ ], "score": 5 }, + { + "keywords": [ + "codequality-no-global-variables", + "codequality-no-header-guard", + "codequality-no-fflush-stdin" + ], + "score": 20 + }, + { + "keywords": [ + "readability-function-size" + ], + "score": 10 + }, { "keywords": [ "readability-misleading-indentation" @@ -477,6 +477,12 @@ "name": "cppcheck", "with": { "matches": [ + { + "keywords": [ + "error" + ], + "score": 15 + }, { "keywords": [ "warning", @@ -485,12 +491,6 @@ "style" ], "score": 5 - }, - { - "keywords": [ - "error" - ], - "score": 15 } ] } @@ -618,9 +618,9 @@ "matches": [ { "keywords": [ - "build" + "runtime" ], - "score": 10 + "score": 5 }, { "keywords": [ @@ -630,9 +630,9 @@ }, { "keywords": [ - "runtime" + "build" ], - "score": 5 + "score": 10 } ] } diff --git a/tests/convert/clang-tidy/task.json b/tests/convert/clang-tidy/task.json index 9b848af..8603816 100644 --- a/tests/convert/clang-tidy/task.json +++ b/tests/convert/clang-tidy/task.json @@ -77,20 +77,6 @@ "name": "clangtidy", "with": { "matches": [ - { - "keywords": [ - "readability-function-size" - ], - "score": 10 - }, - { - "keywords": [ - "codequality-no-global-variables", - "codequality-no-header-guard", - "codequality-no-fflush-stdin" - ], - "score": 20 - }, { "keywords": [ "codequality-unchecked-malloc-result", @@ -109,6 +95,20 @@ ], "score": 5 }, + { + "keywords": [ + "codequality-no-global-variables", + "codequality-no-header-guard", + "codequality-no-fflush-stdin" + ], + "score": 20 + }, + { + "keywords": [ + "readability-function-size" + ], + "score": 10 + }, { "keywords": [ "readability-misleading-indentation" diff --git a/tests/convert/cppcheck/task.json b/tests/convert/cppcheck/task.json index 6d79c22..f6e3f9e 100644 --- a/tests/convert/cppcheck/task.json +++ b/tests/convert/cppcheck/task.json @@ -70,6 +70,12 @@ "name": "cppcheck", "with": { "matches": [ + { + "keywords": [ + "error" + ], + "score": 15 + }, { "keywords": [ "warning", @@ -78,12 +84,6 @@ "style" ], "score": 5 - }, - { - "keywords": [ - "error" - ], - "score": 15 } ] } diff --git a/tests/convert/cpplint/task.json b/tests/convert/cpplint/task.json index 979e709..142343b 100644 --- a/tests/convert/cpplint/task.json +++ b/tests/convert/cpplint/task.json @@ -71,9 +71,9 @@ "matches": [ { "keywords": [ - "build" + "runtime" ], - "score": 10 + "score": 5 }, { "keywords": [ @@ -83,9 +83,9 @@ }, { "keywords": [ - "runtime" + "build" ], - "score": 5 + "score": 10 } ] } diff --git a/tests/convert/keyword/task.json b/tests/convert/keyword/task.json index dfbd28e..6265365 100644 --- a/tests/convert/keyword/task.json +++ b/tests/convert/keyword/task.json @@ -72,17 +72,17 @@ "name": "keyword", "with": { "matches": [ - { - "keywords": [ - "recommended" - ], - "score": 10 - }, { "keywords": [ "max" ], "score": 20 + }, + { + "keywords": [ + "recommended" + ], + "score": 10 } ] }