Merge pull request #48 from devchat-ai/update_workflows
Update workflows
This commit is contained in:
commit
accf557fe6
5
rewrite/command.yml
Normal file
5
rewrite/command.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
description: rewrite selected code.
|
||||||
|
hint: question
|
||||||
|
input: required
|
||||||
|
steps:
|
||||||
|
- run: $devchat_python $command_path/rewrite.py "$input"
|
3
rewrite/doc_comment/command.yml
Normal file
3
rewrite/doc_comment/command.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
description: add doc comment for selected code
|
||||||
|
steps:
|
||||||
|
- run: $devchat_python $command_path/../rewrite.py "add doc comment"
|
4
rewrite/optimize_names/command.yml
Normal file
4
rewrite/optimize_names/command.yml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
description: Optimizing variable and function names in code.
|
||||||
|
steps:
|
||||||
|
- run: $devchat_python $command_path/../rewrite.py "Refine internal variable and function names within the code to achieve concise and meaningful identifiers that comply with English naming conventions."
|
||||||
|
|
3
rewrite/optimize_string/command.yml
Normal file
3
rewrite/optimize_string/command.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
description: improve the readability and conformity of a given string to English language conventions.
|
||||||
|
steps:
|
||||||
|
- run: $devchat_python $command_path/../rewrite.py "enhance the given string's readability and ensure it adheres to English linguistic standards"
|
122
rewrite/rewrite.py
Normal file
122
rewrite/rewrite.py
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
import json
|
||||||
|
|
||||||
|
home = os.path.expanduser("~")
|
||||||
|
org_libs_path = os.path.join(home, ".chat", "workflows", "org", "libs")
|
||||||
|
sys_libs_path = os.path.join(home, ".chat", "workflows", "sys", "libs")
|
||||||
|
sys.path.append(org_libs_path)
|
||||||
|
sys.path.append(sys_libs_path)
|
||||||
|
|
||||||
|
from llm_api import chat_completion_stream # noqa: E402
|
||||||
|
from ide_services.services import visible_lines, selected_lines, diff_apply # noqa: E402
|
||||||
|
|
||||||
|
|
||||||
|
def create_prompt():
|
||||||
|
question = sys.argv[1]
|
||||||
|
|
||||||
|
visible_data = visible_lines()
|
||||||
|
selected_data = selected_lines()
|
||||||
|
|
||||||
|
file_path = visible_data["filePath"]
|
||||||
|
if not os.path.exists(file_path):
|
||||||
|
print("Current file is not valid filename:", file_path, file=sys.stderr, flush=True)
|
||||||
|
sys.exit(-1)
|
||||||
|
|
||||||
|
if selected_data["selectedText"] == "":
|
||||||
|
print("Please select some text.", file=sys.stderr, flush=True)
|
||||||
|
sys.exit(-1)
|
||||||
|
|
||||||
|
prompt = f"""
|
||||||
|
你的任务是:
|
||||||
|
{question}
|
||||||
|
根据任务要求,仅修改选中的代码部分。请确保修改后的代码段与选中的代码保持相同的缩进,\
|
||||||
|
以便与现有的代码结构无缝集成并保持正确的语法。只重构选中的代码。保留所有其他信息。\
|
||||||
|
以下是您参考的相关上下文信息:
|
||||||
|
1. 选中代码信息: {selected_data}
|
||||||
|
2. 可视窗口代码信息: {visible_data}
|
||||||
|
"""
|
||||||
|
return prompt
|
||||||
|
|
||||||
|
|
||||||
|
def extract_markdown_block(text):
|
||||||
|
"""
|
||||||
|
Extracts the first Markdown code block from the given text without the language specifier.
|
||||||
|
|
||||||
|
:param text: A string containing Markdown text
|
||||||
|
:return: The content of the first Markdown code block, or None if not found
|
||||||
|
"""
|
||||||
|
# 正则表达式匹配Markdown代码块,忽略可选的语言类型标记
|
||||||
|
pattern = r"```(?:\w+)?\s*\n(.*?)\n```"
|
||||||
|
match = re.search(pattern, text, re.DOTALL)
|
||||||
|
|
||||||
|
if match:
|
||||||
|
# 返回第一个匹配的代码块内容,去除首尾的反引号和语言类型标记
|
||||||
|
# 去除块结束标记前的一个换行符,但保留其他内容
|
||||||
|
block_content = match.group(1)
|
||||||
|
return block_content
|
||||||
|
else:
|
||||||
|
# 如果没有找到匹配项,返回None
|
||||||
|
return text
|
||||||
|
|
||||||
|
|
||||||
|
def replace_selected(new_code):
|
||||||
|
selected_data = selected_lines()
|
||||||
|
select_file = selected_data["filePath"]
|
||||||
|
select_range = selected_data["selectedRange"] # [start_line, start_col, end_line, end_col]
|
||||||
|
|
||||||
|
# Read the file
|
||||||
|
with open(select_file, "r") as file:
|
||||||
|
lines = file.readlines()
|
||||||
|
lines.append("\n")
|
||||||
|
|
||||||
|
# Modify the selected lines
|
||||||
|
start_line, start_col, end_line, end_col = select_range
|
||||||
|
|
||||||
|
# If the selection spans multiple lines, handle the last line and delete the lines in between
|
||||||
|
if start_line != end_line:
|
||||||
|
lines[start_line] = lines[start_line][:start_col] + new_code
|
||||||
|
# Append the text after the selection on the last line
|
||||||
|
lines[start_line] += lines[end_line][end_col:]
|
||||||
|
# Delete the lines between start_line and end_line
|
||||||
|
del lines[start_line + 1 : end_line + 1]
|
||||||
|
else:
|
||||||
|
# If the selection is within a single line, remove the selected text
|
||||||
|
lines[start_line] = lines[start_line][:start_col] + new_code + lines[end_line][end_col:]
|
||||||
|
|
||||||
|
# Combine everything back together
|
||||||
|
modified_text = "".join(lines)
|
||||||
|
|
||||||
|
# Write the changes back to the file
|
||||||
|
with open(select_file, "w") as file:
|
||||||
|
file.write(modified_text)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# messages = json.loads(
|
||||||
|
# os.environ.get("CONTEXT_CONTENTS", json.dumps([{"role": "user", "content": ""}]))
|
||||||
|
# )
|
||||||
|
messages = [{"role": "user", "content": create_prompt()}]
|
||||||
|
|
||||||
|
response = chat_completion_stream(messages, {"model": os.environ.get("LLM_MODEL", "gpt-3.5-turbo-1106")}, stream_out=True)
|
||||||
|
if not response:
|
||||||
|
sys.exit(-1)
|
||||||
|
print("\n")
|
||||||
|
new_code = extract_markdown_block(response["content"])
|
||||||
|
# Check if new_code is empty and handle the case appropriately
|
||||||
|
if not new_code:
|
||||||
|
print("Parsing result failed. Exiting with error code -1", file=sys.stderr)
|
||||||
|
sys.exit(-1)
|
||||||
|
|
||||||
|
# replace_selected(new_code)
|
||||||
|
selected_data = selected_lines()
|
||||||
|
select_file = selected_data["filePath"]
|
||||||
|
diff_apply("", new_code)
|
||||||
|
# print(response["content"], flush=True)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
# print("hello")
|
Loading…
x
Reference in New Issue
Block a user