|
3 | 3 | # Copyright (c) https://github.com/pylint-dev/pylint/blob/main/CONTRIBUTORS.txt |
4 | 4 | from __future__ import annotations |
5 | 5 |
|
6 | | -import json |
7 | | -from pathlib import Path, PurePosixPath |
| 6 | +from pathlib import PurePosixPath |
8 | 7 |
|
9 | | -from pylint.reporters.json_reporter import OldJsonExport |
| 8 | +from pylint.testutils._primer.comparator import PylintComparator |
10 | 9 | from pylint.testutils._primer.primer_command import ( |
11 | 10 | PackageData, |
12 | | - PackageMessages, |
13 | 11 | PrimerCommand, |
14 | 12 | ) |
15 | 13 |
|
|
19 | 17 | class CompareCommand(PrimerCommand): |
20 | 18 | def run(self) -> None: |
21 | 19 | if self.config.batches is None: |
22 | | - main_data = self._load_json(self.config.base_file) |
23 | | - pr_data = self._load_json(self.config.new_file) |
| 20 | + main_data = PylintComparator.load_json(self.config.base_file) |
| 21 | + pr_data = PylintComparator.load_json(self.config.new_file) |
24 | 22 | else: |
25 | 23 | main_data = {} |
26 | 24 | pr_data = {} |
27 | 25 | for idx in range(self.config.batches): |
28 | 26 | main_data.update( |
29 | | - self._load_json( |
| 27 | + PylintComparator.load_json( |
30 | 28 | self.config.base_file.replace("BATCHIDX", "batch" + str(idx)) |
31 | 29 | ) |
32 | 30 | ) |
33 | 31 | pr_data.update( |
34 | | - self._load_json( |
| 32 | + PylintComparator.load_json( |
35 | 33 | self.config.new_file.replace("BATCHIDX", "batch" + str(idx)) |
36 | 34 | ) |
37 | 35 | ) |
38 | 36 |
|
39 | | - missing_messages_data, new_messages_data = self._cross_reference( |
40 | | - main_data, pr_data |
41 | | - ) |
42 | | - comment = self._create_comment(missing_messages_data, new_messages_data) |
| 37 | + comparator = PylintComparator(main_data, pr_data) |
| 38 | + comment = self._create_comment(comparator) |
43 | 39 | with open(self.primer_directory / "comment.txt", "w", encoding="utf-8") as f: |
44 | 40 | f.write(comment) |
45 | 41 |
|
46 | | - @staticmethod |
47 | | - def _cross_reference( |
48 | | - main_data: PackageMessages, pr_data: PackageMessages |
49 | | - ) -> tuple[PackageMessages, PackageMessages]: |
50 | | - missing_messages_data: PackageMessages = {} |
51 | | - for package, data in main_data.items(): |
52 | | - package_missing_messages: list[OldJsonExport] = [] |
53 | | - for message in data["messages"]: |
54 | | - try: |
55 | | - pr_data[package]["messages"].remove(message) |
56 | | - except ValueError: |
57 | | - package_missing_messages.append(message) |
58 | | - missing_messages_data[package] = PackageData( |
59 | | - commit=pr_data[package]["commit"], messages=package_missing_messages |
60 | | - ) |
61 | | - return missing_messages_data, pr_data |
62 | | - |
63 | | - @staticmethod |
64 | | - def _load_json(file_path: Path | str) -> PackageMessages: |
65 | | - with open(file_path, encoding="utf-8") as f: |
66 | | - result: PackageMessages = json.load(f) |
67 | | - return result |
68 | | - |
69 | | - def _create_comment( |
70 | | - self, all_missing_messages: PackageMessages, all_new_messages: PackageMessages |
71 | | - ) -> str: |
| 42 | + def _create_comment(self, comparator: PylintComparator) -> str: |
72 | 43 | comment = "" |
73 | | - for package, missing_messages in all_missing_messages.items(): |
| 44 | + for package, missing_messages, new_messages in comparator: |
74 | 45 | if len(comment) >= MAX_GITHUB_COMMENT_LENGTH: |
75 | 46 | break |
76 | | - new_messages = all_new_messages[package] |
77 | | - if not missing_messages["messages"] and not new_messages["messages"]: |
78 | | - continue |
79 | 47 | comment += self._create_comment_for_package( |
80 | 48 | package, new_messages, missing_messages |
81 | 49 | ) |
|
0 commit comments