馃憢when first opening a .ts(x) file after a fresh vim start running the linter freezes vim for about 20 seconds for me. The only enabled linter for TS I have is tsserver.
If I open a .ts(x) file and don't do anything that triggers the linter for ~20 seconds no such freezing exists.
Added ALEInfo and profile of the delay/freeze below. Lmk if there is anything else I can provide. Thanks :)
ALEInfo
Current Filetype: typescript
Available Linters: ['eslint', 'tslint', 'tsserver', 'typecheck']
Enabled Linters: ['tsserver']
Suggested Fixers:
'eslint' - Apply eslint --fix to a file.
'prettier' - Apply prettier to a file.
'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.
'tslint' - Fix typescript files with tslint --fix.
Linter Variables:
let g:ale_typescript_tsserver_config_path = ''
let g:ale_typescript_tsserver_executable = 'tsserver'
let g:ale_typescript_tsserver_use_global = 0
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 = 0
let g:ale_fixers = {'typescript': ['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_save = 0
let g:ale_lint_on_text_changed = 'always'
let g:ale_lint_on_insert_leave = 0
let g:ale_linter_aliases = {}
let g:ale_linters = {'typescript': ['tsserver']}
let g:ale_linters_explicit = 0
let g:ale_list_window_size = 10
let g:ale_list_vertical = 0
let g:ale_loclist_msg_format = '%code: %%s'
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 = 0
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_statusline_format = v:null
let g:ale_type_map = {}
let g:ale_use_global_executables = v:null
let g:ale_warn_about_trailing_blank_lines = 1
let g:ale_warn_about_trailing_whitespace = 1
Command History:
(started) ['sh', '-c', '/Users/janhellmich/src/server/node_modules/.bin/tsserver']
Profile: profile.log
I know about that issue, and I'm not sure I can do anything about it. The problem is that the call to send data to the server is blocking. I would like it if Vim had a version of ch_sendraw which sent off data without blocking Vim.
I have fixed this now, _but_ in order for the fix to work, you'll have to update to Vim 8.1, patch 350. You can either compile Vim from source, or wait for someone to provide a binary.
As of today, Vim contains a feature for setting jobs and channels to use non-blocking writes. This now makes it possible for ch_sendraw calls to return immediately. What this means is that ALE doesn't have to block on the calls for messages sent to tsserver, and the freezing goes away.
Thank you so much, works amazingly!
Most helpful comment
I have fixed this now, _but_ in order for the fix to work, you'll have to update to Vim 8.1, patch 350. You can either compile Vim from source, or wait for someone to provide a binary.
As of today, Vim contains a feature for setting jobs and channels to use non-blocking writes. This now makes it possible for
ch_sendrawcalls to return immediately. What this means is that ALE doesn't have to block on the calls for messages sent to tsserver, and the freezing goes away.