mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			153 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local helpers = require('test.functional.helpers')(after_each)
 | |
| local snippet = require('vim.lsp._snippet')
 | |
| 
 | |
| local eq = helpers.eq
 | |
| local exec_lua = helpers.exec_lua
 | |
| 
 | |
| describe('vim.lsp._snippet', function()
 | |
|   before_each(helpers.clear)
 | |
|   after_each(helpers.clear)
 | |
| 
 | |
|   local parse = function(...)
 | |
|     return exec_lua('return require("vim.lsp._snippet").parse(...)', ...)
 | |
|   end
 | |
| 
 | |
|   it('should parse only text', function()
 | |
|     eq({
 | |
|       type = snippet.NodeType.SNIPPET,
 | |
|       children = {
 | |
|         {
 | |
|           type = snippet.NodeType.TEXT,
 | |
|           raw = 'TE\\$\\}XT',
 | |
|           esc = 'TE$}XT'
 | |
|         }
 | |
|       }
 | |
|     }, parse('TE\\$\\}XT'))
 | |
|   end)
 | |
| 
 | |
|   it('should parse tabstop', function()
 | |
|     eq({
 | |
|       type = snippet.NodeType.SNIPPET,
 | |
|       children = {
 | |
|         {
 | |
|           type = snippet.NodeType.TABSTOP,
 | |
|           tabstop = 1,
 | |
|         },
 | |
|         {
 | |
|           type = snippet.NodeType.TABSTOP,
 | |
|           tabstop = 2,
 | |
|         }
 | |
|       }
 | |
|     }, parse('$1${2}'))
 | |
|   end)
 | |
| 
 | |
|   it('should parse placeholders', function()
 | |
|     eq({
 | |
|       type = snippet.NodeType.SNIPPET,
 | |
|       children = {
 | |
|         {
 | |
|           type = snippet.NodeType.PLACEHOLDER,
 | |
|           tabstop = 1,
 | |
|           children = {
 | |
|             {
 | |
|               type = snippet.NodeType.PLACEHOLDER,
 | |
|               tabstop = 2,
 | |
|               children = {
 | |
|                 {
 | |
|                   type = snippet.NodeType.TEXT,
 | |
|                   raw = 'TE\\$\\}XT',
 | |
|                   esc = 'TE$}XT'
 | |
|                 },
 | |
|                 {
 | |
|                   type = snippet.NodeType.TABSTOP,
 | |
|                   tabstop = 3,
 | |
|                 },
 | |
|                 {
 | |
|                   type = snippet.NodeType.TABSTOP,
 | |
|                   tabstop = 1,
 | |
|                   transform = {
 | |
|                     type = snippet.NodeType.TRANSFORM,
 | |
|                     pattern = 'regex',
 | |
|                     option = 'i',
 | |
|                     format = {
 | |
|                       {
 | |
|                         type = snippet.NodeType.FORMAT,
 | |
|                         capture_index = 1,
 | |
|                         modifier = 'upcase'
 | |
|                       }
 | |
|                     }
 | |
|                   },
 | |
|                 },
 | |
|                 {
 | |
|                   type = snippet.NodeType.TEXT,
 | |
|                   raw = 'TE\\$\\}XT',
 | |
|                   esc = 'TE$}XT'
 | |
|                 },
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         },
 | |
|       }
 | |
|     }, parse('${1:${2:TE\\$\\}XT$3${1/regex/${1:/upcase}/i}TE\\$\\}XT}}'))
 | |
|   end)
 | |
| 
 | |
|   it('should parse variables', function()
 | |
|     eq({
 | |
|       type = snippet.NodeType.SNIPPET,
 | |
|       children = {
 | |
|         {
 | |
|           type = snippet.NodeType.VARIABLE,
 | |
|           name = 'VAR',
 | |
|         },
 | |
|         {
 | |
|           type = snippet.NodeType.VARIABLE,
 | |
|           name = 'VAR',
 | |
|         },
 | |
|         {
 | |
|           type = snippet.NodeType.VARIABLE,
 | |
|           name = 'VAR',
 | |
|           children = {
 | |
|             {
 | |
|               type = snippet.NodeType.TABSTOP,
 | |
|               tabstop = 1,
 | |
|             }
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           type = snippet.NodeType.VARIABLE,
 | |
|           name = 'VAR',
 | |
|           transform = {
 | |
|             type = snippet.NodeType.TRANSFORM,
 | |
|             pattern = 'regex',
 | |
|             format = {
 | |
|               {
 | |
|                 type = snippet.NodeType.FORMAT,
 | |
|                 capture_index = 1,
 | |
|                 modifier = 'upcase',
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         },
 | |
|       }
 | |
|     }, parse('$VAR${VAR}${VAR:$1}${VAR/regex/${1:/upcase}/}'))
 | |
|   end)
 | |
| 
 | |
|   it('should parse choice', function()
 | |
|     eq({
 | |
|       type = snippet.NodeType.SNIPPET,
 | |
|       children = {
 | |
|         {
 | |
|           type = snippet.NodeType.CHOICE,
 | |
|           tabstop = 1,
 | |
|           items = {
 | |
|             ',',
 | |
|             '|'
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }, parse('${1|\\,,\\||}'))
 | |
|   end)
 | |
| 
 | |
| end)
 | |
| 
 | 
