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
8-
9- from pylint .testutils ._primer .primer_command import PackageMessages , PrimerCommand
6+ from pylint .testutils ._primer .comparator import Comparator
7+ from pylint .testutils ._primer .primer_command import Messages , PrimerCommand
108
119MAX_GITHUB_COMMENT_LENGTH = 65536
1210
1311
1412class CompareCommand (PrimerCommand ):
1513 def run (self ) -> None :
16- main_messages = self ._load_json (self .config .base_file )
17- pr_messages = self ._load_json (self .config .new_file )
18- missing_messages , new_messages = self ._cross_reference (
19- main_messages , pr_messages
20- )
21- comment = self ._create_comment (missing_messages , new_messages )
14+ comparator = Comparator (self .config .base_file , self .config .new_file )
15+ comment = self ._create_comment (comparator )
2216 with open (self .primer_directory / "comment.txt" , "w" , encoding = "utf-8" ) as f :
2317 f .write (comment )
2418
25- @staticmethod
26- def _cross_reference (
27- main_dict : PackageMessages , pr_messages : PackageMessages
28- ) -> tuple [PackageMessages , PackageMessages ]:
29- missing_messages : PackageMessages = {}
30- for package , messages in main_dict .items ():
31- missing_messages [package ] = []
32- for message in messages :
33- try :
34- pr_messages [package ].remove (message )
35- except ValueError :
36- missing_messages [package ].append (message )
37- return missing_messages , pr_messages
38-
39- @staticmethod
40- def _load_json (file_path : Path | str ) -> PackageMessages :
41- with open (file_path , encoding = "utf-8" ) as f :
42- result : PackageMessages = json .load (f )
43- return result
44-
45- def _create_comment (
46- self , all_missing_messages : PackageMessages , all_new_messages : PackageMessages
47- ) -> str :
19+ def _create_comment (self , comparator : Comparator ) -> str :
4820 comment = ""
49- for package , missing_messages in all_missing_messages . items () :
21+ for package , missing_messages , new_messages in comparator :
5022 if len (comment ) >= MAX_GITHUB_COMMENT_LENGTH :
5123 break
52- new_messages = all_new_messages [package ]
53- if not missing_messages and not new_messages :
54- continue
5524 comment += self ._create_comment_for_package (
56- package , new_messages , missing_messages
25+ package , missing_messages , new_messages
5726 )
5827 if comment == "" :
5928 comment = (
@@ -67,7 +36,7 @@ def _create_comment(
6736 return self ._truncate_comment (comment )
6837
6938 def _create_comment_for_package (
70- self , package : str , new_messages , missing_messages
39+ self , package : str , missing_messages : Messages , new_messages : Messages
7140 ) -> str :
7241 comment = f"\n \n **Effect on [{ package } ]({ self .packages [package ].url } ):**\n "
7342 # Create comment for new messages
0 commit comments