1313from codeflash .cli_cmds .cli import process_pyproject_config
1414from codeflash .code_utils .git_utils import create_diff_patch_from_worktree
1515from codeflash .code_utils .shell_utils import save_api_key_to_rc
16- from codeflash .discovery .functions_to_optimize import filter_functions , get_functions_within_git_diff
16+ from codeflash .discovery .functions_to_optimize import (
17+ filter_functions ,
18+ get_functions_inside_a_commit ,
19+ get_functions_within_git_diff ,
20+ )
1721from codeflash .either import is_successful
1822from codeflash .lsp .server import CodeflashLanguageServer , CodeflashLanguageServerProtocol
1923
2226
2327 from lsprotocol import types
2428
29+ from codeflash .discovery .functions_to_optimize import FunctionToOptimize
30+
2531
2632@dataclass
2733class OptimizableFunctionsParams :
@@ -39,9 +45,15 @@ class ProvideApiKeyParams:
3945 api_key : str
4046
4147
48+ @dataclass
49+ class OptimizableFunctionsInCommitParams :
50+ commit_hash : str
51+
52+
4253server = CodeflashLanguageServer ("codeflash-language-server" , "v1.0" , protocol_cls = CodeflashLanguageServerProtocol )
4354
4455
56+ # TODO: use _group_functions_by_file once https://github.com/codeflash-ai/codeflash/pull/688 is merged
4557@server .feature ("getOptimizableFunctionsInCurrentDiff" )
4658def get_functions_in_current_git_diff (
4759 server : CodeflashLanguageServer , _params : OptimizableFunctionsParams
@@ -59,6 +71,32 @@ def get_functions_in_current_git_diff(
5971 return {"functions" : qualified_names , "status" : "success" }
6072
6173
74+ @server .feature ("getOptimizableFunctionsInCommit" )
75+ def get_functions_in_commit (
76+ server : CodeflashLanguageServer , params : OptimizableFunctionsInCommitParams
77+ ) -> dict [str , str | dict [str , list [str ]]]:
78+ functions = get_functions_inside_a_commit (params .commit_hash )
79+ file_to_qualified_names = _group_functions_by_file (server , functions )
80+ return {"functions" : file_to_qualified_names , "status" : "success" }
81+
82+
83+ def _group_functions_by_file (
84+ _server : CodeflashLanguageServer , functions : dict [str , list [FunctionToOptimize ]]
85+ ) -> dict [str , list [str ]]:
86+ file_to_funcs_to_optimize , _ = filter_functions (
87+ modified_functions = functions ,
88+ tests_root = _server .optimizer .test_cfg .tests_root ,
89+ ignore_paths = [],
90+ project_root = _server .optimizer .args .project_root ,
91+ module_root = _server .optimizer .args .module_root ,
92+ previous_checkpoint_functions = {},
93+ )
94+ file_to_qualified_names : dict [str , list [str ]] = {
95+ str (path ): [f .qualified_name for f in funcs ] for path , funcs in file_to_funcs_to_optimize .items ()
96+ }
97+ return file_to_qualified_names
98+
99+
62100@server .feature ("getOptimizableFunctions" )
63101def get_optimizable_functions (
64102 server : CodeflashLanguageServer , params : OptimizableFunctionsParams
0 commit comments