ms-jpq / coq_nvim

Fast as FUCK nvim completion. SQLite, concurrent scheduler, hundreds of hours of optimization.
GNU General Public License v3.0
3.49k stars 96 forks source link

How to debug COQ fails to start on nvim 0.6.0 on Ubuntu 20.04 #450

Closed vegerot closed 2 years ago

vegerot commented 2 years ago

I apologize for the brief details. I am asking for help on how to get more details to help you diagnose this problem.

Whenever I start neovim I get

Please update dependencies using :COQdeps
-
-
Dependencies will be installed privately inside `/home/max/.local/share/nvim/plugge
d/coq_nvim/.vars`
`rm -rf coq_nvim` will cleanly remove everything
COQ EXITED - 1

My config looks like

vim.g.coq_settings = {
  ["clients.tabnine"] = {
    enabled = true,
    weight_adjust = -0.4,
  },
  auto_start = true,
  xdg = true,
  -- conflicts with Tmux
  ["keymap.jump_to_mark"] = ''
}

checkhealth


nvim: health#nvim#check
========================================================================
## Configuration
  - OK: no issues found

## Performance
  - OK: Build type: RelWithDebInfo

## Remote Plugins
  - OK: Up to date

## terminal
  - INFO: key_backspace (kbs) terminfo entry: key_backspace=\177
  - INFO: key_dc (kdch1) terminfo entry: key_dc=\E[3~
  - INFO: $VTE_VERSION='6003'
  - INFO: $COLORTERM='truecolor'

## tmux
  - OK: escape-time: 0
  - INFO: Checking stuff
  - OK: focus-events: on
  - INFO: $TERM: screen-256color

nvim-treesitter: require("nvim-treesitter.health").check()
========================================================================
## Installation
  - WARNING: `tree-sitter` executable not found (parser generator, only needed for :TSInstallFromGrammar, not required for :TSInstall)
  - OK: `node` found v14.18.3 (only needed for :TSInstallFromGrammar)
  - OK: `git` executable found.
  - OK: `cc` executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl", "zig" }
    Version: cc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
  - OK: Neovim was compiled with tree-sitter runtime ABI version 13 (required >=13). Parsers must be compatible with runtime ABI.

## Parser/Features H L F I J
  - dot            ✓ . . . ✓ 
  - perl           ✓ . . . . 
  - rust           ✓ ✓ ✓ ✓ ✓ 
  - bash           ✓ ✓ ✓ . ✓ 
  - fusion         ✓ ✓ ✓ ✓ . 
  - fish           ✓ ✓ ✓ ✓ ✓ 
  - ledger         ✓ . ✓ ✓ ✓ 
  - php            ✓ ✓ ✓ ✓ ✓ 
  - python         ✓ ✓ ✓ ✓ ✓ 
  - java           ✓ ✓ . ✓ ✓ 
  - json           ✓ ✓ ✓ ✓ . 
  - vim            ✓ ✓ . . ✓ 
  - kotlin         ✓ ✓ ✓ . ✓ 
  - html           ✓ ✓ ✓ ✓ ✓ 
  - julia          ✓ ✓ ✓ ✓ ✓ 
  - rasi           ✓ ✓ ✓ ✓ . 
  - css            ✓ . ✓ ✓ ✓ 
  - scss           ✓ . . ✓ . 
  - erlang         . . . . . 
  - norg           . . . . . 
  - elixir         ✓ ✓ ✓ ✓ ✓ 
  - surface        ✓ . ✓ ✓ ✓ 
  - vala           ✓ . . . . 
  - eex            ✓ . . . ✓ 
  - heex           ✓ ✓ ✓ ✓ ✓ 
  - c              ✓ ✓ ✓ ✓ ✓ 
  - ocaml          ✓ ✓ ✓ . ✓ 
  - ocaml_interface✓ ✓ ✓ . ✓ 
  - c_sharp        ✓ ✓ ✓ . ✓ 
  - lua            ✓ ✓ ✓ ✓ ✓ 
  - typescript     ✓ ✓ ✓ ✓ ✓ 
  - prisma         ✓ . . . . 
  - http           ✓ . . . ✓ 
  - fennel         ✓ ✓ . . ✓ 
  - llvm           ✓ . . . . 
  - hocon          ✓ . . . ✓ 
  - scala          ✓ . ✓ . ✓ 
  - ql             ✓ ✓ . ✓ ✓ 
  - hjson          ✓ ✓ ✓ ✓ ✓ 
  - supercollider  ✓ ✓ ✓ ✓ ✓ 
  - pioasm         ✓ . . . ✓ 
  - json5          ✓ . . . ✓ 
  - hcl            ✓ . ✓ ✓ ✓ 
  - cmake          ✓ . ✓ . . 
  - toml           ✓ ✓ ✓ ✓ ✓ 
  - gowork         ✓ . . . ✓ 
  - bibtex         ✓ . ✓ ✓ . 
  - tlaplus        ✓ ✓ ✓ . ✓ 
  - dockerfile     ✓ . . . ✓ 
  - r              ✓ ✓ . ✓ . 
  - javascript     ✓ ✓ ✓ ✓ ✓ 
  - svelte         ✓ . ✓ ✓ ✓ 
  - glimmer        ✓ . . . . 
  - gdscript       ✓ ✓ . ✓ ✓ 
  - turtle         ✓ ✓ ✓ ✓ ✓ 
  - sparql         ✓ ✓ ✓ ✓ ✓ 
  - query          ✓ ✓ ✓ ✓ ✓ 
  - pug            ✓ . . . ✓ 
  - jsdoc          ✓ . . . . 
  - comment        ✓ . . . . 
  - vue            ✓ . ✓ ✓ ✓ 
  - go             ✓ ✓ ✓ ✓ ✓ 
  - clojure        ✓ ✓ ✓ . ✓ 
  - jsonc          ✓ ✓ ✓ ✓ ✓ 
  - regex          ✓ . . . . 
  - commonlisp     ✓ ✓ ✓ . . 
  - pascal         ✓ ✓ ✓ ✓ ✓ 
  - yaml           ✓ ✓ ✓ ✓ ✓ 
  - cpp            ✓ ✓ ✓ ✓ ✓ 
  - yang           ✓ . ✓ . . 
  - beancount      ✓ . ✓ . . 
  - tsx            ✓ ✓ ✓ ✓ ✓ 
  - ninja          ✓ . ✓ ✓ . 
  - latex          ✓ . ✓ . ✓ 
  - nix            ✓ ✓ ✓ . ✓ 
  - gomod          ✓ . . . ✓ 
  - graphql        ✓ . . ✓ ✓ 
  - dart           ✓ ✓ . ✓ ✓ 
  - glsl           ✓ ✓ ✓ ✓ ✓ 
  - make           ✓ . . . ✓ 
  - rst            ✓ ✓ . . ✓ 
  - zig            ✓ . ✓ ✓ ✓ 
  - cuda           ✓ ✓ ✓ ✓ ✓ 
  - ruby           ✓ ✓ ✓ ✓ ✓ 

  Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[j]ections
         +) multiple parsers found, only one will be used
         x) errors found in the query, try to run :TSUpdate {lang}

