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,6 +45,11 @@ 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
@@ -47,6 +58,22 @@ def get_functions_in_current_git_diff(
4758 server : CodeflashLanguageServer , _params : OptimizableFunctionsParams
4859) -> dict [str , str | dict [str , list [str ]]]:
4960 functions = get_functions_within_git_diff (uncommitted_changes = True )
61+ file_to_qualified_names = _group_functions_by_file (server , functions )
62+ return {"functions" : file_to_qualified_names , "status" : "success" }
63+
64+
65+ @server .feature ("getOptimizableFunctionsInCommit" )
66+ def get_functions_in_commit (
67+ server : CodeflashLanguageServer , params : OptimizableFunctionsInCommitParams
68+ ) -> dict [str , str | dict [str , list [str ]]]:
69+ functions = get_functions_inside_a_commit (params .commit_hash )
70+ file_to_qualified_names = _group_functions_by_file (server , functions )
71+ return {"functions" : file_to_qualified_names , "status" : "success" }
72+
73+
74+ def _group_functions_by_file (
75+ server : CodeflashLanguageServer , functions : dict [str , list [FunctionToOptimize ]]
76+ ) -> dict [str , list [str ]]:
5077 file_to_funcs_to_optimize , _ = filter_functions (
5178 modified_functions = functions ,
5279 tests_root = server .optimizer .test_cfg .tests_root ,
@@ -58,7 +85,7 @@ def get_functions_in_current_git_diff(
5885 file_to_qualified_names : dict [str , list [str ]] = {
5986 str (path ): [f .qualified_name for f in funcs ] for path , funcs in file_to_funcs_to_optimize .items ()
6087 }
61- return { "functions" : file_to_qualified_names , "status" : "success" }
88+ return file_to_qualified_names
6289
6390
6491@server .feature ("getOptimizableFunctions" )
0 commit comments