Skip to content

Commit

Permalink
Merge pull request #156 from fabasoad/feat/google_java_formatter_jar
Browse files Browse the repository at this point in the history
  • Loading branch information
macisamuele committed May 31, 2023
2 parents 4bc272d + 1ebf251 commit f514929
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 9 deletions.
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,18 @@ To work-around such scenario you have 2 approaches available:

Side note: We're not embedding the Dockerfile in the repository as this is more a workaround to support whom cannot of installing a more recent Java version on the library-user system and as such we are not planning to fully support this other than giving possible solutions (Java 11+ was released in September, 2018).

### How to use pre-downloaded [google-java-format jar](https://github.com/google/google-java-format) file?

You can pass the jar file path to `--google-java-formatter-jar` argument:

```yaml
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: ...
hooks:
- id: pretty-format-java
args: [--google-java-formatter-jar=/usr/bin/google-java-format-1.17.0-all-deps.jar]
```

## License

`language-formatters-pre-commit-hooks` is licensed with [`Apache License version 2.0`](http://www.apache.org/licenses/LICENSE-2.0.html).
28 changes: 19 additions & 9 deletions language_formatters_pre_commit_hooks/pretty_format_java.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,18 +52,25 @@ def get_urls(_version: str) -> typing.List[str]:
@java_required
def pretty_format_java(argv: typing.Optional[typing.List[str]] = None) -> int:
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument(
"--google-java-formatter-version",
dest="google_java_formatter_version",
default=_get_default_version("google_java_formatter"),
help="Google Java Formatter version to use (default %(default)s)",
)
group.add_argument(
"--google-java-formatter-jar",
dest="google_java_formatter_jar",
default=None,
help="Path to Google Java Formatter jar file. Will be downloaded if not defined. Note that --google-java-formatter-version will be ignored if this parameter is defined (default: %(default)).",
)
parser.add_argument(
"--autofix",
action="store_true",
dest="autofix",
help="Automatically fixes encountered not-pretty-formatted files",
)
parser.add_argument(
"--google-java-formatter-version",
dest="google_java_formatter_version",
default=_get_default_version("google_java_formatter"),
help="Google Java Formatter version to use (default %(default)s)",
)
parser.add_argument(
"--aosp",
action="store_true",
Expand All @@ -80,9 +87,12 @@ def pretty_format_java(argv: typing.Optional[typing.List[str]] = None) -> int:
if Version(args.google_java_formatter_version) <= Version("1.9"):
assert_max_jdk_version(Version("16.0"), inclusive=False) # pragma: no cover

google_java_formatter_jar = _download_google_java_formatter_jar(
args.google_java_formatter_version,
)
if args.google_java_formatter_jar is None:
google_java_formatter_jar = _download_google_java_formatter_jar(
args.google_java_formatter_version,
)
else:
google_java_formatter_jar = args.google_java_formatter_jar

cmd_args = [
"java",
Expand Down
20 changes: 20 additions & 0 deletions tests/pretty_format_java_test.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
from unittest.mock import patch

import pytest
from packaging.version import Version

Expand Down Expand Up @@ -67,3 +69,21 @@ def test_pretty_format_java_up_to_1_9_is_allowed_on_jdk_before_16(undecorate_met

def test_pretty_format_java_autofix(tmpdir, undecorate_method):
run_autofix_test(tmpdir, undecorate_method, "not-pretty-formatted.java", "not-pretty-formatted_fixed.java")


@pytest.mark.parametrize(
("cli_arg", "expected_retval"),
(
("--google-java-formatter-jar=google-java-format-1.16.0-all-deps.jar", 0),
("", 0),
),
)
@patch("language_formatters_pre_commit_hooks.pretty_format_java.run_command", autospec=True)
def test_pretty_format_java_jar(mock_run_command, undecorate_method, cli_arg, expected_retval):
mock_run_command.return_value = (0, "")
assert undecorate_method([cli_arg, "pretty-formatted.java"]) == expected_retval
in_args = cli_arg in mock_run_command.call_args.args
if cli_arg == "":
assert in_args
else:
assert not in_args

0 comments on commit f514929

Please sign in to comment.