provider: health#provider#check
========================================================================
## Clipboard (optional)
  - OK: Clipboard tool found: xclip

## Python 2 provider (optional)
  - WARNING: No Python executable found that can `import neovim`. Using the first available executable for diagnostics.
  - ERROR: Python provider error:
    - ADVICE:
      - provider/pythonx: Could not load Python 2:
          python2 not found in search path or not executable.
          python2.7 not found in search path or not executable.
          python2.6 not found in search path or not executable.
          /usr/bin/python is Python 3.8 and cannot provide Python 2.
  - INFO: Executable: Not found

## Python 3 provider (optional)
  - INFO: Using: g:python3_host_prog = "/usr/bin/python"
  - INFO: Executable: /usr/bin/python
  - INFO: Python version: 3.8.10
  - INFO: pynvim version: 0.4.3
  - OK: Latest pynvim is installed.

## Python virtualenv
  - OK: no $VIRTUAL_ENV

## Ruby provider (optional)
  - INFO: Ruby: ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
  - WARNING: `neovim-ruby-host` not found.
    - ADVICE:
      - Run `gem install neovim` to ensure the neovim RubyGem is installed.
      - Run `gem environment` to ensure the gem bin directory is in $PATH.
      - If you are using rvm/rbenv/chruby, try "rehashing".
      - See :help |g:ruby_host_prog| for non-standard gem installations.

