import os
from pathlib import Path
def add_clippy_allows_to_lib(lib_file):
allows = """#![allow(
unused_imports,
unreachable_patterns,
clippy::too_many_arguments,
clippy::needless_return,
clippy::unnecessary_operation,
clippy::into_iter_on_ref,
clippy::empty_docs,
clippy::new_without_default,
clippy::large_enum_variant,
clippy::derive_partial_eq_without_eq,
clippy::enum_variant_names,
clippy::redundant_field_names,
clippy::missing_errors_doc,
clippy::module_name_repetitions,
clippy::derivable_impls // Rust 1.91.0 new lint - generated code has manual Default impls
)]
"""
with open(lib_file, 'r') as f:
content = f.read()
content = content.replace('#![allow(unused_imports)]', '')
content = content.replace('#![allow(clippy::too_many_arguments)]', '')
if 'unreachable_patterns,' in content and 'clippy::derivable_impls' in content:
print(f" {lib_file} already has comprehensive clippy allows, skipping")
return
if 'unreachable_patterns,' in content and 'clippy::derivable_impls' not in content:
import re
content = re.sub(
r'#!\[allow\([^]]+\)\]',
allows.strip(),
content,
count=1
)
with open(lib_file, 'w') as f:
f.write(content)
print(f" Updated clippy allows in {lib_file} to include new lints")
return
lines = content.split('\n')
insert_pos = 0
for i, line in enumerate(lines):
if line.startswith('#!['):
insert_pos = i + 1
elif line and not line.startswith('#'):
break
lines.insert(insert_pos, allows.rstrip())
with open(lib_file, 'w') as f:
f.write('\n'.join(lines))
print(f" Added clippy allows to {lib_file}")
def add_clippy_allows_to_models(models_dir):
problem_files = [
'item.rs',
'realtime_conversation_item.rs',
]
for filename in problem_files:
file_path = models_dir / filename
if not file_path.exists():
continue
with open(file_path, 'r') as f:
content = f.read()
if '#[allow(unreachable_patterns)]' in content:
print(f" {filename} already has unreachable_patterns allow, skipping")
continue
lines = content.split('\n')
for i, line in enumerate(lines):
if line.startswith('pub enum'):
lines.insert(i, '#[allow(unreachable_patterns)]')
break
with open(file_path, 'w') as f:
f.write('\n'.join(lines))
print(f" Added unreachable_patterns allow to {filename}")
def add_clippy_allows_to_apis(apis_dir):
for file_path in apis_dir.glob('*.rs'):
if file_path.name == 'mod.rs':
continue
with open(file_path, 'r') as f:
content = f.read()
if '#![allow(' in content or '#[allow(' in content:
continue
lines = content.split('\n')
insert_pos = 0
in_header = True
for i, line in enumerate(lines):
if in_header and line.strip() == '*/':
insert_pos = i + 1
in_header = False
break
if insert_pos > 0:
lines.insert(insert_pos, '')
lines.insert(insert_pos + 1, '#![allow(clippy::needless_return, clippy::into_iter_on_ref)]')
with open(file_path, 'w') as f:
f.write('\n'.join(lines))
print(f" Added clippy allows to {file_path.name}")
def main():
project_root = Path(__file__).parent.parent
print("Adding clippy allow attributes to generated code...")
lib_file = project_root / "src" / "lib.rs"
if lib_file.exists():
add_clippy_allows_to_lib(lib_file)
models_dir = project_root / "src" / "models"
if models_dir.exists():
add_clippy_allows_to_models(models_dir)
apis_dir = project_root / "src" / "apis"
if apis_dir.exists():
add_clippy_allows_to_apis(apis_dir)
print("Done adding clippy allows!")
if __name__ == "__main__":
main()