Skip to content

Commit

Permalink
fix pre-commit-2332
Browse files Browse the repository at this point in the history
  • Loading branch information
rishabhjain1712 committed Sep 2, 2024
1 parent ed71474 commit 769c0bd
Showing 1 changed file with 40 additions and 8 deletions.
48 changes: 40 additions & 8 deletions pre_commit_hooks/check_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import argparse
import json
from typing import Any
from typing import Sequence
import re
from typing import Any, Sequence


def raise_duplicate_keys(
Expand All @@ -17,6 +17,29 @@ def raise_duplicate_keys(
d[key] = val
return d

def check_mixed_indentation(content: str, filename: str) -> bool:
"""
Checks a string content for mixed indentation (tabs and spaces) in leading whitespace.
Args:
content (str): The content of the file to check.
filename (str): The name of the file being checked (for reporting purposes).
Returns:
bool: True if mixed indentation is found, False otherwise.
"""
found_mixed = False

for i, line in enumerate(content.splitlines(), 1):
# Determine leading whitespace
leading_whitespace = line[:len(line) - len(line.lstrip())]

# Check if both tabs and spaces are present in leading whitespace
if ' ' in leading_whitespace and '\t' in leading_whitespace:
print(f"{filename}: Mixed indentation (tabs and spaces) found on line {i}")
found_mixed = True

return not found_mixed

def main(argv: Sequence[str] | None = None) -> int:
parser = argparse.ArgumentParser()
Expand All @@ -25,12 +48,21 @@ def main(argv: Sequence[str] | None = None) -> int:

retval = 0
for filename in args.filenames:
with open(filename, 'rb') as f:
try:
json.load(f, object_pairs_hook=raise_duplicate_keys)
except ValueError as exc:
print(f'{filename}: Failed to json decode ({exc})')
retval = 1
with open(filename, 'r') as f:
content = f.read()

# Check for mixed indentation first
if not check_mixed_indentation(content, filename):
retval = 1
continue

# Then, attempt to parse the JSON
try:
json.loads(content, object_pairs_hook=raise_duplicate_keys)
except ValueError as exc:
print(f'{filename}: Failed to json decode ({exc})')
retval = 1

return retval


Expand Down

0 comments on commit 769c0bd

Please sign in to comment.