## Node.js provider (optional)
  - INFO: Node.js: 
  - WARNING: node.js on this system does not support --inspect-brk so $NVIM_NODE_HOST_DEBUG is ignored.
  - WARNING: Missing "neovim" npm (or yarn) package.
    - ADVICE:
      - Run in shell: npm install -g neovim
      - Run in shell (if you use yarn): yarn global add neovim

## Perl provider (optional)
  - ERROR: perl provider error:
    - ADVICE:
      - "Neovim::Ext" cpan module is not installed

vim.lsp: require("vim.lsp.health").check()
========================================================================
  - INFO: LSP log level : WARN
  - INFO: Log path: /home/max/.cache/nvim/lsp.log
  - INFO: Log size: 2 KB

vim.treesitter: require("vim.treesitter.health").check()
========================================================================
  - INFO: Runtime ABI version : 13
  - OK: Loaded parser for bash: ABI version 13
  - OK: Loaded parser for beancount: ABI version 13
  - OK: Loaded parser for bibtex: ABI version 13
  - OK: Loaded parser for c: ABI version 13
  - OK: Loaded parser for c_sharp: ABI version 13
  - OK: Loaded parser for clojure: ABI version 13
  - OK: Loaded parser for cmake: ABI version 13
  - OK: Loaded parser for comment: ABI version 13
  - OK: Loaded parser for commonlisp: ABI version 13
  - OK: Loaded parser for cpp: ABI version 13
  - OK: Loaded parser for css: ABI version 13
  - OK: Loaded parser for cuda: ABI version 13
  - OK: Loaded parser for dart: ABI version 13
  - OK: Loaded parser for dockerfile: ABI version 13
  - OK: Loaded parser for dot: ABI version 13
  - OK: Loaded parser for eex: ABI version 13
  - OK: Loaded parser for elixir: ABI version 13
  - OK: Loaded parser for erlang: ABI version 13
  - OK: Loaded parser for fennel: ABI version 13
  - OK: Loaded parser for fish: ABI version 13
  - OK: Loaded parser for fusion: ABI version 13
  - OK: Loaded parser for gdscript: ABI version 13
  - OK: Loaded parser for glimmer: ABI version 13
  - OK: Loaded parser for glsl: ABI version 13
  - OK: Loaded parser for go: ABI version 13
  - OK: Loaded parser for gomod: ABI version 13
  - OK: Loaded parser for gowork: ABI version 13
  - OK: Loaded parser for graphql: ABI version 13
  - OK: Loaded parser for hcl: ABI version 13
  - OK: Loaded parser for heex: ABI version 13
  - OK: Loaded parser for hjson: ABI version 13
  - OK: Loaded parser for hocon: ABI version 13
  - OK: Loaded parser for html: ABI version 13
  - OK: Loaded parser for http: ABI version 13
  - OK: Loaded parser for java: ABI version 13
  - OK: Loaded parser for javascript: ABI version 13
  - OK: Loaded parser for jsdoc: ABI version 13
  - OK: Loaded parser for json: ABI version 13
  - OK: Loaded parser for json5: ABI version 13
  - OK: Loaded parser for jsonc: ABI version 13
  - OK: Loaded parser for julia: ABI version 13
  - OK: Loaded parser for kotlin: ABI version 13
  - OK: Loaded parser for latex: ABI version 13
  - OK: Loaded parser for ledger: ABI version 13
  - OK: Loaded parser for llvm: ABI version 13
  - OK: Loaded parser for lua: ABI version 13
  - OK: Loaded parser for make: ABI version 13
  - OK: Loaded parser for ninja: ABI version 13
  - OK: Loaded parser for nix: ABI version 13
  - OK: Loaded parser for norg: ABI version 13
  - OK: Loaded parser for ocaml: ABI version 13
  - OK: Loaded parser for ocaml_interface: ABI version 13
  - OK: Loaded parser for pascal: ABI version 13
  - OK: Loaded parser for perl: ABI version 13
  - OK: Loaded parser for php: ABI version 13
  - OK: Loaded parser for pioasm: ABI version 13
  - OK: Loaded parser for prisma: ABI version 13
  - OK: Loaded parser for pug: ABI version 13
  - OK: Loaded parser for python: ABI version 13
  - OK: Loaded parser for ql: ABI version 13
  - OK: Loaded parser for query: ABI version 13
  - OK: Loaded parser for r: ABI version 13
  - OK: Loaded parser for rasi: ABI version 13
  - OK: Loaded parser for regex: ABI version 13
  - OK: Loaded parser for rst: ABI version 13
  - OK: Loaded parser for ruby: ABI version 13
  - OK: Loaded parser for rust: ABI version 13
  - OK: Loaded parser for scala: ABI version 13
  - OK: Loaded parser for scss: ABI version 13
  - OK: Loaded parser for sparql: ABI version 13
  - OK: Loaded parser for supercollider: ABI version 13
  - OK: Loaded parser for surface: ABI version 13
  - OK: Loaded parser for svelte: ABI version 13
  - OK: Loaded parser for tlaplus: ABI version 13
  - OK: Loaded parser for toml: ABI version 13
  - OK: Loaded parser for tsx: ABI version 13
  - OK: Loaded parser for turtle: ABI version 13
  - OK: Loaded parser for typescript: ABI version 13
  - OK: Loaded parser for vala: ABI version 13
  - OK: Loaded parser for vim: ABI version 13
  - OK: Loaded parser for vue: ABI version 13
  - OK: Loaded parser for yaml: ABI version 13
  - OK: Loaded parser for yang: ABI version 13
  - OK: Loaded parser for zig: ABI version 13
