Tool to extract the function definitions from the source code
It can be used to extract functions from,
-
C
-
C++
-
C#
-
Java
-
Python
-
TypeScript
-
JavaScript
Advantage of using such function extractions are,
-
Resolving technical debt
-
Identify function similarity
-
Identify pattern check (Supresswarnings, Assert, etc...)
-
python 3.8 : 64 bit
-
python packages (xlrd, xlsxwriter, pandas)
-
third party packages [Ctags, grep]
pip install functiondefextractor
- General usage with out options.
from functiondefextractor import core_extractor
out_put = core_extractor.extractor (r"path_to_repo/code")
print(out_put)
- To exclude specific files from repository.
from functiondefextractor import core_extractor
out_put = core_extractor.extractor (r"path_to_repo/code", exclude=r'*\test\*,*.java')
print(out_put)
Sample regex patterns: Note: Space given after comma(,) in regex pattern is also treated as part of the pattern. For example
(*.java, *.cpp) != (*.java,*.cpp)
1. '*.java' => to exclude all java files in a repository.
2. '*/test/*' => to exclude test folder and files in it.
3. '*/src/*/*.cpp' => to exclude all cpp files in src and it's sub directories
- To extract functions based on annotation.
from functiondefextractor import core_extractor
out_put = core_extractor.extractor (r"path_to_repo/code", annot="@Test")
print(out_put)
- To extract delta lines(+/-) from code based on annotation/key word. Note: If user is unaware of complete annotation use this(annot with delta) feature to extract functions else use the above feature. Suggested to use delta=0 to get only line with annotation.
from functiondefextractor import core_extractor
out_put = core_extractor.extractor(r"path_to_repo/code", annot="@SupressWarning", delta="5")
print(out_put)
- To analyse various patterns in the code based on given condition. For example to search assert, suppress warnings patterns.
from functiondefextractor import condition_checker
out_put = core_extractor.check_condition("@SupressWarning", r"path_to_excelfile/dataframe", "(")
print(out_put[0], out_put[1])
- General usage with out options to extract functions from repo.
>>>python -m functiondefextractor --p "path/to/repo"
- To extract functions from repo having specific annotation.
>>>python -m functiondefextractor --p "path/to/repo" --a "@SuppressWarnings(\"UnusedReturnValue\")"
Note: If annotation contains double quotes as part of annotation(like above example) use backslash() before double quote inside annotation.
- To ignore files from repo using regex pattern.
>>>python -m functiondefextractor --p "path/to/repo" --i '*.java, *.cpp'
- To analyse various patterns in the code based on given condition.
>>>python -m functiondefextractor --c "Assert" --e "path/to/excel" --s "("
- Help option can be found at,
>>>python -m functiondefextractor --h
- To extract all functions from a repository
>>>python -m functiondefextractor --p "path/to/repo"
from functiondefextractor import core_extractor
out_put = core_extractor.extractor (r"path_to_repo/code")
print(out_put)
- To extract all functions with "@Test" annotation excluding all ".cpp" files in the repository
>>>python -m functiondefextractor --p "path/to/repo" --a "@Test" --i '*.cpp'
from functiondefextractor import core_extractor
out_put = core_extractor.extractor(r"path_to_repo/code", annot="@Test", exclude=r'*.cpp')
print(out_put)
Note:
-
functionstartwith argument can be used to specifically extract code from required functions whose names starts with "test_" or what ever name user is interested in.
-
delta and annot arguments together can be used to extract required number of lines below and above the given annotation/keyword.
- To analyze various patterns present in extracted code
>>>python -m functiondefextractor --c "Assert" --e "path/to/excel" --s "("
from functiondefextractor import condition_checker
out_put = core_extractor.check_condition("@SupressWarning", r"path_to_excelfile/dataframe", "(")
print(out_put[0], out_put[1])
-
Executing functiondefextractor to extract functions from command line would generate an output excel file which contains FileName_FunctionName in Unique ID column and extracted functions in Code column
-
Using functiondefextractor to extract functions from code would return a dataframe with same content as excel file.
-
When functiondefextractor is executed from script to analyse patterns in code, a tuple with 2 data frames would be generated which contains the requested pattern statements with their count in various functions and a pivot table of the same respectively.