From a662f4874f6d14b7788b36f7e948b279cd281ea8 Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Wed, 12 Sep 2018 11:04:34 +0200 Subject: [PATCH] fixes for running on windows --- .../com/diffplug/spotless/npm/NodeJSWrapper.java | 11 ++++++++++- .../spotless/npm/NpmExecutableResolver.java | 15 ++++++++++++--- .../gradle/spotless/PrettierIntegrationTest.java | 5 ++--- .../gradle/spotless/TypescriptExtensionTest.java | 5 ++--- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/lib/src/main/java/com/diffplug/spotless/npm/NodeJSWrapper.java b/lib/src/main/java/com/diffplug/spotless/npm/NodeJSWrapper.java index 1ae4efd199..2cd1b108cf 100644 --- a/lib/src/main/java/com/diffplug/spotless/npm/NodeJSWrapper.java +++ b/lib/src/main/java/com/diffplug/spotless/npm/NodeJSWrapper.java @@ -18,6 +18,7 @@ import java.io.File; import java.util.Map; import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; class NodeJSWrapper extends ReflectiveObjectWrapper { @@ -26,9 +27,17 @@ class NodeJSWrapper extends ReflectiveObjectWrapper { public static final String WRAPPED_CLASS = "com.eclipsesource.v8.NodeJS"; + private static final AtomicBoolean flagsSet = new AtomicBoolean(false); + public NodeJSWrapper(ClassLoader classLoader) { super(Reflective.withClassLoader(classLoader), - reflective -> reflective.invokeStaticMethod(WRAPPED_CLASS, "createNodeJS")); + reflective -> { + final boolean firstRun = flagsSet.compareAndSet(false, true); + if (firstRun) { + reflective.invokeStaticMethod(V8_RUNTIME_CLASS, "setFlags", "--color=false"); // required to run prettier on windows + } + return reflective.invokeStaticMethod(WRAPPED_CLASS, "createNodeJS"); + }); } public V8ObjectWrapper require(File npmModulePath) { diff --git a/lib/src/main/java/com/diffplug/spotless/npm/NpmExecutableResolver.java b/lib/src/main/java/com/diffplug/spotless/npm/NpmExecutableResolver.java index cbbf6bc6bd..cea0984a2f 100644 --- a/lib/src/main/java/com/diffplug/spotless/npm/NpmExecutableResolver.java +++ b/lib/src/main/java/com/diffplug/spotless/npm/NpmExecutableResolver.java @@ -31,6 +31,7 @@ *
  • from Environment-Properties in the following order:
  • *
      *
    1. from NVM_BIN environment variable, if available
    2. + *
    3. from NVM_SYMLINK environment variable, if available
    4. *
    5. from NODE_PATH environment variable, if available
    6. *
    7. fallback: PATH environment variable
    8. *
    @@ -45,7 +46,7 @@ private NpmExecutableResolver() { static String npmExecutableName() { String npmName = "npm"; if (PlatformInfo.normalizedOS() == WINDOWS) { - npmName += ".exe"; + npmName += ".cmd"; } return npmName; } @@ -55,7 +56,7 @@ static Supplier> systemProperty() { .map(File::new); } - static Supplier> environmentNvm() { + static Supplier> environmentNvmBin() { return () -> Optional.ofNullable(System.getenv("NVM_BIN")) .map(File::new) .map(binDir -> new File(binDir, npmExecutableName())) @@ -63,6 +64,10 @@ static Supplier> environmentNvm() { .filter(File::canExecute); } + static Supplier> environmentNvmSymlink() { + return pathListFromEnvironment("NVM_SYMLINK"); + } + static Supplier> environmentNodepath() { return pathListFromEnvironment("NODE_PATH"); } @@ -72,7 +77,11 @@ static Supplier> environmentPath() { } static Optional tryFind() { - return Stream.of(systemProperty(), environmentNvm(), environmentNodepath(), environmentPath()) + return Stream.of(systemProperty(), + environmentNvmBin(), + environmentNvmSymlink(), + environmentNodepath(), + environmentPath()) .map(Supplier::get) .filter(Optional::isPresent) .map(Optional::get) diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PrettierIntegrationTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PrettierIntegrationTest.java index f850225878..7a0d374e49 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PrettierIntegrationTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PrettierIntegrationTest.java @@ -15,7 +15,6 @@ */ package com.diffplug.gradle.spotless; -import java.io.File; import java.io.IOException; import org.junit.Test; @@ -48,7 +47,7 @@ public void useInlineConfig() throws IOException { @Test public void useFileConfig() throws IOException { - File formattingFile = setFile(".prettierrc.yml").toResource("npm/prettier/config/.prettierrc.yml"); + setFile(".prettierrc.yml").toResource("npm/prettier/config/.prettierrc.yml"); setFile("build.gradle").toLines( "buildscript { repositories { mavenCentral() } }", "plugins {", @@ -57,7 +56,7 @@ public void useFileConfig() throws IOException { "spotless {", " format 'mytypescript', {", " target 'test.ts'", - " prettier().configFile('" + formattingFile.getAbsolutePath() + "')", + " prettier().configFile('.prettierrc.yml')", " }", "}"); setFile("test.ts").toResource("npm/prettier/config/typescript.dirty"); diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/TypescriptExtensionTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/TypescriptExtensionTest.java index 1aa184fa36..6904b62b9c 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/TypescriptExtensionTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/TypescriptExtensionTest.java @@ -15,7 +15,6 @@ */ package com.diffplug.gradle.spotless; -import java.io.File; import java.io.IOException; import org.junit.Test; @@ -48,7 +47,7 @@ public void useTsfmtInlineConfig() throws IOException { @Test public void useTsfmtFileConfig() throws IOException { - File formattingFile = setFile("tsfmt.json").toLines( + setFile("tsfmt.json").toLines( "{", " \"indentSize\": 1,", " \"convertTabsToSpaces\": true", @@ -61,7 +60,7 @@ public void useTsfmtFileConfig() throws IOException { "spotless {", " typescript {", " target 'test.ts'", - " tsfmt().tsfmtFile('" + formattingFile.getAbsolutePath() + "')", + " tsfmt().tsfmtFile('tsfmt.json')", " }", "}"); setFile("test.ts").toResource("npm/tsfmt/tsfmt/tsfmt.dirty");