tree .local/share/nvim/plugged/coq_nvim | xclip

.local/share/nvim/plugged/coq_nvim
├── artifacts
│   ├── helo.yml
│   ├── lsp.json
│   └── README.md
├── autoload
│   └── coq.vim
├── ci
│   ├── __init__.py
│   ├── __main__.py
│   └── main.py
├── config
│   ├── compilation.yml
│   └── defaults.yml
├── _config.yml
├── coq
│   ├── ci
│   │   ├── Dockerfile
│   │   ├── __init__.py
│   │   ├── load.py
│   │   ├── lsp.py
│   │   ├── __main__.py
│   │   ├── main.py
│   │   ├── root
│   │   └── types.py
│   ├── client.py
│   ├── clients
│   │   ├── buffers
│   │   │   ├── __init__.py
│   │   │   └── worker.py
│   │   ├── cache
│   │   │   ├── database.py
│   │   │   ├── __init__.py
│   │   │   ├── sql
│   │   │   │   ├── create
│   │   │   │   │   ├── pragma.sql
│   │   │   │   │   └── tables.sql
│   │   │   │   ├── delete
│   │   │   │   │   └── words.sql
│   │   │   │   ├── __init__.py
│   │   │   │   ├── insert
│   │   │   │   │   └── word.sql
│   │   │   │   └── select
│   │   │   │       └── words.sql
│   │   │   └── worker.py
│   │   ├── __init__.py
│   │   ├── lsp
│   │   │   ├── __init__.py
│   │   │   └── worker.py
│   │   ├── paths
│   │   │   ├── __init__.py
│   │   │   └── worker.py
│   │   ├── snippet
│   │   │   ├── __init__.py
│   │   │   └── worker.py
│   │   ├── t9
│   │   │   ├── __init__.py
│   │   │   ├── install.py
│   │   │   ├── types.py
│   │   │   └── worker.py
│   │   ├── tags
│   │   │   ├── __init__.py
│   │   │   └── worker.py
│   │   ├── third_party
│   │   │   ├── __init__.py
│   │   │   └── worker.py
│   │   ├── tmux
│   │   │   ├── __init__.py
│   │   │   └── worker.py
│   │   └── tree_sitter
│   │       ├── __init__.py
│   │       └── worker.py
│   ├── consts.py
│   ├── databases
│   │   ├── buffers
│   │   │   ├── database.py
│   │   │   ├── __init__.py
│   │   │   └── sql
│   │   │       ├── create
│   │   │       │   ├── pragma.sql
│   │   │       │   └── tables.sql
│   │   │       ├── delete
│   │   │       │   ├── buffer.sql
│   │   │       │   └── lines.sql
│   │   │       ├── __init__.py
│   │   │       ├── insert
│   │   │       │   ├── buffer.sql
│   │   │       │   ├── line.sql
│   │   │       │   └── word.sql
│   │   │       ├── select
│   │   │       │   ├── buffer_by_id.sql
│   │   │       │   ├── buffers.sql
│   │   │       │   ├── line_count.sql
│   │   │       │   ├── lines.sql
│   │   │       │   └── words.sql
│   │   │       └── update
│   │   │           ├── buffer.sql
│   │   │           ├── lines_shift_1.sql
│   │   │           └── lines_shift_2.sql
│   │   ├── __init__.py
│   │   ├── insertions
│   │   │   ├── database.py
│   │   │   ├── __init__.py
│   │   │   └── sql
│   │   │       ├── create
│   │   │       │   ├── pragma.sql
│   │   │       │   └── tables.sql
│   │   │       ├── __init__.py
│   │   │       ├── insert
│   │   │       │   ├── batch.sql
│   │   │       │   ├── inserted.sql
│   │   │       │   ├── instance.sql
│   │   │       │   ├── instance_stat.sql
│   │   │       │   └── source.sql
│   │   │       └── select
│   │   │           ├── inserted_count.sql
│   │   │           ├── inserted.sql
│   │   │           ├── stat_inserted.sql
│   │   │           └── stats.sql
│   │   ├── snippets
│   │   │   ├── database.py
│   │   │   ├── __init__.py
│   │   │   └── sql
│   │   │       ├── create
│   │   │       │   ├── pragma.sql
│   │   │       │   └── tables.sql
│   │   │       ├── delete
│   │   │       │   └── source.sql
│   │   │       ├── __init__.py
│   │   │       ├── insert
│   │   │       │   ├── extension.sql
│   │   │       │   ├── filetype.sql
│   │   │       │   ├── match.sql
│   │   │       │   ├── snippet.sql
│   │   │       │   └── source.sql
│   │   │       └── select
│   │   │           ├── snippets.sql
│   │   │           └── sources.sql
│   │   ├── tags
│   │   │   ├── database.py
│   │   │   ├── __init__.py
│   │   │   └── sql
│   │   │       ├── create
│   │   │       │   ├── pragma.sql
│   │   │       │   └── tables.sql
│   │   │       ├── delete
│   │   │       │   └── file.sql
│   │   │       ├── __init__.py
│   │   │       ├── insert
│   │   │       │   ├── file.sql
│   │   │       │   └── tag.sql
│   │   │       └── select
│   │   │           ├── files_filetype.sql
│   │   │           ├── files.sql
│   │   │           └── tags.sql
│   │   ├── tmux
│   │   │   ├── database.py
│   │   │   ├── __init__.py
│   │   │   └── sql
│   │   │       ├── create
│   │   │       │   ├── pragma.sql
│   │   │       │   └── tables.sql
│   │   │       ├── delete
│   │   │       │   └── pane.sql
│   │   │       ├── __init__.py
│   │   │       ├── insert
│   │   │       │   ├── pane.sql
│   │   │       │   └── word.sql
│   │   │       └── select
│   │   │           ├── panes.sql
│   │   │           └── words.sql
│   │   └── treesitter
│   │       ├── database.py
│   │       ├── __init__.py
│   │       └── sql
│   │           ├── create
│   │           │   ├── pragma.sql
│   │           │   └── tables.sql
│   │           ├── delete
│   │           │   └── buffer.sql
│   │           ├── __init__.py
│   │           ├── insert
│   │           │   ├── buffer.sql
│   │           │   └── word.sql
│   │           └── select
│   │               ├── buffers.sql
│   │               └── words.sql
│   ├── __init__.py
│   ├── lang.py
│   ├── lsp
│   │   ├── __init__.py
│   │   ├── parse.py
│   │   ├── protocol.py
│   │   ├── requests
│   │   │   ├── command.py
│   │   │   ├── completion.py
│   │   │   ├── __init__.py
│   │   │   ├── lsp.lua
│   │   │   ├── request.py
│   │   │   └── resolve.py
│   │   └── types.py
│   ├── __main__.py
│   ├── paths
│   │   ├── __init__.py
│   │   └── show.py
│   ├── __pycache__
│   │   ├── consts.cpython-38.pyc
│   │   ├── __init__.cpython-38.pyc
│   │   └── __main__.cpython-38.pyc
│   ├── py.typed
│   ├── _registry.py
│   ├── registry.py
│   ├── server
│   │   ├── completion.lua
│   │   ├── completions.py
│   │   ├── context.py
│   │   ├── edit.py
│   │   ├── icons.py
│   │   ├── __init__.py
│   │   ├── mark.py
│   │   ├── registrants
│   │   │   ├── attachment.py
│   │   │   ├── autocmds.py
│   │   │   ├── help.py
│   │   │   ├── __init__.py
│   │   │   ├── marks.py
│   │   │   ├── noop.py
│   │   │   ├── omnifunc.py
│   │   │   ├── options.py
│   │   │   ├── preview.py
│   │   │   ├── repeat.py
│   │   │   ├── snippets.py
│   │   │   ├── stats.py
│   │   │   └── user_snippets.py
│   │   ├── reviewer.py
│   │   ├── rt_types.py
│   │   ├── runtime.py
│   │   ├── state.py
│   │   └── trans.py
│   ├── shared
│   │   ├── context.py
│   │   ├── executor.py
│   │   ├── fuzzy.py
│   │   ├── __init__.py
│   │   ├── lru.py
│   │   ├── parse.py
│   │   ├── repeat.py
│   │   ├── runtime.py
│   │   ├── settings.py
│   │   ├── sql.py
│   │   ├── timeit.py
│   │   ├── trans.py
│   │   └── types.py
│   ├── snippets
│   │   ├── consts.py
│   │   ├── __init__.py
│   │   ├── loaders
│   │   │   ├── __init__.py
│   │   │   ├── load.py
│   │   │   ├── lsp.py
│   │   │   ├── neosnippet.py
│   │   │   ├── parse.py
│   │   │   └── ultisnip.py
│   │   ├── parse.py
│   │   ├── parsers
│   │   │   ├── __init__.py
│   │   │   ├── lsp.py
│   │   │   ├── parser.py
│   │   │   ├── snu.py
│   │   │   └── types.py
│   │   └── types.py
│   ├── tags
│   │   ├── __init__.py
│   │   ├── parse.py
│   │   └── types.py
│   ├── tmux
│   │   ├── __init__.py
│   │   └── parse.py
│   └── treesitter
│       ├── __init__.py
│       ├── request.lua
│       ├── request.py
│       └── types.py
├── docker
│   ├── _base
│   │   └── Dockerfile
│   ├── __init__.py
│   ├── __main__.py
│   ├── packer
│   │   ├── Dockerfile
│   │   └── root
│   └── vimplug
│       ├── Dockerfile
│       └── root
├── docs
│   ├── COMPLETION.md
│   ├── CONF.md
│   ├── CUSTOM_SOURCES.md
│   ├── DISPLAY.md
│   ├── FUZZY.md
│   ├── KEYBIND.md
│   ├── MISC.md
│   ├── PERF.md
│   ├── README.md
│   ├── SNIPS.md
│   ├── SOURCES.md
│   └── STATS.md
├── ftdetect
│   └── coq-snip.vim
├── ftplugin
│   └── coq-snip.lua
├── __init__.py
├── LICENSE
├── locale
│   ├── en.yml
│   └── zh.yml
├── lua
│   └── coq.lua
├── plugin
│   └── coq.vim
├── README.md
├── requirements.txt
├── syntax
│   └── coq-snip.vim
├── tests
│   ├── clients
│   │   ├── __init__.py
│   │   └── paths
│   │       ├── __init__.py
│   │       └── worker.py
│   ├── __init__.py
│   ├── __main__.py
│   ├── server
│   │   ├── __init__.py
│   │   └── reviewer.py
│   ├── shared
│   │   ├── fuzzy.py
│   │   ├── __init__.py
│   │   └── trans.py
│   ├── snippets
│   │   ├── __init__.py
│   │   └── parse.py
│   └── tags
│       ├── __init__.py
│       └── parser.py
└── venv.bat

93 directories, 252 files
mrjohannchang commented 2 years ago

https://github.com/ms-jpq/coq_nvim/issues/337#issuecomment-970669686

vegerot commented 2 years ago

That worked! Thank you!

We should add a better error message for this