Skip to content

Commit

Permalink
Replace Spotless with simple python lint script
Browse files Browse the repository at this point in the history
  • Loading branch information
Birdulon authored and memetrollsXD committed Jul 11, 2022
1 parent 24e9c55 commit 5e6a1f3
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 34 deletions.
2 changes: 0 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Fetch LintRatchet
run: git fetch origin LintRatchet:LintRatchet
- name: Setup Java
uses: actions/setup-java@v3
with:
Expand Down
12 changes: 7 additions & 5 deletions .github/workflows/build_lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,12 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Fetch LintRatchet
run: git fetch origin LintRatchet:LintRatchet
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Run Linter
run: python format_whitespace.py
- name: Setup Java
uses: actions/setup-java@v3
with:
Expand All @@ -29,16 +33,14 @@ jobs:
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle', 'gradle.properties', '**/*.accesswidener') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Run Spotless
run: ./gradlew spotlessApply
- name: Run Gradle
run: ./gradlew && ./gradlew jar
- name: Upload build
uses: actions/upload-artifact@v3
with:
name: Grasscutter
path: grasscutter-*.jar
- name: Commit any Spotless changes
- name: Commit any Linter changes
uses: EndBug/add-and-commit@v9
with:
add: '-u'
Expand Down
27 changes: 0 additions & 27 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,6 @@ plugins {
// Maven
id 'maven-publish'
id 'signing'

// Spotless formatter
id "com.diffplug.spotless" version "6.8.0"
}

compileJava.options.encoding = "UTF-8"
Expand Down Expand Up @@ -241,30 +238,6 @@ eclipse {
}
}

spotless {
// optional: limit format enforcement to just the files changed by this feature branch
ratchetFrom 'LintRatchet'

format 'misc', {
// define the files to apply `misc` to
target '*.gradle', '*.md', '.gitignore'

// define the steps to apply to those files
trimTrailingWhitespace()
indentWithSpaces() // or spaces. Takes an integer argument if you don't like 4
endWithNewline()
}
java {
// don't need to set target, it is inferred from java
// define the steps to apply to those files
trimTrailingWhitespace()
indentWithSpaces() // or spaces. Takes an integer argument if you don't like 4
endWithNewline()
replaceRegex('Force one space between if/etc. and ( or {', '(?<=\\b(?:if|for|while|switch|try|else|catch|finally|synchronized)) *(?=[\\(\\{])', ' ')
replaceRegex('Force one space between ) and {', '\\) *\\{(?!\\})', ') {')
}
}

signing {
if(!version.endsWith('-dev')) {
sign publishing.publications.mavenJava
Expand Down
70 changes: 70 additions & 0 deletions format_whitespace.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import re
import subprocess


UPSTREAM = 'https://github.com/Grasscutters/Grasscutter.git'
RATCHET = 'LintRatchet'
RATCHET_FALLBACK = '8e3deb9'


re_leading_whitespace = re.compile(r'^[ \t]+', re.MULTILINE) # Replace with \1.replace('\t', ' ')
re_trailing_whitespace = re.compile(r'[ \t]+$', re.MULTILINE) # Replace with ''
# Replace 'for (foo){bar' with 'for (foo) {bar'
re_bracket_space = re.compile(r'\) *\{(?!\})') # Replace with ') {'
# Replace 'for(foo)' with 'foo (bar)'
re_keyword_space = re.compile(r'(?<=\b)(if|for|while|switch|try|else|catch|finally|synchronized) *(?=[\(\{])') # Replace with '\1 '


def get_changed_filelist():
subprocess.run(['git', 'fetch', UPSTREAM, f'{RATCHET}:{RATCHET}']) # Ensure LintRatchet ref is matched to upstream
result = subprocess.run(['git', 'diff', RATCHET, '--name-only'], capture_output=True, text=True)
if result.returncode != 0:
print(f'{RATCHET} not found, trying fallback {RATCHET_FALLBACK}')
result = subprocess.run(['git', 'diff', RATCHET_FALLBACK, '--name-only'], capture_output=True, text=True)
if result.returncode != 0:
print('Fallback is also missing, aborting.')
exit(1)
return result.stdout.strip().split('\n')


def format_string(data: str):
data = re_leading_whitespace.sub(lambda m: m.group(0).replace('\t', ' '), data)
data = re_trailing_whitespace.sub('', data)
data = re_bracket_space.sub(') {', data)
data = re_keyword_space.sub(r'\1 ', data)
if not data.endswith('\n'): # Enforce trailing \n
data = data + '\n'
return data


def format_file(filename: str) -> bool:
try:
with open(filename, 'r') as file:
data = file.read()
data = format_string(data)
with open(filename, 'w') as file:
file.write(data)
return True
except FileNotFoundError:
print(f'File not found, probably deleted: {filename}')
return False


def main():
filelist = [f for f in get_changed_filelist() if f.endswith('.java')]
replaced = 0
not_found = 0
if not filelist:
print('No changed files due for formatting!')
return
print('Changed files due for formatting: ', filelist)
for file in filelist:
if format_file(file):
replaced += 1
else:
not_found += 1
print(f'Format complete! {replaced} formatted, {not_found} missing.')


if __name__ == '__main__':
main()

0 comments on commit 5e6a1f3

Please sign in to comment.