33# Copyright (c) https://github.com/PyCQA/pylint/blob/main/CONTRIBUTORS.txt
44from __future__ import annotations
55
6- import json
7- from pathlib import Path , PurePosixPath
6+ from pathlib import PurePosixPath
87
9- from pylint .reporters .json_reporter import OldJsonExport
10- from pylint .testutils ._primer .primer_command import (
11- PackageData ,
12- PackageMessages ,
13- PrimerCommand ,
14- )
8+ from pylint .testutils ._primer .comparator import Comparator
9+ from pylint .testutils ._primer .primer_command import Messages , PrimerCommand
1510
1611MAX_GITHUB_COMMENT_LENGTH = 65536
1712
1813
1914class CompareCommand (PrimerCommand ):
2015 def run (self ) -> None :
21- main_data = self ._load_json (self .config .base_file )
22- pr_data = self ._load_json (self .config .new_file )
23- missing_messages_data , new_messages_data = self ._cross_reference (
24- main_data , pr_data
25- )
26- comment = self ._create_comment (missing_messages_data , new_messages_data )
16+ comparator = Comparator (self .config .base_file , self .config .new_file )
17+ comment = self ._create_comment (comparator )
2718 with open (self .primer_directory / "comment.txt" , "w" , encoding = "utf-8" ) as f :
2819 f .write (comment )
2920
30- @staticmethod
31- def _cross_reference (
32- main_data : PackageMessages , pr_data : PackageMessages
33- ) -> tuple [PackageMessages , PackageMessages ]:
34- missing_messages_data : PackageMessages = {}
35- for package , data in main_data .items ():
36- package_missing_messages : list [OldJsonExport ] = []
37- for message in data ["messages" ]:
38- try :
39- pr_data [package ]["messages" ].remove (message )
40- except ValueError :
41- package_missing_messages .append (message )
42- missing_messages_data [package ] = PackageData (
43- commit = pr_data [package ]["commit" ], messages = package_missing_messages
44- )
45- return missing_messages_data , pr_data
46-
47- @staticmethod
48- def _load_json (file_path : Path | str ) -> PackageMessages :
49- with open (file_path , encoding = "utf-8" ) as f :
50- result : PackageMessages = json .load (f )
51- return result
52-
53- def _create_comment (
54- self , all_missing_messages : PackageMessages , all_new_messages : PackageMessages
55- ) -> str :
21+ def _create_comment (self , comparator : Comparator ) -> str :
5622 comment = ""
57- for package , missing_messages in all_missing_messages . items () :
23+ for package , missing_messages , new_messages in comparator :
5824 if len (comment ) >= MAX_GITHUB_COMMENT_LENGTH :
5925 break
6026 new_messages = all_new_messages [package ]
6127 if not missing_messages ["messages" ] and not new_messages ["messages" ]:
6228 continue
6329 comment += self ._create_comment_for_package (
64- package , new_messages , missing_messages
30+ package , missing_messages , new_messages
6531 )
6632 comment = (
6733 f"🤖 **Effect of this PR on checked open source code:** 🤖\n \n { comment } "
@@ -74,7 +40,7 @@ def _create_comment(
7440 return self ._truncate_comment (comment )
7541
7642 def _create_comment_for_package (
77- self , package : str , new_messages : PackageData , missing_messages : PackageData
43+ self , package : str , missing_messages : Messages , new_messages : Messages
7844 ) -> str :
7945 comment = f"\n \n **Effect on [{ package } ]({ self .packages [package ].url } ):**\n "
8046 # Create comment for new messages
0 commit comments