dense-analysis / dense-analysis/ale
Typescript's standard fixer does not update the buffer
- Dominant language
- Vim Script
- Stars
- 14k
- Forks
- 1.5k
- Avg merge
- 17h 49m
- Merged PRs (30d)
- 1
Description
## Information
**VIM version**
NVIM v0.4.3
Build type: Release
Operating System: macOS 10.15.5
## What went wrong
When saving Typescript files, the `standard` fixer does not apply the fix to the buffer. I can see from ALEInfo that the fixer program exits with code 1. I tried redirecting the error output to a log file and it gave me the following:
```
/Users/aang/Code/letters-to-reps/frontend/node_modules/ignore/index.js:366
throw new Ctor(message)
^
RangeError: path should be a `path.relative()`d string, but got "../../../../../var/folders/q_/gw98zhrj6vz26cwcsx99pgfw0000gn/T/nvimNKuJAm/3/App.tsx"
at throwError (/Users/aang/Code/letters-to-reps/frontend/node_modules/ignore/index.js:366:9)
at checkPath (/Users/aang/Code/letters-to-reps/frontend/node_modules/ignore/index.js:385:12)
at Ignore._test (/Users/aang/Code/letters-to-reps/frontend/node_modules/ignore/index.js:502:5)
at Ignore.ignores (/Users/aang/Code/letters-to-reps/frontend/node_modules/ignore/index.js:541:17)
at /Users/aang/Code/letters-to-reps/frontend/node_modules/ignore/index.js:545:26
at Array.filter ()
at Ignore.filter (/Users/aang/Code/letters-to-reps/frontend/node_modules/ignore/index.js:549:29)
at /Users/aang/Code/letters-to-reps/frontend/node_modules/deglob/index.js:46:31
at end (/Users/aang/Code/letters-to-reps/frontend/node_modules/run-parallel/index.js:18:15)
at done (/Users/aang/Code/letters-to-reps/frontend/node_modules/run-parallel/index.js:22:10)
```
I also tried cowboy coding the ale fixer code and had it write to the file itself, which works, but then the buffer isn't updated with the changes.
## Reproducing the bug
1. Download these files: https://gist.github.com/nathanielks/a18d52a404559c8c1193e3113bfb9578
2. `yarn`
3. `vim App.tsx`
4. `:ALEFix`
### :ALEInfo
```
Current Filetype: typescriptreact
Available Linters: ['eslint', 'standard', 'tslint', 'tsserver', 'typecheck', 'xo']
Enabled Linters: ['standard']
Suggested Fixers:
'remove_trailing_lines' - Remove all blank lines at the end of a file.
'trim_whitespace' - Remove all trailing whitespace characters at the end of every line.
Linter Variables:
Global Variables:
let g:ale_cache_executable_check_failures = v:null
let g:ale_change_sign_column_color = 0
let g:ale_command_wrapper = ''
let g:ale_completion_delay = v:null
let g:ale_completion_enabled = 0
let g:ale_completion_max_suggestions = v:null
let g:ale_echo_cursor = 1
let g:ale_echo_msg_error_str = 'Error'
let g:ale_echo_msg_format = '%code: %%s'
let g:ale_echo_msg_info_str = 'Info'
let g:ale_echo_msg_warning_str = 'Warning'
let g:ale_enabled = 1
let g:ale_fix_on_save = 1
let g:ale_fixers = {'typescript': ['standard'], 'javascript': ['standard'], 'typescriptreact': ['standard'], 'json': [], 'php': ['phpcbf'], 'yaml': ['prettier']}
let g:ale_history_enabled = 1
let g:ale_history_log_output = 1
let g:ale_keep_list_window_open = 0
let g:ale_lint_delay = 200
let g:ale_lint_on_enter = 1
let g:ale_lint_on_filetype_changed = 1
let g:ale_lint_on_insert_leave = 1
let g:ale_lint_on_save = 1
let g:ale_lint_on_text_changed = 'normal'
let g:ale_linter_aliases = {}
let g:ale_linters = {'typescript': ['standard'], 'typescriptreact': ['standard'], 'javascript': ['standard']}
let g:ale_linters_explicit = 0
let g:ale_list_vertical = 0
let g:ale_list_window_size = 10
let g:ale_loclist_msg_format = '%code: %%s'
let g:ale_lsp_root = {}
let g:ale_max_buffer_history_size = 20
let g:ale_max_signs = -1
let g:ale_maximum_file_size = v:null
let g:ale_open_list = 0
let g:ale_pattern_options = v:null
let g:ale_pattern_options_enabled = v:null
let g:ale_set_balloons = 0
let g:ale_set_highlights = 1
let g:ale_set_loclist = 1
let g:ale_set_quickfix = 0
let g:ale_set_signs = 1
let g:ale_sign_column_always = 1
let g:ale_sign_error = '❌'
let g:ale_sign_info = '⚠'
let g:ale_sign_offset = 1000000
let g:ale_sign_style_error = '❌'
let g:ale_sign_style_warning = '⚠'
let g:ale_sign_warning = '⚠'
let g:ale_sign_highlight_linenrs = 0
let g:ale_statusline_format = v:null
let g:ale_type_map = {}
let g:ale_use_global_executables = v:null
let g:ale_virtualtext_cursor = 0
let g:ale_warn_about_trailing_blank_lines = 1
let g:ale_warn_about_trailing_whitespace = 1
Command History:
(executable check - success) /Users/aang/Code/letters-to-reps/frontend/node_modules/standardx/bin/cmd.js
(finished - exit code 1) ['/bin/zsh', '-c', '''/Users/aang/Code/letters-to-reps/frontend/node_modules/standardx/bin/cmd.js'' --stdin ''/Users/aang/Code/letters-to-reps/frontend/src/App.tsx'' < ''/var/folders/q_/gw98zhrj6vz26cwcsx99pgfw0000gn/T/nvimjPFWZ4/2/App.tsx''']
<<>>
:1:26: Extra semicolon.
:2:52: Extra semicolon.
:3:40: Extra semicolon.
:7:13: Missing space before function parentheses.
:9:25: Unexpected usage of doublequote.
:10:30: A space is required before closing bracket
:12:4: Extra semicolon.
:15:19: Extra semicolon.
<<>>
(finished - exit code 1) ['/bin/zsh', '-c', '''/Users/aang/Code/letters-to-reps/frontend/node_modules/standardx/bin/cmd.js'' --fix ''/var/folders/q_/gw98zhrj6vz26cwcsx99pgfw0000gn/T/nvimjPFWZ4/3/App.tsx''']
```
---
## Additional Info
I tried playing with the fixer in `autoload/ale/fixers/standard.vim`:
```
return {
\ 'command': ale#node#Executable(a:buffer, l:executable)
\ . (!empty(l:options) ? ' ' . l:options : '')
\ . ' --fix %s'
\}
```
That will save the fixed code to the file, but not update the buffer. I'm not familiar with writing Ale specifically enough to know how to get the buffer to update 🙈
Contributor guide
Assessment
This issue has not been assessed yet.