GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing github.com — Providing explicit support for Groovy source code (fixes #13) by fvgh · Pull Request #94 · diffplug/spotless Conversation
Member
Supporting dedicated configuration for groovy source.
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactionsSupporting dedicated configuration for groovy source. The configuration allows access to formatter steps which have been introduced for Java, but which are also useable for Groovy code. Integrates Groovy-Eclipse based Groovy formatter step implementation. Allows coexistent configuration of Java and Groovy formatter steps.
Member
Author
All reactions
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page.
Member
All reactions
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page.
jbduncan
reviewed
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I've had a very brief look through this PR. Nothing about the overall structure strikes out to me as needing attention, so I'm okay with how it looks so far. What I'm concerned about though is that, AFAICT, there's no explicit documentation yet on what options one can use to configure a Has any documentation for this been written yet? I'd not, I think it would be worth creating a new PR with some basic instructions somewhere.
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactions
Member
All reactions
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page.
Member
Author
All reactions
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. …Set<String> has complicated serialization. Reused FileSignature.toSortedSet() for a more stable serialization. Also, using FileSignature.toSortedSet() without first calling asNonNulList() would be an error. So, might as well have toSortedSet() call that method itself as its first argument. …ion its own invisible <a> tag for stable links.
Member
All reactions
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page.
jbduncan
reviewed
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactions
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not sure if this change is binary-compatible. Do we care about binary compatibility for public types in
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactions
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's definitely source-compatible, if not binary. Good enough while we've got zero users besides ourselves. Good catch though 👍
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactions
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This could be simplified to
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactions
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It could be, at the cost of a teensy-weensy allocation for every time we apply a step. Definitely premature optimization, but the long form is still easy to read.
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactions
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @nedtwigg, what do you think about touching up the comments in this code block as well?
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactions
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm for it. What comments do you want to touch up?
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactions
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||
| public class GroovyExtension extends FormatExtension { | ||
| public static final String NAME = "groovy"; | ||
| public static final boolean EXCLUDE_JAVA_DEFAULT = false; |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I believe NAME could be made package-private and EXCLUDE_JAVA_DEFAULT could be made private, if time allows.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Good catch :) I'll fix.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
We're sooo close! Have an interesting problem. I tried using the groovy formatter in spotlessSelf.gradle as such: java { ... eclipseFormatFile 'spotless.eclipseformat.xml' } groovy { target 'build.gradle', 'spotlessSelf.gradle', 'settings.gradle' greclipseFormatFile 'spotless.eclipseformat.xml' } The problem is that GroovyExtension { public void greclipseFormatFile(Object... greclipseFormatFiles) { ... } public void greclipseFormatFile(String greclipseVersion, Object... greclipseFormatFiles) { ... } } It's copied from the JavaExtension, which used to have these two methods: JavaExtension { public void eclipseFormatFile(Object eclipseFormatFile) { ... } public void eclipseFormatFile(String eclipseVersion, Object eclipseFormatFile) { ... } } That was unambiguous. But now that we've turned If I could go back in time, I would make all of our versioned plugins work the way that the scala extension works. That pattern leaves much more room for future extensibility without bumping into these kinds of problems. But I don't want to break the Java DSL for our current users, and it makes sense for the Groovy and Java DSL to be similar. So I think our best approach is the workaround I'm about to upload. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
…and SpotlessExtension. This means that Spotless can now use greclipse to format its gradle files.
| eclipseFormatFiles = new Object[]{eclipseVersion}; | ||
| eclipseVersion = EclipseFormatterStep.defaultVersion(); | ||
| } | ||
| Project project = getProject(); |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This is naaasty. Here's a better way, maybe:
public class JavaExtension { public EclipseCfg eclipse() { return eclipse(EclipseFormatterStep.defaultVersion()) } public EclipseCfg eclipse(String version) { return new EclipseCfg(version); } // see https://github.com/diffplug/spotless/blob/a8ab1c1331376e57e63441417316139198c285de/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ScalaExtension.java#L38-L65 for implementation of EclipseCfg public void eclipseFormatFile(Object fileArg) { warning("Deprecated in favor of 'eclipse().configFile(fileArg)'") eclipse().configFiles(fileArgs) } public void eclipseFormatFile(String version, Object fileArg) { warning("Deprecated in favor of 'eclipse('" + version + "').configFile(fileArg)") eclipse(version).configFiles(fileArgs) } }
The advantage of this approach is it gets all of our DSL on the Optional version argument -> config builder pattern. The downside is it deprecates our main usecase for the sole purpose of accommodating the multiple-config-file-in-groovy usecase.
I'm inclined to avoid the question altogether by only allowing a single config file for both JavaExtension and GroovyExtension. It makes the docs simpler, and users can always concatenate groovy settings themselves. @fvgh how much will this limitation hurt GroovyExtension users?
I'm open to the deprecation path discussed above, but I don't have the time to do the proper testing, update the docs, etc.
@fvgh on an unrelated note, your ext-spotless-greclipse is in jcenter, but not mavencentral. I'm gonna wait til we're sure we've got it right to sync to mavencentral.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
How about replacing format file varargs...
public void greclipseFormatFile(String greclipseVersion, Object... greclipseFormatFiles) { ... }
...with two separate single-argument and iterable versions?
public void greclipseFormatFile(String greclipseVersion, Object greclipseFormatFile) { ... } public void greclipseFormatFile(String greclipseVersion, Iterable<Object> greclipseFormatFiles) { ... }
...or a version where we require at least one format file?
public void greclipseFormatFile(String greclipseVersion, Object firstGreclipseFormatFile, Object... otherGreclipseFormatFiles) {
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
greclipseFormatFile 'mycfg1.prop', 'mycfg2.prop'. This will break all of your workarounds, I believe. It also breaks the workaround I've implemented in the previous commit.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I can see how it would break my single-arg-and-iterable workaround, but not for my other one.
I'm not really familiar with Groovy, but if it were Java, I believe this would be syntactically correct if used with my latter workaround:
greclipseFormatFile('mycfg1.prop', 'mycfg2.prop');
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Unless, are we thinking of "breakage" in terms of "'mycfg1.prop' will still be interpreted as the greclipseVersion rather than the 1st greclipseFormatFile"? (In which case, I'd agree.)
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
My example above is from the README (loosely).
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Pretty sure the travis failure is a bug in travis (it's building an old commit and reporting that it's building a new one). I've reported to Travis, hopefully will resolve with future commits. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
Sorry @nedtwigg and @jbduncan that you had to put in so much work on this PR.
To get a feeling how configuration shall look like: |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
No apologies!! You've built a great feature that a lot of users want. The original sin here was me building a sloppy escape hatch for setting the version. In the bad old days, Spotless didn't have Provisioner, and all of its formatters were compile-time dependencies. That didn't scale as we added support for more languages, so we added Provisioner. A nice benefit of this abstraction is that now users can peg the version of their formatter implementation while still getting framework-level improvements, but it means that pre-Provisioner DSL either has no public mechanism for setting the version (FreshMark), or has a janky mechanism (Eclipse).
These both sound great. It's easy to make a nice warning message for helping legacy eclipseFormatFile users migrate.
Whatever's easier for you. I don't care if we close this PR and start fresh or whatever. This history is interesting but not critical.
I think so. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
The configuration allows access to formatter steps which have been introduced for Java, but which are also useable for Groovy code. Integrates Groovy-Eclipse based Groovy formatter step implementation. Allows coexistent configuration of Java and Groovy formatter steps.
|
@jbduncan Actually I did not a re-base. I just wanted to squash the commits. Ans since I was on it, I wanted to start at head of master since there were already conflicts reported. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I am not sure, but it seems to me the Travis problem @nedtwigg was referring to is not a problem with Travis, but in my code. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Yes confirmed. Just understood what PaddeCell does for me 😄 . Ok, still missing some basics about the project 😞 . Not sure why the problem (have not found the root cause yet) did not show up in the unit-tests. Should have been detected by GrEclipseFormatterStepTest. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Sorry guys. Started to look for red herrings. The basics are sane. Must be some stupidity I inserted in the small refactoring I did for the last commit. Have to call it a day. Must postpone the PR until the weekend. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@jbduncan I will omit the null-checks in this PR till your LibPreconditions.java is available. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@fvgh Yep, it's alright with me. 👍 |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
With the last change I introduced a proposal for the greclipsFormat ping-pong handling. The ping-pong is basically a ['C', 'A', 'B', 'A', 'B', ...] series. Hence it could not be solved by I did not fully research the ping-pong problem. It occurs even with the latest Groovy-Eclipse snapshot (Feb. 2017) in my Eclipse Neon.3. I used the formatter in the Eclipse GUI several times on the input Since I understood that @nedtwigg wanted too see a demonstration within this PR, I added a proposal in a separated commit. As you will observe, Groovy-Eclipse Formatter is far from the state the JDT formatter is in, but it is the best I know. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Hi @fvgh, I have requested some changes regarding your latest commit. Would you kindly look through them for me?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| @@ -1,5 +1,5 @@ | |||
| buildscript { | |||
| repositories { maven { url 'https://plugins.gradle.org/m2/' } } | |||
| repositories { maven { url 'https://plugins.gradle.org/m2/' }} | |||
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
This should be formatted like the following (if possible):
repositories {
maven {
. . .
}
}
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
That should work. The formatter should accept the format.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Sorry, but the formatter always replaces nested closures by } } and then starting the ping-pong, unless I reformat it to }}.
Furthermore it cannot convinced to leave closures with one entry split over multiple lines.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| def makeLink = { url, text -> "<a href=\"${url}\" style=\"text-transform: none;\">${text}</a>" } | ||
| def javadocInfo = '<h2>' + makeLink("https://github.com/${org}/${name}", "${group}:${project.ext.artifactId}:${ext.version}") + | ||
| ' by ' + makeLink('http://www.diffplug.com', 'DiffPlug') + '</h2>' | ||
| ' by ' + makeLink('http://www.diffplug.com', 'DiffPlug') + '</h2>' |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Nice change! 👍
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| username = cred('nexus_user') | ||
| password = cred('nexus_pass') | ||
| } | ||
| }} |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
It should be formatted like this (if possible):
repositories {
maven {
. . .
}
}
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| toolVersion = VER_FINDBUGS | ||
| sourceSets = [sourceSets.main] // don't check the test code | ||
| sourceSets = [ | ||
| sourceSets.main] // don't check the test code |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
You should manually reformat this line like this (if possible):
sourceSets = [ sourceSets.main // don't check the test code ]
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
For array I have only a max length. For example with groovy.formatter.longListLength=1, we can assure that all entries are in separate lines. Hence we can archive:
sourceSets = [
// don't check the test code
sourceSets.main
]
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| findbugs { | ||
| reportLevel = 'low' // low|medium|high (low = sensitive to even minor mistakes) | ||
| findbugs { reportLevel = 'low' // low|medium|high (low = sensitive to even minor mistakes) | ||
| } |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
It's not clear to me why Greclipse formatted this section like this.
Can we prevent it with a setting?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I think it is the comment, which is in the same line. The Groovy-Formatter seems only to accept this or method calls.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Hmm, that's a shame.
Could we work around this problem with the following manual formatting?
findbugs { reportLevel = 'low' } // low|medium|high (low = sensitive to even minor mistakes)
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Yes, that works.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| findbugs { | ||
| reportLevel = 'low' // low|medium|high (low = sensitive to even minor mistakes) | ||
| findbugs { reportLevel = 'low' // low|medium|high (low = sensitive to even minor mistakes) | ||
| } |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
It's not clear to me why Greclipse formatted this section like this.
Can we prevent it with a setting?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Yes, by rearranging the position of the comment.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Okay, cool. 👍
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| include '**/*.gradle' | ||
| exclude '_ext/**' | ||
| } | ||
| custom 'preventFormatPingPong', { return it.replaceAll('}[ \t\f]+}', '}}') } |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Please refactor the closure of the custom 'noInternalDeps', { ... } step in the java { ... } block above, into a variable, and pass that variable as a custom step to both the java and groovy blocks, like so:
spotless { def noInternalDepsClosure = { source -> if (source.contains('import org.gradle.internal.') { throw new AssertionError("Accidental internal import") } } java { . . . custom 'noInternalDeps', noInternalDepsClosure . . . } groovy { . . . custom 'noInternalDeps', noInternalDepsClosure . . . } }
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
👍
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| include '**/*.gradle' | ||
| exclude '_ext/**' | ||
| } | ||
| custom 'preventFormatPingPong', { return it.replaceAll('}[ \t\f]+}', '}}') } |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
And then please add the following line just below
bumpThisNumberIfACustomStepChanges(1)
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
👍
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| include '**/*.gradle' | ||
| exclude '_ext/**' | ||
| } | ||
| custom 'preventFormatPingPong', { return it.replaceAll('}[ \t\f]+}', '}}') } |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I'm mildly curious by the \f here, as it's a unusual regex pattern for me. What does it match against?
Would matching against \t as well be sensible here?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
The \t should be sensible, since it will most likely to the ping-pong as well. But yes the \f should be removed.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| findbugs { | ||
| reportLevel = 'high' // low|medium|high (low = sensitive to even minor mistakes) | ||
| findbugs { reportLevel = 'high' // low|medium|high (low = sensitive to even minor mistakes) | ||
| } |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
It's not clear to me why Greclipse formatted this section like this.
Can we prevent it with a setting?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
No, just by rearranging the position of the comment.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@jbduncan So in summary, you think using greclipse for spotless gradle is principally ok? Shall I provide a new proposal within this PR, or shall we split this issue? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
@fvgh I think that using Greclipse on Spotless is a good idea! But I'd like to wait until @nedtwigg gets back before we commit to it, as he's the principal decision maker and so he may have other ideas. :) |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
… greclipse formatter)
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Thanks @fvgh! Two minor things left.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| spotless { | ||
| def noInternalDepsClosure = { | ||
| if (it.contains('import org.gradle.internal.') && | ||
| !it.contains('def noInternalDepsClosure')) { |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I think this condition does little if anything to help here.
With this condition in place, it means that if we format spotlessSelf.gradle, then it will never throw AssertionError even if it imports org.gradle.internal.*. I don't know if build files can even import Gradle-internal packages, but we might as well play it safe I reckon.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Oh, I'm most likely mistaken!
I can see that if !it.contains('def noInternalDepsClosure') is not in place, then running spotlessSelf.gradle on itself would cause an AssertionError.
Never mind! 😝
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| exclude '_ext/**' | ||
| } | ||
| custom 'noInternalDeps', noInternalDepsClosure | ||
| custom 'preventFormatPingPong', { return it.replaceAll('}[ \t\f]+}', '}}') } |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Are you still working on replacing \f with \t?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@nedtwigg Let me know what you would propose about using greclipse to format the gradle files. As soon as we reach a final agreement, I'll do quickly the cherry-picking and squash the commits. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I am afraid the testing for this PR under Windows are not yet successful. Provide a solution later on. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
…ct to test. Omit implicit testing of end-line characters for licenseHeader step.
EXCLUDE_JAVA_DEFAULT was being used as an alias for `false`. If we changed its value to true, it didn't just change the default behavior, it would also break the implementation logic.
…enCentral as well.
…an reference it directly.
The DSL should be based on the name of the project. Many formatters have "format" in the name -> google-java-format, scalafmt, etc. But others don't, e.g. ktlint.
| + breaking spotless into libraries [#56](https://github.com/diffplug/spotless/issues/56) | ||
| + lots of other things, but especially the diff support in `spotlessCheck` | ||
| * Huge thanks to [Frank Vennemeyer](https://github.com/fvgh) for [Groovy support via greclipse](https://github.com/diffplug/spotless/issues/13). | ||
| * Huge thanks to [Stefan Oehme](https://github.com/oehme) for tons of help on the internal mechanics of Gradle. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
@fvgh do you have a different homepage you'd like me to link to?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Thanks, the page is fine.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
This looks great!!! I'm ready to merge and release. I made a few changes and updated the changelog. Once I get signoff from you that my changes are okay, we can ship it! |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Btw, just a note:
PaddedCell can resolve any ambiguity. For converging sequences, it will just silently let it slide. For cycles and diverging sequences, the user has to manually specify |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I squashed the commits. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Merged!! I unsquashed them. We've done some merge commits along the way, so squashing made the history confusing to look at (we still couldn't do a simple rebase). Also, I tagged one of the intermittent commits as the commit which released to mavenCentral. The merge commit does a nice job providing a summary of all the changes. It should be in oss.snapshots in ~10 minutes, we'll make sure it's doing what we want, and then I'll ship 3.0.0! |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Errr, 3.3.0 |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.