get-args.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. const path = require('path')
  2. // normalize file/line numbers into command line args for specific editors
  3. module.exports = function getArgumentsForPosition(editor, fileName, lineNumber, columnNumber = 1) {
  4. const editorBasename = path.basename(editor).replace(/\.(exe|cmd|bat)$/i, '')
  5. switch (editorBasename) {
  6. case 'atom':
  7. case 'Atom':
  8. case 'Atom Beta':
  9. case 'subl':
  10. case 'sublime':
  11. case 'sublime_text':
  12. case 'wstorm':
  13. case 'charm':
  14. case 'zed':
  15. return [`${fileName}:${lineNumber}:${columnNumber}`]
  16. case 'notepad++':
  17. return ['-n' + lineNumber, '-c' + columnNumber, fileName]
  18. case 'vim':
  19. case 'mvim':
  20. return [`+call cursor(${lineNumber}, ${columnNumber})`, fileName]
  21. case 'joe':
  22. case 'gvim':
  23. return [`+${lineNumber}`, fileName]
  24. case 'emacs':
  25. case 'emacsclient':
  26. return [`+${lineNumber}:${columnNumber}`, fileName]
  27. case 'rmate':
  28. case 'mate':
  29. case 'mine':
  30. return ['--line', lineNumber, fileName]
  31. case 'code':
  32. case 'Code':
  33. case 'code-insiders':
  34. case 'Code - Insiders':
  35. case 'codium':
  36. case 'trae':
  37. case 'antigravity':
  38. case 'cursor':
  39. case 'vscodium':
  40. case 'VSCodium':
  41. return ['-r', '-g', `${fileName}:${lineNumber}:${columnNumber}`]
  42. case 'appcode':
  43. case 'clion':
  44. case 'clion64':
  45. case 'idea':
  46. case 'idea64':
  47. case 'phpstorm':
  48. case 'phpstorm64':
  49. case 'pycharm':
  50. case 'pycharm64':
  51. case 'rubymine':
  52. case 'rubymine64':
  53. case 'webstorm':
  54. case 'webstorm64':
  55. case 'goland':
  56. case 'goland64':
  57. case 'rider':
  58. case 'rider64':
  59. return ['--line', lineNumber, '--column', columnNumber, fileName]
  60. }
  61. if (process.env.LAUNCH_EDITOR) {
  62. return [fileName, lineNumber, columnNumber]
  63. }
  64. // For all others, drop the lineNumber until we have
  65. // a mapping above, since providing the lineNumber incorrectly
  66. // can result in errors or confusing behavior.
  67. return [fileName]
  68. }