收拾陈腐的项目代码时,常会面临一个 class 引证的头文件特别多。里边可能也偶然会有重复引证。这个脚本用于自动排序和按必定规矩分堆 iOS 项目中的头文件引证,并且支撑去除重复引证。适用于 Objective-C 项目。使得代码清晰,整齐,头文件引证去除冗余。
功用特点
-
头文件引证排序和分堆:依据必定的规矩对头文件引证进行排序,提高代码可读性,也整齐。
-
去除重复引证:自动检测并去除重复的头文件引证。
-
头文件引证少于 5 个的文件越过。
排序和分堆规矩
-
假如头文件名以
View
结束,归为一堆。(不区分大小写,以下相同 -
假如头文件名以
btn
或button
结束,归为一堆。 -
假如头文件名以
VC
或Viewcontroller
结束,归为一堆。 -
假如头文件名中包含
helper
或manager
,归为一堆。 -
假如头文件名中包含
+
号,归为一堆。 -
其它头文件按字母排序,归为一堆。 (当然你能够修改脚本,自行界说。
主要代码
def start_processing(directory):
for root, _ *, files in os.walk(directory):*
*for file in files:*
*if any(file.endswith(suffix) for suffix in ['.m', '.mm', '.h']):*
*file_path = os.path.join(root, file)*
*print(f"处理文件: {file_path}")*
*header_refs = find_header_refs(file_path)*
# 假如头文件引证数目少于 5 个,则越过此文件
if len(header_refs) < 5:
print(f"越过文件 {file_path},头文件引证数目少于 5 个")
continue
sorted_header_groups = sort_and_group_headers(header_refs)
# 读取文件内容
with open(file_path, 'r') as f:
lines = f.readlines()
# 查找插入排序后的开始位置
first_import_position = -1
last_import_position = -1
for i, line in enumerate(lines):
if line.startswith('#import "') or line.startswith('#import <'):
if first_import_position == -1:
first_import_position = i
last_import_position = i
# 删去原始的引证头文件
del lines[first_import_position:last_import_position + 1]
count = len(sorted_header_groups)
# 插入sort后的头文件引证
for i in range(count):
group = sorted_header_groups[i]
if group:
if i == count - 1:
lines.insert(first_import_position, 'n'.join(group) + 'n')
else:
lines.insert(first_import_position, 'n'.join(group) + 'n' + 'n')
first_import_position += 1
# 把修改后的内容写回文件
with open(file_path, 'w') as f:
f.writelines(lines)
示例
排序分堆去重前:
//
// THSortImportHelper.m
//
// Created by triple on 20xx/xx/xx.
//
#import "THAdd.h"
#import "THSortImportClass.h"
#import "ViewController.h"
#import "ViewController.h"
#import "ViewController.h"
#import "ViewController.h"
#import "TH1Btn.h"
#import "THCaange.h"
#import "THChange.h"
#import "NSString+str2.h"
#import "NSString+str2.h"
#import "THFind.h"
#import "TH2View.h"
#import "NSString+str1.h"
@implementation THSortImportHelper
@end
排序分堆去重后:
//
// THSortImportHelper.m
//
// Created by tripleEye on 20xx/xx/xx.
//
#import "TH2View.h"
#import "TH1Btn.h"
#import "ViewController.h"
#import "NSString+str1.h"
#import "NSString+str2.h"
#import "THAdd.h"
#import "THCaange.h"
#import "THChange.h"
#import "THFind.h"
#import "THSortImportClass.h"
@implementation THSortImportHelper
@end
注意事项
-
脚本会修改原始文件,请提前备份项目。
-
建议在对整个项目进行操作之前,在一个小范围的测验项目上尝试使用脚本。