You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.2 KiB
Python
74 lines
2.2 KiB
Python
#!/bin/python3
|
|
import argparse
|
|
import os
|
|
import sys
|
|
|
|
# This allows for importing from the localization and util directories NOTE: Auto importing tools will also prepend the import paths with "tools." this will not work and needs to be removed from import paths
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
|
from localization.regex import localization_regex
|
|
|
|
|
|
# Create the parser
|
|
parser = argparse.ArgumentParser(
|
|
description="Search the codebase and find a localized string."
|
|
)
|
|
|
|
# Add the arguments
|
|
parser.add_argument("Token", metavar="token", type=str, help="the token to search for")
|
|
parser.add_argument(
|
|
"-o", "--open", action="store_true", help="Open the results in VSCode"
|
|
)
|
|
parser.add_argument(
|
|
"-l",
|
|
"--limit",
|
|
type=int,
|
|
default=1,
|
|
help="Specify a maximum number of files to open",
|
|
)
|
|
|
|
# Parse the arguments
|
|
args = parser.parse_args()
|
|
|
|
TOKEN = args.Token
|
|
EXCLUDE_FILES = ["LocalizerKeys.ts"]
|
|
OPEN_IN_VSCODE = args.open
|
|
NUMBER_OF_FILES_LIMIT = args.limit
|
|
|
|
|
|
def find_token_uses(token, root_dir="./ts/", exclude_files=EXCLUDE_FILES):
|
|
regex = localization_regex(token)
|
|
matches = []
|
|
|
|
for root, dirs, files in os.walk(root_dir):
|
|
for file in files:
|
|
if file.endswith((".tsx", ".ts")) and file not in exclude_files:
|
|
file_path = os.path.join(root, file)
|
|
with open(file_path, "r", encoding='utf-8') as f:
|
|
for line_no, line in enumerate(f, start=1):
|
|
if regex.search(line):
|
|
matches.append(f"{file_path}:{line_no}")
|
|
|
|
return matches
|
|
|
|
|
|
import os
|
|
|
|
matches = find_token_uses(TOKEN)
|
|
if matches:
|
|
print(f"Found {len(matches)} matches for token '{TOKEN}':")
|
|
for match in matches:
|
|
print(match)
|
|
else:
|
|
print(f"No matches found for token '{TOKEN}'")
|
|
|
|
if OPEN_IN_VSCODE:
|
|
if NUMBER_OF_FILES_LIMIT > 0:
|
|
if len(matches) > NUMBER_OF_FILES_LIMIT:
|
|
print(
|
|
f"Opening the first {NUMBER_OF_FILES_LIMIT} files (out of {len(matches)}). Use the -l flag to increase the limit. or -l 0 to open all files."
|
|
)
|
|
matches = matches[:NUMBER_OF_FILES_LIMIT]
|
|
|
|
for match in matches:
|
|
os.system(f"code -g {match}")
|