Files
kucherenko__jscpd/fixtures/shebang/transform
apk 1101bedcc1 feat(finder): shebang-based detection for extensionless script files + --formats-names option
- Detect format from shebang line (#!) for executable extensionless files (chmod +x)
  as fallback in skipNotSupportedFormats; symlinks excluded via lstatSync
- Add SHEBANG_TO_FORMAT map and readShebangFormat() in packages/finder/src/files.ts
- Introduce IEntry interface extending fast-glob Entry with detectedFormat? field
- Add --formats-names CLI option to map specific filenames (e.g. Makefile, Dockerfile)
  to formats, independent of --formats-exts so neither disables built-in EXT_TO_FORMAT
- Wire formatsNames through IOptions, getDefaultOptions, CLI parser, and both
  call sites (skipNotSupportedFormats, in-files-detector)
- Add fixtures/shebang/ with 4 executable extensionless fixtures (bash + python)
- 360 tests pass (277 tokenizer + 83 finder); README updated with new sections
2026-05-13 20:48:59 +02:00

42 lines
1.1 KiB
Python
Executable File

#!/usr/bin/env python3
import os
import sys
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def validate_path(path):
if not os.path.exists(path):
logger.error("Path does not exist: %s", path)
return False
return True
def read_config(config_path):
if not validate_path(config_path):
sys.exit(1)
with open(config_path) as f:
return f.read()
def setup_environment(base_dir):
os.makedirs(os.path.join(base_dir, "logs"), exist_ok=True)
os.makedirs(os.path.join(base_dir, "tmp"), exist_ok=True)
os.makedirs(os.path.join(base_dir, "output"), exist_ok=True)
logger.info("Environment set up under %s", base_dir)
def transform_files(input_dir, output_dir):
setup_environment(output_dir)
for filename in os.listdir(input_dir):
src = os.path.join(input_dir, filename)
dst = os.path.join(output_dir, filename + ".out")
logger.info("Transforming %s -> %s", src, dst)
if __name__ == "__main__":
transform_files(sys.argv[1], sys.argv[2])