Fastmod: A Powerful Code Replacement Tool (with examples)
Fastmod is a command-line tool developed by Facebook that provides a fast and efficient way to partially replace code in a codebase. It is a great alternative to the codemod tool, offering better performance and a simpler syntax. In this article, we will explore different use cases of Fastmod, and explain each command along with their arguments and outputs.
Use Case 1: Replace a regex pattern in all files of the current directory
Code:
fastmod regex_pattern replacement
Motivation: This command can be useful when you want to replace a specific pattern with a new value in multiple files within the current directory.
Explanation:
regex_pattern
represents the regular expression pattern that should be matched.replacement
represents the new value that should replace the matched pattern.
Example Output:
Initializing fastmod with 4 workers
Searching for regex_pattern in all files within the current directory...
Found 10 matches in 5 files.
Replacing regex_pattern with replacement...
Replaced 10 occurrences in 5 files.
Use Case 2: Replace a regex pattern in case-insensitive mode in specific files or directories
Code:
fastmod --ignore-case regex_pattern replacement -- path/to/file path/to/directory ...
Motivation: This command allows you to perform a case-insensitive search and replace operation in specific files or directories.
Explanation:
--ignore-case
flag is used to enable case-insensitive mode for the regex pattern matching.regex_pattern
represents the regular expression pattern that should be matched.replacement
represents the new value that should replace the matched pattern.-- path/to/file path/to/directory ...
specifies the files or directories where the search and replace operation should be performed.
Example Output:
Initializing fastmod with 4 workers
Searching for regex_pattern in specified files or directories...
Found 5 matches in 2 files.
Replacing regex_pattern with replacement...
Replaced 5 occurrences in 2 files.
Use Case 3: Replace a regex pattern in a specific directory in files filtered with a case-insensitive glob pattern
Code:
fastmod regex replacement --dir path/to/directory --iglob '**/*.{js,json}'
Motivation: This command allows you to replace a regex pattern in a specific directory, considering only files that match a case-insensitive glob pattern.
Explanation:
regex
represents the regular expression pattern that should be matched.replacement
represents the new value that should replace the matched pattern.--dir path/to/directory
specifies the directory where the search and replace operation should be performed.--iglob '**/*.{js,json'
is the case-insensitive glob pattern for filtering files. It matches any file with a .js or .json extension.
Example Output:
Initializing fastmod with 4 workers
Searching for regex in files within the specified directory...
Found 2 matches in 2 files.
Replacing regex with replacement...
Replaced 2 occurrences in 2 files.
Use Case 4: Replace for an exact string in .js or .json files
Code:
fastmod --fixed-strings exact_string replacement --extensions json,js
Motivation: This command is useful when you want to replace an exact string in .js or .json files.
Explanation:
--fixed-strings
flag is used to treat the provided pattern as an exact string instead of a regular expression.exact_string
represents the exact string that should be matched.replacement
represents the new value that should replace the matched exact string.--extensions json,js
specifies the file extensions to consider (.js and .json in this case).
Example Output:
Initializing fastmod with 4 workers
Searching for exact_string in .js and .json files...
Found 3 matches in 2 files.
Replacing exact_string with replacement...
Replaced 3 occurrences in 2 files.
Use Case 5: Replace for an exact string without prompt for a confirmation (disables regular expressions)
Code:
fastmod --accept-all --fixed-strings exact_string replacement
Motivation: This command is useful when you want to replace an exact string without being prompted for a confirmation, and without using regular expressions.
Explanation:
--accept-all
flag is used to skip the confirmation prompts and automatically replace the exact string.--fixed-strings
flag is used to treat the provided pattern as an exact string instead of a regular expression.exact_string
represents the exact string that should be matched.replacement
represents the new value that should replace the matched exact string.
Example Output:
Initializing fastmod with 4 workers
Searching for exact_string in all files...
Found 5 matches in 3 files.
Replacing exact_string with replacement without confirmation...
Replaced 5 occurrences in 3 files.
Use Case 6: Replace for an exact string without prompt for a confirmation, printing changed files
Code:
fastmod --accept-all --print-changed-files --fixed-strings exact_string replacement
Motivation: This command allows you to replace an exact string without a confirmation prompt, while also printing the names of the changed files.
Explanation:
--accept-all
flag is used to skip the confirmation prompts and automatically replace the exact string.--print-changed-files
flag is used to display the names of the changed files in the output.--fixed-strings
flag is used to treat the provided pattern as an exact string instead of a regular expression.exact_string
represents the exact string that should be matched.replacement
represents the new value that should replace the matched exact string.
Example Output:
Initializing fastmod with 4 workers
Searching for exact_string in all files...
Found 7 matches in 4 files.
Replacing exact_string with replacement without confirmation...
Replaced 7 occurrences in 4 files.
Changed files:
- file1.js
- file2.js
- file3.json
In conclusion, Fastmod is a versatile and powerful code replacement tool that provides a simple and efficient way to replace code in a codebase. By exploring these different use cases, you can make the most out of Fastmod to save time and effort in modifying your code.