Ale: tsserver linter freezes vim for 20 seconds after fresh start

Created on 9 Aug 2018  路  3Comments  路  Source: dense-analysis/ale

馃憢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

bug

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_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.

All 3 comments

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!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ianchanning picture ianchanning  路  3Comments

glepnir picture glepnir  路  3Comments

trevordmiller picture trevordmiller  路  4Comments

Integralist picture Integralist  路  4Comments

plexigras picture plexigras  路  3Comments