Merge pull request #28 from MohamedElashri/fix-linter
Ensure awesome-lint compliance
This commit is contained in:
commit
cbf352bf4b
|
|
@ -5,7 +5,10 @@ on:
|
||||||
branches: ['**']
|
branches: ['**']
|
||||||
paths:
|
paths:
|
||||||
- '_README.md'
|
- '_README.md'
|
||||||
|
- 'generate_readme.py'
|
||||||
|
- '.github/workflows/test-readme.yml'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test-readme:
|
test-readme:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ def extract_repo(url):
|
||||||
match = re.match(r'https://github\.com/([^/]+/[^/]+)', url)
|
match = re.match(r'https://github\.com/([^/]+/[^/]+)', url)
|
||||||
return match[1] if match else ''
|
return match[1] if match else ''
|
||||||
|
|
||||||
|
|
||||||
def add_badges(lines):
|
def add_badges(lines):
|
||||||
"""Add GitHub badges to lines containing GitHub repository URLs."""
|
"""Add GitHub badges to lines containing GitHub repository URLs."""
|
||||||
processed_lines = []
|
processed_lines = []
|
||||||
|
|
@ -22,11 +23,11 @@ def add_badges(lines):
|
||||||
processed_lines.append('') # Add a blank line
|
processed_lines.append('') # Add a blank line
|
||||||
# Add shields.io badges
|
# Add shields.io badges
|
||||||
badges = [
|
badges = [
|
||||||
f' ',
|
f' ',
|
||||||
f'',
|
f'',
|
||||||
f'',
|
f'',
|
||||||
f'',
|
f'',
|
||||||
f'',
|
f'',
|
||||||
''
|
''
|
||||||
]
|
]
|
||||||
processed_lines.extend(badges)
|
processed_lines.extend(badges)
|
||||||
|
|
@ -36,30 +37,64 @@ def add_badges(lines):
|
||||||
processed_lines.append(line)
|
processed_lines.append(line)
|
||||||
return processed_lines
|
return processed_lines
|
||||||
|
|
||||||
def style_badges(lines):
|
|
||||||
"""Add the 'flat-square' style to all image badges in the lines."""
|
|
||||||
def replace_style(match):
|
|
||||||
alt_text = match.group(1)
|
|
||||||
url = match.group(2)
|
|
||||||
url += '&style=flat-square' if '?' in url else '?style=flat-square'
|
|
||||||
return f''
|
|
||||||
|
|
||||||
styled_lines = []
|
def ensure_punctuation(lines):
|
||||||
pattern = re.compile(r'!\[([^\]]+)\]\(([^)]+)\)')
|
"""Ensure all list item descriptions end with a period."""
|
||||||
|
punctuated_lines = []
|
||||||
for line in lines:
|
for line in lines:
|
||||||
styled_line = pattern.sub(replace_style, line)
|
if re.match(r'- \[.*?\]\(.*?\) - .*[^.]$', line):
|
||||||
styled_lines.append(styled_line)
|
line += '.' # Append a period
|
||||||
return styled_lines
|
punctuated_lines.append(line)
|
||||||
|
return punctuated_lines
|
||||||
|
|
||||||
|
|
||||||
def remove_extra_parentheses(lines):
|
def remove_extra_parentheses(lines):
|
||||||
"""Remove extra closing parentheses at the end of image markdown links."""
|
"""Remove extra closing parentheses at the end of image markdown links."""
|
||||||
corrected_lines = []
|
corrected_lines = []
|
||||||
for line in lines:
|
for line in lines:
|
||||||
# Match image links with potential extra closing parentheses
|
|
||||||
corrected_line = re.sub(r'(!\[[^\]]*\]\([^\)]*\))\)+', r'\1', line)
|
corrected_line = re.sub(r'(!\[[^\]]*\]\([^\)]*\))\)+', r'\1', line)
|
||||||
corrected_lines.append(corrected_line)
|
corrected_lines.append(corrected_line)
|
||||||
return corrected_lines
|
return corrected_lines
|
||||||
|
|
||||||
|
|
||||||
|
def add_awesome_badge(lines):
|
||||||
|
"""Ensure the Awesome badge is correctly added."""
|
||||||
|
# Check for an existing "Awesome" badge in the lines
|
||||||
|
for line in lines:
|
||||||
|
if "https://awesome.re" in line:
|
||||||
|
return lines # Badge already exists; do nothing
|
||||||
|
|
||||||
|
# Add the badge at the top if not present
|
||||||
|
badge = '[](https://awesome.re)'
|
||||||
|
lines.insert(0, badge)
|
||||||
|
return lines
|
||||||
|
|
||||||
|
|
||||||
|
def fix_list_item_format(lines):
|
||||||
|
"""Ensure list items use a dash separator between link and description."""
|
||||||
|
formatted_lines = []
|
||||||
|
for line in lines:
|
||||||
|
if re.match(r'- \[.*?\]\(.*?\) .*', line):
|
||||||
|
line = re.sub(r'(\]\(.*?\)) ', r'\1 - ', line) # Ensure a dash after the link
|
||||||
|
formatted_lines.append(line)
|
||||||
|
return formatted_lines
|
||||||
|
|
||||||
|
|
||||||
|
def remove_duplicate_links(lines):
|
||||||
|
"""Remove duplicate links in the markdown."""
|
||||||
|
seen_links = set()
|
||||||
|
deduplicated_lines = []
|
||||||
|
for line in lines:
|
||||||
|
# Check for links in the current line
|
||||||
|
if match := re.search(r'\((https?://[^\)]+)\)', line):
|
||||||
|
link = match.group(1)
|
||||||
|
if link in seen_links and "https://awesome.re" not in line:
|
||||||
|
continue # Skip duplicate links (but don't remove Awesome badge)
|
||||||
|
seen_links.add(link)
|
||||||
|
deduplicated_lines.append(line)
|
||||||
|
return deduplicated_lines
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) != 2:
|
if len(sys.argv) != 2:
|
||||||
print("Usage: python script.py <input_markdown_file>")
|
print("Usage: python script.py <input_markdown_file>")
|
||||||
|
|
@ -70,13 +105,16 @@ def main():
|
||||||
with open(input_file, 'r', encoding='utf-8') as f:
|
with open(input_file, 'r', encoding='utf-8') as f:
|
||||||
lines = [line.rstrip('\n') for line in f]
|
lines = [line.rstrip('\n') for line in f]
|
||||||
|
|
||||||
lines_with_badges = add_badges(lines)
|
lines = add_awesome_badge(lines)
|
||||||
|
lines = add_badges(lines)
|
||||||
|
lines = ensure_punctuation(lines)
|
||||||
|
lines = fix_list_item_format(lines)
|
||||||
|
lines = remove_duplicate_links(lines)
|
||||||
|
lines = remove_extra_parentheses(lines)
|
||||||
|
|
||||||
lines_with_square_badges = style_badges(lines_with_badges)
|
for line in lines:
|
||||||
|
|
||||||
final_lines = remove_extra_parentheses(lines_with_square_badges)
|
|
||||||
|
|
||||||
for line in final_lines:
|
|
||||||
print(line)
|
print(line)
|
||||||
|
|
||||||
main()
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue