diff --git a/packages/react-dev-utils/launchEditor.js b/packages/react-dev-utils/launchEditor.js index 1e9d9822608..8bfa3f3dcc9 100644 --- a/packages/react-dev-utils/launchEditor.js +++ b/packages/react-dev-utils/launchEditor.js @@ -11,6 +11,7 @@ var fs = require('fs'); var path = require('path'); var child_process = require('child_process'); +var os = require('os'); var chalk = require('chalk'); var shellQuote = require('shell-quote'); @@ -43,7 +44,8 @@ function addWorkspaceToArgumentsIfExists(args, workspace) { } function getArgumentsForLineNumber(editor, fileName, lineNumber, workspace) { - switch (path.basename(editor)) { + var editorBasename = path.basename(editor).replace(/\.(exe|cmd|bat)$/i, ''); + switch (editorBasename) { case 'vim': case 'mvim': return [fileName, '+' + lineNumber]; @@ -154,6 +156,20 @@ function launchEditor(fileName, lineNumber) { return; } + if ( + process.platform === 'linux' && + fileName.startsWith('/mnt/') && + /Microsoft/i.test(os.release()) + ) { + // Assume WSL / "Bash on Ubuntu on Windows" is being used, and + // that the file exists on the Windows file system. + // `os.release()` is "4.4.0-43-Microsoft" in the current release + // build of WSL, see: https://github.com/Microsoft/BashOnWindows/issues/423#issuecomment-221627364 + // When a Windows editor is specified, interop functionality can + // handle the path translation, but only if a relative path is used. + fileName = path.relative('', fileName); + } + var workspace = null; if (lineNumber) { args = args.concat(