Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle markdown from LSP data #3274

Closed
w0rp opened this issue Aug 7, 2020 · 6 comments
Closed

Handle markdown from LSP data #3274

w0rp opened this issue Aug 7, 2020 · 6 comments
Assignees
Labels
enhancement LSP Any issue relating to LSP or tsserver

Comments

@w0rp
Copy link
Member

w0rp commented Aug 7, 2020

Related to #2922, it would be nice to handle markdown data from LSP responses for features like hover information, so the relevant languages can be loaded for syntax highlighting, and certain markdown format markers or whatever LSP sends can be turned into Vim highlights.

Here's an example from a project I work on, with output taken from pyright:

image

Ideally that can be rendered in a popup or preview window like this:

DEFAULTS: dict[str, Literal[False]]

I'd like to write a function that accepts markup data and returns [clean_string, highlights], where highlights is a List of highlights to render using Vim/NeoVim highlight functions.

@w0rp w0rp added enhancement LSP Any issue relating to LSP or tsserver labels Aug 7, 2020
@w0rp w0rp self-assigned this Aug 7, 2020
@w0rp w0rp added this to To Do in On the Radar via automation Aug 7, 2020
@w0rp w0rp moved this from To Do to In Progress in On the Radar Aug 7, 2020
@w0rp w0rp closed this as completed in 7c4b1d8 Aug 12, 2020
On the Radar automation moved this from In Progress to Done Aug 12, 2020
@w0rp
Copy link
Member Author

w0rp commented Aug 12, 2020

I've implemented basic handling for markdown formatting. Just code fences with syntax highlights for the preview window and \_ for now. There's more we can handle later, but those are the two most important things.

@blayz3r
Copy link

blayz3r commented Aug 20, 2020

I still have the off-white color in the popup

@w0rp
Copy link
Member Author

w0rp commented Aug 20, 2020

Could you provide a screenshot? Maybe I can figure out what that is.

@blayz3r
Copy link

blayz3r commented Aug 20, 2020

image

Expecting
image

@blayz3r
Copy link

blayz3r commented Aug 20, 2020

I have pyright and flake8 as my linters
let g:ale_hover_to_preview and let g:ale_hover_cursor don't seem to change anything

Current Filetype: python
Available Linters: ['bandit', 'flake8', 'mypy', 'prospector', 'pycodestyle', 'pydocstyle', 'pyflakes', 'pylama', 'pylint', 'pyls', 'pyre', 'pyright', 'vulture']
Enabled Linters: ['flake8', 'pyright']
Suggested Fixers:
'add_blank_lines_for_python_control_statements' - Add blank lines before control statements.
'autopep8' - Fix PEP8 issues with autopep8.
'black' - Fix PEP8 issues with black.
'isort' - Sort Python imports with isort.
'remove_trailing_lines' - Remove all blank lines at the end of a file.
'reorder-python-imports' - Sort Python imports with reorder-python-imports.
'trim_whitespace' - Remove all trailing whitespace characters at the end of every line.
'yapf' - Fix Python files with yapf.
Linter Variables:

let g:ale_python_auto_pipenv = 0
let g:ale_python_autopep8_options = '--aggressive'
let g:ale_python_flake8_auto_pipenv = 0
let g:ale_python_flake8_change_directory = 1
let g:ale_python_flake8_executable = 'flake8'
let g:ale_python_flake8_options = ''
let g:ale_python_flake8_use_global = 0
let g:ale_python_pyright_config = {}
let g:ale_python_pyright_executable = 'pyright-langserver'
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 = '[%linter%] %s [%severity%]'
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 = {'r': ['styler'], 'java': ['uncrustify', 'google_java_format'], 'python': ['black', 'isort', 'autopep8']}
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 = {'zsh': ['shellcheck'], 'r': ['lintr'], 'sh': ['shellcheck'], 'bash': ['shellcheck'], 'javascript': ['jshint', 'eslint'], 'python': ['flake8', 'pyright']}
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 = '[%linter%] %s [%severity%]'
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 = 1
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_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) flake8
(finished - exit code 0) 'cmd /s/c "flake8 --version"'

<<>>
3.8.3 (mccabe: 0.6.1, pycodestyle: 2.6.0, pyflakes: 2.2.0) CPython 3.8.5 on
Windows
<<>>

(executable check - success) pyright-langserver
(started) 'cmd /s/c "pyright-langserver --stdio"'
(finished - exit code 1) 'cmd /s/c "cd /d D:\Library\Datascience\machine-learning-course\code\supervised\Logistic_Regression && flake8 --format=default --stdin-display-name D:\Library\Datascience\machine-learning-course\code\supervised\Logistic_Regression\logistic_ex1.py - < C:\Users\Tate\AppData\Local\Temp\VIC6601.tmp\logistic_ex1.py"'

<<>>
D:\Library\Datascience\machine-learning-course\code\supervised\Logistic_Regression\logistic_ex1.py:23:80: E501 line too long (84 > 79 characters)
<<>>

@w0rp
Copy link
Member Author

w0rp commented Aug 20, 2020

That's not a bug, that's the difference between Vim popups and balloons. There's an open PR for popups here: #2925

It's held up because the author tried to implement two different uses of popups at once. One is somewhat ready to merge, the other I think will break things.

You can get syntax highlighting in the preview window with :ALEHover for long messages. You won't get documentation for symbols without installing type stubs that provide the documentation. Consult pyright documentation for that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement LSP Any issue relating to LSP or tsserver
Projects
Development

No branches or pull requests

2 participants