(file_path: str, language: str = None, verbose: bool = False)
| 8 | |
| 9 | |
| 10 | def parse_file(file_path: str, language: str = None, verbose: bool = False) -> List: |
| 11 | assert language != None, "Auto detect is not implemented, please specify language" |
| 12 | language = str(language).lower() |
| 13 | # assert (language in SUPPORT_LANGUAGE) == True, f"{language} is not supported" |
| 14 | assert os.path.isfile(file_path) == True, "File not found" |
| 15 | |
| 16 | if verbose: |
| 17 | print(50 * "=") |
| 18 | print("Parse code into tree-sitter node") |
| 19 | |
| 20 | content: str = open(file_path, "r").read() |
| 21 | root_node = parse_code(raw_code=content, language=language).root_node |
| 22 | |
| 23 | if language == "python": |
| 24 | parser: LanguageParser = PythonParser |
| 25 | elif language == "java": |
| 26 | parser: LanguageParser = JavaParser |
| 27 | elif language == "javascript": |
| 28 | parser: LanguageParser = JavascriptParser |
| 29 | elif language == "go": |
| 30 | parser: LanguageParser = GoParser |
| 31 | elif language in ["c", "c++"]: |
| 32 | parser: LanguageParser = CppParser |
| 33 | elif language == "c#": |
| 34 | parser: LanguageParser = CsharpParser |
| 35 | elif language == "rust": |
| 36 | parser: LanguageParser = RustParser |
| 37 | elif language == "ruby": |
| 38 | parser: LanguageParser = RubyParser |
| 39 | elif language == "php": |
| 40 | parser: LanguageParser = PhpParser |
| 41 | else: |
| 42 | raise KeyError(f"{language} is not supported") |
| 43 | |
| 44 | if verbose: |
| 45 | print(50 * "=") |
| 46 | print("Get node detail") |
| 47 | |
| 48 | cls_list = parser.get_class_list(root_node) |
| 49 | method_list = [] |
| 50 | cls_metadata = [] |
| 51 | for _cls in cls_list: |
| 52 | cls_info = parser.get_class_metadata(_cls) |
| 53 | cls_info["code"] = get_node_text(_cls) |
| 54 | |
| 55 | cls_method = [] |
| 56 | current_class_methods = parser.get_function_list(_cls) |
| 57 | for method in current_class_methods: |
| 58 | method_info = parser.get_function_metadata(method) |
| 59 | method_info['code'] = get_node_text(method) |
| 60 | cls_method.append(method_info) |
| 61 | |
| 62 | cls_info["method"] = cls_method |
| 63 | cls_metadata.append(cls_info) |
| 64 | method_list.extend(current_class_methods) |
| 65 | |
| 66 | fn_list: List = parser.get_function_list(root_node) |
| 67 | for node in fn_list[:]: |
no test coverage detected