import os import about import display import download import forms import query import repo import streamlit as st import utils env_file_path = ".env" log_file = "app.log" temp_dir = "/tmp/chatgpt-code-review" def app(): utils.load_environment_variables(env_file_path) utils.set_environment_variables() utils.configure_logging(log_file) with utils.TempDirContext(temp_dir): st.set_page_config( page_title="ChatGPT Code Review", ) session_state = st.session_state st.title("ChatGPT Code Review :rocket:") with st.expander("About ChatGPT Code Review"): st.markdown(about.about_section, unsafe_allow_html=True) st.write("") default_repo_url = "https://github.com/domvwt/chatgpt-code-review" repo_form = forms.RepoForm(default_repo_url) with st.form("repo_url_form"): repo_form.display_form() repo_url, extensions = repo_form.get_form_data() analyze_files_form = forms.AnalyzeFilesForm(session_state) with st.form("analyze_files_form"): if repo_form.clone_repo_button or session_state.get("code_files"): if not session_state.get("code_files"): session_state.code_files = ( repo.list_code_files_in_repository( repo_url, extensions ) ) analyze_files_form.display_form() # Analyze the selected files with st.spinner("Analyzing files..."): if session_state.get("analyze_files"): if session_state.get("selected_files"): recommendations = query.analyze_code_files( session_state.selected_files ) # Display the recommendations st.header("Recommendations") first = True recommendation_list = [] for rec in recommendations: if not first: st.write("---") else: first = False st.subheader(display.escape_markdown(rec["code_file"])) recommendation = ( rec["recommendation"] or "No recommendations" ) st.markdown(recommendation) with st.expander("View Code"): extension = os.path.splitext(rec["code_file"])[1] display.display_code( rec["code_snippet"], extension ) recommendation_list.append(rec) if recommendation_list: session_state.recommendation_list = recommendation_list else: st.error("Please select at least one file to analyze.") st.stop() st.write("") download.download_markdown(session_state.get("recommendation_list")) if __name__ == "__main__": app()