DeL-TaiseiOzaki commited on
Commit
27ed0b5
·
verified ·
1 Parent(s): a55e676

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -9
app.py CHANGED
@@ -4,10 +4,10 @@ import git
4
  import os
5
  from pathlib import Path
6
  from datetime import datetime
 
7
  from config.settings import Settings
8
  from core.file_scanner import FileScanner, FileInfo
9
  from services.llm_service import LLMService
10
- from typing import List, Set, Optional
11
  from main import DirectoryStructureScanner, MarkdownGenerator
12
 
13
  class StreamlitFileWriter:
@@ -26,12 +26,14 @@ class StreamlitFileWriter:
26
  content.append("\n")
27
  return "\n".join(content)
28
 
 
29
  st.set_page_config(
30
  page_title="Repository Code Analysis",
31
  page_icon="🔍",
32
  layout="wide"
33
  )
34
 
 
35
  st.markdown("""
36
  <style>
37
  .stApp {
@@ -88,31 +90,61 @@ if 'llm_service' not in st.session_state:
88
  st.error(str(e))
89
  st.stop()
90
 
 
91
  st.title("🔍 リポジトリ解析・質問システム")
92
 
 
93
  with st.sidebar:
94
  st.subheader("📌 使い方")
95
  st.markdown("""
96
  1. GitHubリポジトリのURLを入力
97
- 2. スキャンを実行
98
- 3. ディレクトリ構造と内容を確認
99
- 4. Markdownファイルをダウンロード
100
- 5. コードについて質問
 
101
  """)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
 
 
103
  repo_url = st.text_input(
104
  "GitHubリポジトリのURLを入力",
105
  placeholder="https://github.com/username/repository.git"
106
  )
107
 
 
108
  if st.button("スキャン開始", disabled=not repo_url):
109
  try:
110
  with st.spinner('リポジトリを解析中...'):
111
- # サイドバーで選択された拡張子を使用
112
  selected_extensions = {ext for exts in [selected_prog, selected_config, selected_doc]
113
- for ext, selected in exts.items() if selected} or Settings.DEFAULT_EXTENSIONS
 
 
 
 
114
 
115
- # 選択された拡張子を使用してMarkdownGeneratorを初期化
116
  generator = MarkdownGenerator(repo_url, selected_extensions)
117
  content_md, structure_md, files = generator.generate_markdowns()
118
 
@@ -130,6 +162,7 @@ if st.button("スキャン開始", disabled=not repo_url):
130
  except Exception as e:
131
  st.error(f"エラーが発生しました: {str(e)}")
132
 
 
133
  if st.session_state.structure_md and st.session_state.content_md:
134
  tab1, tab2 = st.tabs(["📁 ディレクトリ構造", "📄 ファイル内容"])
135
 
@@ -155,10 +188,12 @@ if st.session_state.structure_md and st.session_state.content_md:
155
  mime="text/markdown"
156
  )
157
 
 
158
  if st.session_state.repo_content:
159
  st.divider()
160
  st.subheader("💭 コードについて質問する")
161
 
 
162
  for message in st.session_state.llm_service.conversation_history:
163
  if message.role == "assistant":
164
  st.markdown(f'<div class="chat-message assistant-message">{message.content}</div>',
@@ -186,4 +221,4 @@ if st.session_state.repo_content:
186
  if error:
187
  st.error(error)
188
  else:
189
- st.rerun()
 
4
  import os
5
  from pathlib import Path
6
  from datetime import datetime
7
+ from typing import List, Set, Optional
8
  from config.settings import Settings
9
  from core.file_scanner import FileScanner, FileInfo
10
  from services.llm_service import LLMService
 
11
  from main import DirectoryStructureScanner, MarkdownGenerator
12
 
13
  class StreamlitFileWriter:
 
26
  content.append("\n")
27
  return "\n".join(content)
28
 
29
+ # ページ設定
30
  st.set_page_config(
31
  page_title="Repository Code Analysis",
32
  page_icon="🔍",
33
  layout="wide"
34
  )
35
 
36
+ # スタイル設定
37
  st.markdown("""
38
  <style>
39
  .stApp {
 
90
  st.error(str(e))
91
  st.stop()
92
 
93
+ # メインのUIレイアウト
94
  st.title("🔍 リポジトリ解析・質問システム")
95
 
96
+ # サイドバーの設定
97
  with st.sidebar:
98
  st.subheader("📌 使い方")
99
  st.markdown("""
100
  1. GitHubリポジトリのURLを入力
101
+ 2. スキャン対象の拡張子を選択
102
+ 3. スキャンを実行
103
+ 4. ディレクトリ構造と内容を確認
104
+ 5. Markdownファイルをダウンロード
105
+ 6. コードについて質問
106
  """)
107
+
108
+ # スキャン対象の拡張子選択
109
+ st.subheader("🔍 スキャン対象の選択")
110
+
111
+ # プログラミング言語
112
+ st.write("プログラミング言語:")
113
+ prog_exts = {'.py', '.js', '.ts', '.java', '.cpp', '.hpp', '.c', '.h', '.go', '.rs'}
114
+ selected_prog = {ext: st.checkbox(ext, value=True, key=f"prog_{ext}")
115
+ for ext in prog_exts}
116
+
117
+ # 設定ファイル
118
+ st.write("設定ファイル:")
119
+ config_exts = {'.json', '.yml', '.yaml', '.toml'}
120
+ selected_config = {ext: st.checkbox(ext, value=True, key=f"config_{ext}")
121
+ for ext in config_exts}
122
+
123
+ # ドキュメント
124
+ st.write("ドキュメント:")
125
+ doc_exts = {'.md', '.txt'}
126
+ selected_doc = {ext: st.checkbox(ext, value=True, key=f"doc_{ext}")
127
+ for ext in doc_exts}
128
 
129
+ # URLの入力
130
  repo_url = st.text_input(
131
  "GitHubリポジトリのURLを入力",
132
  placeholder="https://github.com/username/repository.git"
133
  )
134
 
135
+ # スキャン実行ボタン
136
  if st.button("スキャン開始", disabled=not repo_url):
137
  try:
138
  with st.spinner('リポジトリを解析中...'):
139
+ # 選択された拡張子を集約
140
  selected_extensions = {ext for exts in [selected_prog, selected_config, selected_doc]
141
+ for ext, selected in exts.items() if selected}
142
+
143
+ # 選択がない場合はデフォルトを使用
144
+ if not selected_extensions:
145
+ selected_extensions = Settings.DEFAULT_EXTENSIONS
146
 
147
+ # MarkdownGeneratorを初期化
148
  generator = MarkdownGenerator(repo_url, selected_extensions)
149
  content_md, structure_md, files = generator.generate_markdowns()
150
 
 
162
  except Exception as e:
163
  st.error(f"エラーが発生しました: {str(e)}")
164
 
165
+ # スキャン結果の表示
166
  if st.session_state.structure_md and st.session_state.content_md:
167
  tab1, tab2 = st.tabs(["📁 ディレクトリ構造", "📄 ファイル内容"])
168
 
 
188
  mime="text/markdown"
189
  )
190
 
191
+ # 質問セクション
192
  if st.session_state.repo_content:
193
  st.divider()
194
  st.subheader("💭 コードについて質問する")
195
 
196
+ # 会話履歴の表示
197
  for message in st.session_state.llm_service.conversation_history:
198
  if message.role == "assistant":
199
  st.markdown(f'<div class="chat-message assistant-message">{message.content}</div>',
 
221
  if error:
222
  st.error(error)
223
  else:
224
+ st.rerun()