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 , PurePosixPath
6
+ from pathlib import PurePosixPath
8
7
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
15
10
16
11
MAX_GITHUB_COMMENT_LENGTH = 65536
17
12
18
13
19
14
class CompareCommand (PrimerCommand ):
20
15
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 )
27
18
with open (self .primer_directory / "comment.txt" , "w" , encoding = "utf-8" ) as f :
28
19
f .write (comment )
29
20
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 :
56
22
comment = ""
57
- for package , missing_messages in all_missing_messages . items () :
23
+ for package , missing_messages , new_messages in comparator :
58
24
if len (comment ) >= MAX_GITHUB_COMMENT_LENGTH :
59
25
break
60
26
new_messages = all_new_messages [package ]
61
27
if not missing_messages ["messages" ] and not new_messages ["messages" ]:
62
28
continue
63
29
comment += self ._create_comment_for_package (
64
- package , new_messages , missing_messages
30
+ package , missing_messages , new_messages
65
31
)
66
32
comment = (
67
33
f"🤖 **Effect of this PR on checked open source code:** 🤖\n \n { comment } "
@@ -74,7 +40,7 @@ def _create_comment(
74
40
return self ._truncate_comment (comment )
75
41
76
42
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
78
44
) -> str :
79
45
comment = f"\n \n **Effect on [{ package } ]({ self .packages [package ].url } ):**\n "
80
46
# Create comment for new messages
0 commit comments