vim-codefmt
vim-codefmt copied to clipboard
dartfmt is deprecated
Describe the bug
The dart format
command replaces dartfmt
.
Dart SDK version: 2.16.1 already removed dartfmt
command line tool.
I try to use alias as a work around, but not working.
alias dartfmt='dart format -o show'
thanks!
That's... annoyingly quick, as deprecations go.
I think we might want to basically replicate the functionality from https://github.com/dart-lang/dart-vim-plugin/pull/125, which checks whether dart
exists, then does a version match on the output of dart --version
, and uses dart format
if the version is >= 2.14.
Shell alias is completely ignored in vim syscalls IIRC. Did you try setting dartfmt_executable instead? Something like Glaive codefmt dartfmt_executable='dart format -o show'
? I can't remember if we set that one up to split spaces properly yet, so that might just give an error about the spaces if not.
That's... annoyingly quick, as deprecations go.
I think we might want to basically replicate the functionality from dart-lang/dart-vim-plugin#125, which checks whether
dart
exists, then does a version match on the output ofdart --version
, and usesdart format
if the version is >= 2.14.
Thank you malcolmr, that would be great if codefmt solve this by check dart version.
I find a simple work around here, Just put a small excutable shell script name 'dartfmt' under one of your $PATH directory, for example: /usr/local/bin/ , where 'which' command can find it.
#!/bin/sh
dart format -o show
Make sure the which
command can find it! At the beginning I put it under my personal bin directory(which is added to the $PATH), it didn't work. Then I put it under /usr/local/bin
, it works perfect.
Yes, that should work if the dartfmt_executable
override doesn't. We should still make sure that override works and follow up about the version check.
I'd suggest to minimize overhead for the new case by always attempting dart format
first, then falling back to a version check and dartfmt
for whatever error cases suggest the new version is missing.
@dbarnett This doesn't work because of the spaces.
:Glaive codefmt dartfmt_executable='dart format -o show'
By adding dartfmt_options
as below, it works:
--- a/autoload/codefmt/dartfmt.vim
+++ b/autoload/codefmt/dartfmt.vim
@@ -38,7 +38,7 @@ function! codefmt#dartfmt#GetFormatter() abort
" @flag(dartfmt_executable}, only targetting the range from {startline} to
" {endline}
function l:formatter.FormatRange(startline, endline) abort
- let l:cmd = [ s:plugin.Flag('dartfmt_executable') ]
+ let l:cmd = [ s:plugin.Flag('dartfmt_executable') ] + s:plugin.Flag('dartfmt_options')
try
" dartfmt does not support range formatting yet:
" https://github.com/dart-lang/dart_style/issues/92
diff --git a/instant/flags.vim b/instant/flags.vim
index 8694c31..5a7a744 100644
--- a/instant/flags.vim
+++ b/instant/flags.vim
@@ -74,7 +74,11 @@ call s:plugin.Flag('gofmt_executable', 'gofmt')
""
" The path to the dartfmt executable.
-call s:plugin.Flag('dartfmt_executable', 'dartfmt')
+call s:plugin.Flag('dartfmt_executable', 'dart')
+
+""
+" The options to feed new dartfmt
+call s:plugin.Flag('dartfmt_options', ['format', '-o', 'show'])
K, then it needs a fix like 293c2088fc to support spaces. Thanks for checking. In the meantime, your shell script workaround is the best bet.
Note that this was mostly done in #224, though I see we actually have a bug: we switched dartfmt_executable
to optionally be a list, but https://github.com/google/vim-codefmt/blob/dbbbca4/autoload/codefmt/dartfmt.vim#L29 still assumes that it's a string.