3
3
# Copyright (c) https://github.com/PyCQA/pylint/blob/main/CONTRIBUTORS.txt
4
4
from __future__ import annotations
5
5
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
10
8
11
9
MAX_GITHUB_COMMENT_LENGTH = 65536
12
10
13
11
14
12
class CompareCommand (PrimerCommand ):
15
13
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 )
22
16
with open (self .primer_directory / "comment.txt" , "w" , encoding = "utf-8" ) as f :
23
17
f .write (comment )
24
18
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 :
48
20
comment = ""
49
- for package , missing_messages in all_missing_messages . items () :
21
+ for package , missing_messages , new_messages in comparator :
50
22
if len (comment ) >= MAX_GITHUB_COMMENT_LENGTH :
51
23
break
52
- new_messages = all_new_messages [package ]
53
- if not missing_messages and not new_messages :
54
- continue
55
24
comment += self ._create_comment_for_package (
56
25
package , new_messages , missing_messages
57
26
)
@@ -67,7 +36,7 @@ def _create_comment(
67
36
return self ._truncate_comment (comment )
68
37
69
38
def _create_comment_for_package (
70
- self , package : str , new_messages , missing_messages
39
+ self , package : str , new_messages : Messages , missing_messages : Messages
71
40
) -> str :
72
41
comment = f"\n \n **Effect on [{ package } ]({ self .packages [package ].url } ):**\n "
73
42
# Create comment for new messages
0 commit comments