Mercurial > vim
view src/testdir/test_const.vim @ 32996:dd8da8f1c2bc v9.0.1790
patch 9.0.1790: Redundant LSP Content-Type header
Commit: https://github.com/vim/vim/commit/8fbd9449e71f2ad93e594be575209a7424eb093e
Author: Magnus Gro? <magnus@mggross.com>
Date: Sun Aug 27 00:49:51 2023 +0200
patch 9.0.1790: Redundant LSP Content-Type header
Problem: The Content-Type header is an optional header that some LSP
servers struggle with and may crash when encountering it.
Solution: Drop the Content-Type header from all messages, because we use
the default value anyway.
Because pretty much all popular LSP clients (e.g. coc.nvim, VSCode) do
not send the Content-Type header, the LSP server ecosystem has developed
such that some LSP servers may even crash when encountering it.
To improve compatibility with these misbehaving LSP servers, we drop
this header as well.
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Magnus Gro? <magnus@mggross.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 27 Aug 2023 11:15:03 +0200 |
parents | 04205b7d67d5 |
children |
line wrap: on
line source
" Test for :const func s:noop() endfunc func Test_define_var_with_lock() const i = 1 const f = 1.1 const s = 'vim' const F = funcref('s:noop') const l = [1, 2, 3] const d = {'foo': 10} if has('channel') const j = test_null_job() const c = test_null_channel() endif const b = v:true const n = v:null const bl = 0zC0FFEE const here =<< trim EOS hello EOS call assert_true(exists('i')) call assert_true(exists('f')) call assert_true(exists('s')) call assert_true(exists('F')) call assert_true(exists('l')) call assert_true(exists('d')) if has('channel') call assert_true(exists('j')) call assert_true(exists('c')) endif call assert_true(exists('b')) call assert_true(exists('n')) call assert_true(exists('bl')) call assert_true(exists('here')) call assert_fails('let i = 1', 'E741:') call assert_fails('let f = 1.1', 'E741:') call assert_fails('let s = "vim"', 'E741:') call assert_fails('let F = funcref("s:noop")', 'E741:') call assert_fails('let l = [1, 2, 3]', 'E741:') call assert_fails('call filter(l, "v:val % 2 == 0")', 'E741:') call assert_fails('let d = {"foo": 10}', 'E741:') if has('channel') call assert_fails('let j = test_null_job()', 'E741:') call assert_fails('let c = test_null_channel()', 'E741:') endif call assert_fails('let b = v:true', 'E741:') call assert_fails('let n = v:null', 'E741:') call assert_fails('let bl = 0zC0FFEE', 'E741:') call assert_fails('let here = "xxx"', 'E741:') " Unlet unlet i unlet f unlet s unlet F unlet l unlet d if has('channel') unlet j unlet c endif unlet b unlet n unlet bl unlet here endfunc func Test_define_l_var_with_lock() " With l: prefix const l:i = 1 const l:f = 1.1 const l:s = 'vim' const l:F = funcref('s:noop') const l:l = [1, 2, 3] const l:d = {'foo': 10} if has('channel') const l:j = test_null_job() const l:c = test_null_channel() endif const l:b = v:true const l:n = v:null const l:bl = 0zC0FFEE const l:here =<< trim EOS hello EOS call assert_fails('let l:i = 1', 'E741:') call assert_fails('let l:f = 1.1', 'E741:') call assert_fails('let l:s = "vim"', 'E741:') call assert_fails('let l:F = funcref("s:noop")', 'E741:') call assert_fails('let l:l = [1, 2, 3]', 'E741:') call assert_fails('let l:d = {"foo": 10}', 'E741:') if has('channel') call assert_fails('let l:j = test_null_job()', 'E741:') call assert_fails('let l:c = test_null_channel()', 'E741:') endif call assert_fails('let l:b = v:true', 'E741:') call assert_fails('let l:n = v:null', 'E741:') call assert_fails('let l:bl = 0zC0FFEE', 'E741:') call assert_fails('let l:here = "xxx"', 'E741:') " Unlet unlet l:i unlet l:f unlet l:s unlet l:F unlet l:l unlet l:d if has('channel') unlet l:j unlet l:c endif unlet l:b unlet l:n unlet l:bl unlet l:here endfunc func Test_define_script_var_with_lock() const s:x = 0 call assert_fails('let s:x = 1', 'E741:') unlet s:x endfunc func Test_destructuring_with_lock() const [a, b, c] = [1, 1.1, 'vim'] call assert_fails('let a = 1', 'E741:') call assert_fails('let b = 1.1', 'E741:') call assert_fails('let c = "vim"', 'E741:') const [d; e] = [1, 1.1, 'vim'] call assert_fails('let d = 1', 'E741:') call assert_fails('let e = [2.2, "a"]', 'E741:') endfunc func Test_cannot_modify_existing_variable() let i = 1 let f = 1.1 let s = 'vim' let F = funcref('s:noop') let l = [1, 2, 3] let d = {'foo': 10} if has('channel') let j = test_null_job() let c = test_null_channel() endif let b = v:true let n = v:null let bl = 0zC0FFEE call assert_fails('const i = 1', 'E995:') call assert_fails('const f = 1.1', 'E995:') call assert_fails('const s = "vim"', 'E995:') call assert_fails('const F = funcref("s:noop")', 'E995:') call assert_fails('const l = [1, 2, 3]', 'E995:') call assert_fails('const d = {"foo": 10}', 'E995:') if has('channel') call assert_fails('const j = test_null_job()', 'E995:') call assert_fails('const c = test_null_channel()', 'E995:') endif call assert_fails('const b = v:true', 'E995:') call assert_fails('const n = v:null', 'E995:') call assert_fails('const bl = 0zC0FFEE', 'E995:') call assert_fails('const [i, f, s] = [1, 1.1, "vim"]', 'E995:') const i2 = 1 const f2 = 1.1 const s2 = 'vim' const F2 = funcref('s:noop') const l2 = [1, 2, 3] const d2 = {'foo': 10} if has('channel') const j2 = test_null_job() const c2 = test_null_channel() endif const b2 = v:true const n2 = v:null const bl2 = 0zC0FFEE call assert_fails('const i2 = 1', 'E995:') call assert_fails('const f2 = 1.1', 'E995:') call assert_fails('const s2 = "vim"', 'E995:') call assert_fails('const F2 = funcref("s:noop")', 'E995:') call assert_fails('const l2 = [1, 2, 3]', 'E995:') call assert_fails('const d2 = {"foo": 10}', 'E995:') if has('channel') call assert_fails('const j2 = test_null_job()', 'E995:') call assert_fails('const c2 = test_null_channel()', 'E995:') endif call assert_fails('const b2 = v:true', 'E995:') call assert_fails('const n2 = v:null', 'E995:') call assert_fails('const bl2 = 0zC0FFEE', 'E995:') call assert_fails('const [i2, f2, s2] = [1, 1.1, "vim"]', 'E995:') endfunc func Test_const_with_condition() const x = 0 if 0 | const x = 1 | endif call assert_equal(0, x) endfunc func Test_lockvar() let x = 'hello' lockvar x call assert_fails('let x = "there"', 'E741:') if 0 | unlockvar x | endif call assert_fails('let x = "there"', 'E741:') unlockvar x let x = 'there' if 0 | lockvar x | endif let x = 'again' let val = [1, 2, 3] lockvar 0 val let val[0] = 9 call assert_equal([9, 2, 3], val) call add(val, 4) call assert_equal([9, 2, 3, 4], val) call assert_fails('let val = [4, 5, 6]', 'E1122:') let l =<< trim END let d = {} lockvar d func d.fn() return 1 endfunc END let @a = l->join("\n") call assert_fails('exe @a', 'E741:') let l =<< trim END let d = {} let d.fn = function("min") lockvar d.fn func! d.fn() return 1 endfunc END let @a = l->join("\n") call assert_fails('exe @a', 'E741:') endfunc func Test_const_with_index_access() let l = [1, 2, 3] call assert_fails('const l[0] = 4', 'E996:') call assert_fails('const l[0:1] = [1, 2]', 'E996:') let d = {'aaa': 0} call assert_fails("const d['aaa'] = 4", 'E996:') call assert_fails("const d.aaa = 4", 'E996:') endfunc func Test_const_with_compound_assign() let i = 0 call assert_fails('const i += 4', 'E995:') call assert_fails('const i -= 4', 'E995:') call assert_fails('const i *= 4', 'E995:') call assert_fails('const i /= 4', 'E995:') call assert_fails('const i %= 4', 'E995:') let s = 'a' call assert_fails('const s .= "b"', 'E995:') let [a, b, c] = [1, 2, 3] call assert_fails('const [a, b, c] += [4, 5, 6]', 'E995:') let [d; e] = [1, 2, 3] call assert_fails('const [d; e] += [4, 5, 6]', 'E995:') endfunc func Test_const_with_special_variables() call assert_fails('const $FOO = "hello"', 'E996:') call assert_fails('const @a = "hello"', 'E996:') call assert_fails('const &filetype = "vim"', 'E996:') call assert_fails('const &l:filetype = "vim"', 'E996:') call assert_fails('const &g:encoding = "utf-8"', 'E996:') call assert_fails('const [a, $CONST_FOO] = [369, "abc"]', 'E996:') call assert_equal(369, a) call assert_equal(v:null, getenv("CONST_FOO")) call assert_fails('const [b; $CONST_FOO] = [246, 2, "abc"]', 'E996:') call assert_equal(246, b) call assert_equal(v:null, getenv("CONST_FOO")) endfunc func Test_const_with_eval_name() let s = 'foo' " eval name with :const should work const abc_{s} = 1 const {s}{s} = 1 let s2 = 'abc_foo' call assert_fails('const {s2} = "bar"', 'E995:') endfunc func Test_lock_depth_is_2() " Modify list - error when changing item or adding/removing items const l = [1, 2, [3, 4]] call assert_fails('let l[0] = 42', 'E741:') call assert_fails('let l[2][0] = 42', 'E741:') call assert_fails('call add(l, 4)', 'E741:') call assert_fails('unlet l[1]', 'E741:') " Modify blob - error when changing const b = 0z001122 call assert_fails('let b[0] = 42', 'E741:') " Modify dict - error when changing item or adding/removing items const d = {'foo': 10} call assert_fails("let d['foo'] = 'hello'", 'E741:') call assert_fails("let d.foo = 'hello'", 'E741:') call assert_fails("let d['bar'] = 'hello'", 'E741:') call assert_fails("unlet d['foo']", 'E741:') " Modifying list or dict item contents is OK. let lvar = ['a', 'b'] let bvar = 0z1122 const l2 = [0, lvar, bvar] let l2[1][0] = 'c' let l2[2][1] = 0x33 call assert_equal([0, ['c', 'b'], 0z1133], l2) const d2 = #{a: 0, b: lvar, c: 4} let d2.b[1] = 'd' endfunc " vim: shiftwidth=2 sts=2 expandtab