-
-
Save amoilanen/59e00f6129725e9b4404 to your computer and use it in GitHub Desktop.
| # | |
| # Usage: | |
| # | |
| # python tabs2spaces.py . 2 .*\.js$ | |
| # | |
| import argparse | |
| import os | |
| import re | |
| parser = argparse.ArgumentParser(description='Replace tabs with spaces.') | |
| parser.add_argument('root_directory', type=str, default='.', nargs='?', | |
| help='directory to run the script in') | |
| parser.add_argument('spaces_for_tab', type=int, default=2, nargs='?', | |
| help='number of spaces for one tab') | |
| parser.add_argument('file_mask_regex', default=".*", nargs='?', | |
| help='file name mask regex') | |
| args = parser.parse_args() | |
| file_mask_regex = re.compile(args.file_mask_regex) | |
| replacement_spaces = ' ' * args.spaces_for_tab | |
| print('Starting tab replacement. \ | |
| directory {0}, spaces number {1}, file mask {2}'.format(args.root_directory, args.spaces_for_tab, args.file_mask_regex)) | |
| found_files = [] | |
| for path, subdirs, files in os.walk(args.root_directory): | |
| for name in files: | |
| found_files.append(os.path.join(path, name)); | |
| matched_files = [name for name in found_files if file_mask_regex.match(name)] | |
| for file_path in matched_files: | |
| file_contents = '' | |
| with open(file_path) as f: | |
| file_contents = f.read() | |
| file_contents = re.sub('\t', replacement_spaces, file_contents) | |
| print('Replacing tabs in {0}'.format(file_path)) | |
| with open(file_path, "w") as f: | |
| f.write(file_contents) | |
| print('Done') |
Simply replace tabs with specified number of spaces is not perfectly equal to the effect of using spaces originally.
You may refer to my implementation: https://github.com/zchrissirhcz/smart_code_copier
Simply replace tabs with specified number of spaces is not perfectly equal to the effect of using spaces originally.
You may refer to my implementation: https://github.com/zchrissirhcz/smart_code_copier
@zchrissirhcz Link 404'd. Do you mind explaining how they're not perfectly equal?
@jcwii Sorry that I made my repo private since I thought my implementation is not very elegant(and using clang-format is an alternantive).. Now it is public again
My comment saying "not perfectly equal", an examle would demonstrate what that mean:
std::cout << "hello world" << endl;In this example line, there are 4 spaces before std::cout, this is the same when specify tabsize=4. However, there are 3 spaces between std::cout and << when you type tab right after std::cout, instead of 4, thus replacing it with 4 spaces would make it not match the original meaning of table symbol.
@zchrissirhcz the explanation and efforts are both very kind of you. Thank you Zhuo Zhang.
Hi, I used this as a base and made trimwhitespace.py. Thank you. :)