1212from flake8 .plugins import finder
1313
1414from finecode_extension_api import code_action
15- from finecode_extension_api .actions import lint as lint_action
15+ from finecode_extension_api .actions import lint_files as lint_files_action
1616from finecode_extension_api .interfaces import (
1717 icache ,
18- ifilemanager ,
18+ ifileeditor ,
1919 ilogger ,
2020 iprocessexecutor ,
2121)
2222
2323
24- def map_flake8_check_result_to_lint_message (result : tuple ) -> lint_action .LintMessage :
24+ def map_flake8_check_result_to_lint_message (result : tuple ) -> lint_files_action .LintMessage :
2525 error_code , line_number , column , text , physical_line = result
26- return lint_action .LintMessage (
27- range = lint_action .Range (
28- start = lint_action .Position (line = line_number , character = column ),
29- end = lint_action .Position (
26+ return lint_files_action .LintMessage (
27+ range = lint_files_action .Range (
28+ start = lint_files_action .Position (line = line_number , character = column ),
29+ end = lint_files_action .Position (
3030 line = line_number ,
3131 character = len (physical_line ) if physical_line is not None else column ,
3232 ),
@@ -35,9 +35,9 @@ def map_flake8_check_result_to_lint_message(result: tuple) -> lint_action.LintMe
3535 code = error_code ,
3636 source = "flake8" ,
3737 severity = (
38- lint_action .LintMessageSeverity .WARNING
38+ lint_files_action .LintMessageSeverity .WARNING
3939 if error_code .startswith ("W" )
40- else lint_action .LintMessageSeverity .ERROR
40+ else lint_files_action .LintMessageSeverity .ERROR
4141 ),
4242 )
4343
@@ -46,9 +46,9 @@ def run_flake8_on_single_file(
4646 file_path : Path ,
4747 file_content : str ,
4848 file_ast : ast .Module ,
49- config : Flake8LintHandlerConfig ,
50- ) -> list [lint_action .LintMessage ]:
51- lint_messages : list [lint_action .LintMessage ] = []
49+ config : Flake8LintFilesHandlerConfig ,
50+ ) -> list [lint_files_action .LintMessage ]:
51+ lint_messages : list [lint_files_action .LintMessage ] = []
5252 # flake8 expects lines with newline at the end
5353 file_lines = [line + "\n " for line in file_content .split ("\n " )]
5454 # TODO: investigate whether guide and decider can be reused. They cannot be
@@ -109,31 +109,34 @@ def run_flake8_on_single_file(
109109
110110
111111@dataclasses .dataclass
112- class Flake8LintHandlerConfig (code_action .ActionHandlerConfig ):
112+ class Flake8LintFilesHandlerConfig (code_action .ActionHandlerConfig ):
113113 max_line_length : int = 79
114114 select : list [str ] | None = None
115115 extend_select : list [str ] | None = None
116116 extend_ignore : list [str ] | None = None
117117
118118
119- class Flake8LintHandler (
120- code_action .ActionHandler [lint_action . LintAction , Flake8LintHandlerConfig ]
119+ class Flake8LintFilesHandler (
120+ code_action .ActionHandler [lint_files_action . LintFilesAction , Flake8LintFilesHandlerConfig ]
121121):
122122 CACHE_KEY = "flake8"
123+ FILE_OPERATION_AUTHOR = ifileeditor .FileOperationAuthor (
124+ id = "Flake8LintFilesHandler"
125+ )
123126
124127 def __init__ (
125128 self ,
126- config : Flake8LintHandlerConfig ,
129+ config : Flake8LintFilesHandlerConfig ,
127130 cache : icache .ICache ,
128131 logger : ilogger .ILogger ,
129- file_manager : ifilemanager . IFileManager ,
132+ file_editor : ifileeditor . IFileEditor ,
130133 ast_provider : iast_provider .IPythonSingleAstProvider ,
131134 process_executor : iprocessexecutor .IProcessExecutor ,
132135 ) -> None :
133136 self .config = config
134137 self .cache = cache
135138 self .logger = logger
136- self .file_manager = file_manager
139+ self .file_editor = file_editor
137140 self .ast_provider = ast_provider
138141 self .process_executor = process_executor
139142
@@ -145,19 +148,24 @@ def __init__(
145148
146149 async def run_on_single_file (
147150 self , file_path : Path
148- ) -> lint_action . LintRunResult | None :
151+ ) -> lint_files_action . LintFilesRunResult | None :
149152 messages = {}
150153 try :
151154 cached_lint_messages = await self .cache .get_file_cache (
152155 file_path , self .CACHE_KEY
153156 )
154157 messages [str (file_path )] = cached_lint_messages
155- return lint_action . LintRunResult (messages = messages )
158+ return lint_files_action . LintFilesRunResult (messages = messages )
156159 except icache .CacheMissException :
157160 pass
158161
159- file_content = await self .file_manager .get_content (file_path )
160- file_version = await self .file_manager .get_file_version (file_path )
162+ async with self .file_editor .session (
163+ author = self .FILE_OPERATION_AUTHOR
164+ ) as session :
165+ async with session .read_file (file_path = file_path ) as file_info :
166+ file_content : str = file_info .content
167+ file_version : str = file_info .version
168+
161169 try :
162170 file_ast = await self .ast_provider .get_file_ast (file_path = file_path )
163171 except SyntaxError :
@@ -175,11 +183,11 @@ async def run_on_single_file(
175183 file_path , file_version , self .CACHE_KEY , lint_messages
176184 )
177185
178- return lint_action . LintRunResult (messages = messages )
186+ return lint_files_action . LintFilesRunResult (messages = messages )
179187
180188 async def run (
181189 self ,
182- payload : lint_action . LintRunPayload ,
190+ payload : lint_files_action . LintFilesRunPayload ,
183191 run_context : code_action .RunActionWithPartialResultsContext ,
184192 ) -> None :
185193 if self .config .select is not None and len (self .config .select ) == 0 :
0 commit comments