infactor v1.0.1
Infactor
[../../actions/workflows/build.yml/badge.svg]
A simple inline code editor and refactoring tool to use from the command line.
** Rationale
Ever read a guide that required you to perform manual code changes to multiple source files in an unfamiliar code base?
Ever seen people using sed, awk or perl for the same purpose?
Using tools like sed, awk and perl for performing minor changes may work but its hard for users to understand and geeks to maintain.
Doing manual changes is error prone and is not a reproducible user experience.
This tool is an experiment to see if performing minor code changes using the CLI can improve the user experience
** Features
- Add import
- [#get-line] matching expression
- [#add-line] matching expression
- [#remove-line] matching expression
- [#set-value]
- [#append-value] (only for arrays)
** Example usage
* Get Line ** Usage #+BEGIN_EXAMPLE Usage: infactor get-line options
Get the line or number of the last (or optionally the first) line that matches the expression
Arguments: file The file to add the import to expression The regular expression to use for matching
Options:
--text Flag to display the actual line instead of the number
--first Flag to return the first line matching
--in-class Search inside the specified class
--in-method Search inside the specified function
--in-function Search inside the specified function
-h, --help
#+END_EXAMPLE
** Examples
*** Get line
The following code will get the line number of the last line matching the regular expression ^[ ]conosole.
#+BEGIN_SRC sh
infactor.js get-line sample.js "^[ ]*console"
#+END_SRC
The output should be something like: `34` close to the end of the file.* Get Line in class
To limit the scode of the search inside a specific function:
#+BEGIN_SRC sh
infactor.js get-line sample.js "^[ ]*console" --in-class Op
#+END_SRC
The output should be `12` pointing the logging statemtent found inside the `Op` class.* Get Line in method
#+BEGIN_SRC sh
infactor.js get-line sample.js "^[ ]*console" --in-class Op --in-method exec
#+END_SRC
The output should be `12` pointing the logging statemtent found inside the `Op` class (same as above).* Get Line in function
#+BEGIN_SRC sh
infactor.js get-line sample.js "^[ ]*console" --in-function demo
#+END_SRC
In this case the resut should be `-1` as `demo` function contains a logging statement.* Add Line ** Usage
#+BEGIN_EXAMPLEUsage: infactor add-line options
Add a line at the bottom of the block
Arguments: file The file to add the import to code The code to add
Options: --out Write result to stdout instead of saving to the file --top Flag to enable adding the code at the top of the block --before The expression to match the line before which the code will be added --after The expression to match the line after which the code will be added --in-class Search inside the specified class --in-method Search inside the specified method --in-function Search inside the specified function -h, --help display help for command #+END_EXAMPLE ** Example *** Adding code
#+BEGIN_SRC sh
infactor.js add-line sample.js " console.log('Now demo is also logging!');" --in-function demo
#+END_SRC
#+BEGIN_SRC js
function demo () {
var a = 2;
var b = 3
new Op(a, b, sum).exec();
new Op(a, b, mul).exec();
console.log('Now demo is also logging!');
}
#+END_SRC* Adding code to the top of the function
Using the `--top` flag it's now possible to add code to the top of a function, method, class etc.
#+BEGIN_SRC sh
infactor.js add-line sample.js " console.log('On top!');" --in-function demo --top
#+END_SRC
#+BEGIN_SRC js
function demo () {
console.log('On top!');
var a = 2;
var b = 3
new Op(a, b, sum).exec();
new Op(a, b, mul).exec();
console.log('Now demo is also logging!');
}
#+END_SRC* Remove Line ** Usage
#+BEGIN_EXAMPLEUsage: infactor remove-line options
Remove the line of the last (or optionally the first) line that matches the expression
Arguments: file The file to add the import to expression The regular expression to use for matching
Options: --out Write result to stdout instead of saving to the file --first Flag to return the first line matching --in-class Search inside the specified class --in-method Search inside the specified method --in-function Search inside the specified function -h, --help display help for command #+END_EXAMPLE **** Example
* Removing a line
Given the following code contained in the [[./sample.js]] file:
#+BEGIN_SRC js
function demo () {
var a = 2;
var b = 3;
var array = [1, 2, 3, 4, 5];
new Op(a, b, sum).exec();
new Op(a, b, mul).exec();
}
#+END_SRC
We shall remove the uneeded array declaration using:
#+BEGIN_SRC sh
infactor.js remove-line sample.js "^[ ]*var array" --in-function demo --out
#+END_SRC
The output should be something like:
#+BEGIN_SRC js
function demo () {
var a = 2;
var b = 3;
new Op(a, b, sum).exec();
new Op(a, b, mul).exec();
}
#+END_SRC* Set value
To set the value of a variable you can use the set subcommand:
** Usage
#+BEGIN_EXAMPLE
Usage: infactor set options
Set the value of a variable
Arguments: file The file to add the import to variable The variable to set value The value to set
Options: --out Write result to stdout instead of saving to the file --in-class Search inside the specified class --in-method Search inside the specified method --in-function Search inside the specified function -h, --help display help for command #+END_EXAMPLE ** Examples *** Setting the value of a var in a specific class
#+BEGIN_SRC sh
infactor set sample.js a "\"bar\"" --in-class Op
#+END_SRC* Setting the value of a var in a specific function
#+BEGIN_SRC sh
infactor set sample.js a "\"bar\"" --in-function demo
#+END_SRC* Append value
To append the value to an array variable you can use the append subcommand:
** Usage
#+BEGIN_EXAMPLE
Usage: infactor append options
Append the value to a variable (e.g. array)
Arguments: file The file to add the import to variable The variable to append to value The value to append
Options: --out Write result to stdout instead of saving to the file --in-class Search inside the specified class --in-method Search inside the specified method --in-function Search inside the specified function --in-element Search inside the specified element (e.g. jsx etc) -h, --help display help for command #+END_EXAMPLE
** Examples *** Appending the value to an array
#+BEGIN_SRC sh
infactor set sample.js array 7 --in-class Op
#+END_SRC