@@ -50,25 +50,15 @@ def group_rules_by_category(rules: List[RuleMetadata]) -> Dict[str, List[RuleMet
5050 return groups
5151
5252
53- def main ():
54- """Main entry point."""
55- # Find project root
56- project_root = find_project_root ()
57- rules_dir = os . path . join ( project_root , ".cursor" , "rules" )
53+ def scan_rules_directory (
54+ rules_dir : str , project_root : str , plugin_manager : PluginManager
55+ ) -> List [ RuleMetadata ]:
56+ """Scan a directory for rules and parse them."""
57+ rules = []
5858
5959 if not os .path .exists (rules_dir ):
60- print (f"Error: Rules directory not found: { rules_dir } " )
61- sys .exit (1 )
62-
63- print (f"Syncing rules from: { rules_dir } " )
60+ return rules
6461
65- # Initialize plugin manager
66- script_dir = os .path .dirname (os .path .abspath (__file__ ))
67- plugin_manager = PluginManager ()
68- plugin_manager .load_plugins (script_dir )
69-
70- # Scan for rules using available parsers
71- rules = []
7262 for root , dirs , files in os .walk (rules_dir ):
7363 # Skip generated and personal directories
7464 if "generated" in Path (root ).parts or "personal" in Path (root ).parts :
@@ -84,6 +74,7 @@ def main():
8474
8575 # Create parsing context
8676 context = {
77+ "project_root" : project_root ,
8778 "relative_path" : os .path .relpath (file_path , project_root ),
8879 "category" : get_category (file_path , rules_dir ),
8980 }
@@ -93,40 +84,80 @@ def main():
9384 if rule :
9485 rules .append (rule )
9586
96- if not rules :
97- print ("No rules found to sync" )
98- return
87+ return rules
9988
100- # Group rules by category
101- grouped_rules = group_rules_by_category (rules )
10289
103- # Get markdown generator
104- generator = plugin_manager .get_generator ("markdown" )
105- if not generator :
106- print ("Error: Markdown generator not found" )
90+ def main ():
91+ """Main entry point."""
92+ # Find project root
93+ project_root = find_project_root ()
94+ cursor_rules_dir = os .path .join (project_root , ".cursor" , "rules" )
95+ code_review_dir = os .path .join (project_root , ".code_review" )
96+
97+ if not os .path .exists (cursor_rules_dir ) and not os .path .exists (code_review_dir ):
98+ print ("Error: Neither .cursor/rules nor .code_review directory found" )
10799 sys .exit (1 )
108100
109- # Generate content
110- content = generator .generate (grouped_rules , {})
101+ # Initialize plugin manager
102+ script_dir = os .path .dirname (os .path .abspath (__file__ ))
103+ plugin_manager = PluginManager ()
104+ plugin_manager .load_plugins (script_dir )
105+
106+ # Scan development rules (.cursor/rules/)
107+ print (f"Scanning development rules from: { cursor_rules_dir } " )
108+ dev_rules = scan_rules_directory (cursor_rules_dir , project_root , plugin_manager )
109+ grouped_dev_rules = group_rules_by_category (dev_rules )
110+
111+ # Scan code review guidelines (.code_review/)
112+ print (f"Scanning code review guidelines from: { code_review_dir } " )
113+ review_rules = scan_rules_directory (code_review_dir , project_root , plugin_manager )
114+ grouped_review_rules = group_rules_by_category (review_rules )
111115
112116 # Print summary
113- total_rules = sum (len (rules ) for rules in grouped_rules .values ())
114- print (f"\n Found { total_rules } rules in { len (grouped_rules )} categories" )
117+ total_dev_rules = sum (len (rules ) for rules in grouped_dev_rules .values ())
118+ total_review_rules = sum (len (rules ) for rules in grouped_review_rules .values ())
119+ print (f"\n Found { total_dev_rules } development rules in { len (grouped_dev_rules )} categories" )
120+ print (
121+ f"Found { total_review_rules } code review guidelines in { len (grouped_review_rules )} categories"
122+ )
123+
124+ # Get generators
125+ dev_generator = plugin_manager .get_generator ("development-rules" )
126+ review_generator = plugin_manager .get_generator ("code-review-guidelines" )
127+
128+ if not dev_generator or not review_generator :
129+ print ("Error: Required generators not found" )
130+ sys .exit (1 )
131+
132+ # Generate content for both sections
133+ dev_content = dev_generator .generate (grouped_dev_rules , {}) if dev_rules else None
134+ review_content = review_generator .generate (grouped_review_rules , {}) if review_rules else None
115135
116- # Update output files using generator's default filenames
136+ # Update output files (both generators use same target files)
117137 output_files = [
118- os .path .join (project_root , filename ) for filename in generator .default_filenames
138+ os .path .join (project_root , filename ) for filename in dev_generator .default_filenames
119139 ]
120140
121141 for file_path in output_files :
122- success , message = update_documentation_file (
123- file_path , content , generator .get_section_markers ()
124- )
125-
126- if success :
127- print (f"✓ { message } " )
128- else :
129- print (f"✗ { message } " )
142+ # Update development rules section
143+ if dev_content :
144+ success , message = update_documentation_file (
145+ file_path , dev_content , dev_generator .get_section_markers ()
146+ )
147+ if success :
148+ print (f"✓ Development rules: { message } " )
149+ else :
150+ print (f"✗ Development rules: { message } " )
151+
152+ # Update code review guidelines section
153+ if review_content :
154+ success , message = update_documentation_file (
155+ file_path , review_content , review_generator .get_section_markers ()
156+ )
157+ if success :
158+ print (f"✓ Code review guidelines: { message } " )
159+ else :
160+ print (f"✗ Code review guidelines: { message } " )
130161
131162 print ("\n ✓ Rules synchronization completed!" )
132163
0 commit comments