Giter Site home page Giter Site logo

cmp-nvim-ultisnips's People

Contributors

anstadnik avatar mathjiajia avatar pianohacker avatar quangbanhatnguyen avatar quangnguyen30192 avatar schilkp avatar smjonas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

cmp-nvim-ultisnips's Issues

Mirrored tabstops don't work

Once the completion menu appears when they're being filled, they just stop working.

I've tested by disabling nvim-cmp and using and that works which means the issue is specific to nvim-cmp.

Add support for LSP snippets

Some LSPs can create snippets for functions, methods etc.
One of such LSP is ccls. For example, when I enter the following cpp code:

#include <iostream>

void int_and_char(int i, char c) {
  std::cout << i << c << std::endl;
}

int main(void)
{
  int_and_char
  return 0;
}

, and I put the cursor at the end of the first line in the main function, the LSP would suggest me a snippet for function int_and_char, but it is not being expanded.

bad argument #1 to 'pairs' (table expected, got nil) in source.lua:29

After updating to nvim-0.10 I get the following error on every first edit of a file:

E5108: Error executing lua ...azy/cmp-nvim-ultisnips/lua/cmp_nvim_ultisnips/source.lua:29: bad argument #1 to 'pairs' (table expected, got nil)
stack traceback:
        [C]: in function 'pairs'
        ...azy/cmp-nvim-ultisnips/lua/cmp_nvim_ultisnips/source.lua:29: in function 'complete'
        ...fidel/.local/share/nvim/lazy/nvim-cmp/lua/cmp/source.lua:326: in function 'complete'
        ...e/fidel/.local/share/nvim/lazy/nvim-cmp/lua/cmp/core.lua:299: in function 'complete'
        ...e/fidel/.local/share/nvim/lazy/nvim-cmp/lua/cmp/core.lua:169: in function 'autoindent'
        ...e/fidel/.local/share/nvim/lazy/nvim-cmp/lua/cmp/core.lua:161: in function 'on_change'
        ...e/fidel/.local/share/nvim/lazy/nvim-cmp/lua/cmp/init.lua:331: in function <...e/fidel/.local/share/nvim/lazy/nvim-cmp/lua/cmp/init.lua:326>
        ...ocal/share/nvim/lazy/nvim-cmp/lua/cmp/utils/feedkeys.lua:47: in function 'run'
        [string ":lua"]:1: in main chunk

A simple check for nil of snippets and corresponding conditional execution of the for loop would make the error go away. I don't know whether this is a good idea though, since I don't know about other consequences or whether the problem should be treated beforehand. I also don't know why this suddenly pops up or whether the problem lies within Ultisnips itself.

Update support for new lua parser in treesitter

It appears that cmp-nvim-ultisnips is running into the same issue described in nvim-treesitter/nvim-treesitter#2295. As described in that issue, updates to the nvim-treesitter lua parser (nvim-treesitter/nvim-treesitter#2272) requires updates to third-party modules. Here's the error output I see when editing a lua file:

Error detected while processing TextChangedI Autocommands for "*":
E5108: Error executing lua .../Contents/Resources/runtime/lua/vim/treesitter/query.lua:161: query: invalid field at position 18
stack traceback:
	[C]: in function '_ts_parse_query'
	.../Contents/Resources/runtime/lua/vim/treesitter/query.lua:161: in function 'get_query'
	...ts/Resources/runtime/lua/vim/treesitter/languagetree.lua:37: in function 'new'
	...bundle/Contents/Resources/runtime/lua/vim/treesitter.lua:45: in function '_create_parser'
	...bundle/Contents/Resources/runtime/lua/vim/treesitter.lua:93: in function 'get_parser'
	...plugged/nvim-treesitter/lua/nvim-treesitter/ts_utils.lua:133: in function 'get_node_at_cursor'
	...cmp-nvim-ultisnips/lua/cmp_nvim_ultisnips/treesitter.lua:20: in function 'get_ft_at_cursor'
	...cmp-nvim-ultisnips/lua/cmp_nvim_ultisnips/treesitter.lua:35: in function 'set_filetype'
	[string ":lua"]:1: in main chunk

Uninstalling cmp-nvim-ultisnips resolves the issue on my system.

Failed to load parser: uv_dlsym: dlsym(0x208d77c60, tree_sitter_Dockerfile): symbol not found

Environment: macOS 12.x (arm64), neovim 0.8.0-nightly (+0.7.2)

Error detected while processing TextChangedI Autocommands for "*":                                                     
E5108: Error executing lua Failed to load parser: uv_dlsym: dlsym(0x208d77c60, tree_sitter_Dockerfile): symbol not found
stack traceback:
        [C]: in function '_ts_add_language'
        ...eab_1/share/nvim/runtime/lua/vim/treesitter/language.lua:36: in function 'require_language'
        ...HEAD-89b9eab_1/share/nvim/runtime/lua/vim/treesitter.lua:38: in function '_create_parser'
        ...HEAD-89b9eab_1/share/nvim/runtime/lua/vim/treesitter.lua:96: in function 'get_parser'
        ...plugged/nvim-treesitter/lua/nvim-treesitter/ts_utils.lua:163: in function 'get_node_at_cursor'
        ...cmp-nvim-ultisnips/lua/cmp_nvim_ultisnips/treesitter.lua:20: in function 'get_ft_at_cursor'
        ...cmp-nvim-ultisnips/lua/cmp_nvim_ultisnips/treesitter.lua:35: in function 'set_filetype'
        [string ":lua"]:1: in main chunk

This happens when

  • Open any Dockerfile
  • Start typing in the insert mode (e.g., TextChangedI)

I have treesitter-dockerfile installed (:TSInstall dockerfile).

jump to next tabstop without filling current one

I cant jump to next tabstop, unless I will fill the current one. For example for this snippet:

snippet integer "IntProperty"
$1: bpy.props.IntProperty(name="test", description='', default=${2: 1}, min=0, max=100, subtype='PERCENTAGE')$0

If I want to leave default value at $2, I press < tab > but it wont jump forward to $0 (only using ultiSnip build-in map < c-j > work for jump) . If I enter anything at $2, then I can < tab > jump forward no problem. It feels almost like I can jump only from insert mode (and select mode jump wont work)

My mappings:

	mapping = {
		['<C-p>'] = cmp.mapping.select_prev_item(),
		['<C-n>'] = cmp.mapping.select_next_item(),
		['<S-Tab>'] = cmp.mapping(function(fallback)
			if vim.fn["UltiSnips#CanJumpBackwards"]() == 1 then
				vim.fn.feedkeys(t("<C-R>=UltiSnips#JumpBackwards()<CR>"))
			elseif vim.fn.pumvisible() == 1 then
				vim.fn.feedkeys(t("<C-p>"), "n")
			elseif check_back_space() then
				vim.fn.feedkeys(t("<S-tab>"), "n")
			else
				vim.fn.feedkeys(t("<S-tab>"), "n")
			end
		end, { "i", "s"}),
		['<Tab>'] = cmp.mapping(function(fallback)
			-- print('can jump ='..vim.inspect(vim.fn["UltiSnips#CanJumpForwards"]()))
			if vim.fn["UltiSnips#CanJumpForwards"]() == 1 then
				vim.fn.feedkeys(t("<C-R>=UltiSnips#JumpForwards()<CR>"))
			elseif vim.fn.pumvisible() == 1 then
				vim.fn.feedkeys(t("<C-n>"), "n")
			elseif check_back_space() then
				vim.fn.feedkeys(t("<tab>"), "n")
			else
				vim.fn.feedkeys(t("<tab>"), "n")
			end
		end, { "i", "s"}),
		['<C-d>'] = cmp.mapping.scroll_docs(-4),
		['<C-f>'] = cmp.mapping.scroll_docs(4),
		['<C-e>'] = cmp.mapping.close(),
		['<CR>'] = cmp.mapping.confirm({ -- remapped at bottom by autopairs
			behavior = cmp.ConfirmBehavior.Replace,
			select = false,
		}),
		-- ['<C-Space>'] = cmp.mapping.complete(),
		['<C-Space>'] = cmp.mapping(function(fallback)
			-- print(vim.inspect(vim.fn.complete_info()))
			if vim.fn.pumvisible() == 1 then
				if vim.fn.complete_info()["selected"] ~= -1 then
					if vim.fn["UltiSnips#CanExpandSnippet"]() == 1 then
						return vim.fn.feedkeys(t("<C-R>=UltiSnips#ExpandSnippet()<CR>"))
					else
						vim.fn.feedkeys(t("<cr>"), "n")
          end
				else
					vim.fn.feedkeys(t("<C-e>"), "n")
				end
			elseif check_back_space() then
				vim.fn.feedkeys(t("<cr>"), "n")
			else
				fallback()
			end
		end, { "i", "s", }),
	},

I tried to create separate mapping

snoremap <tab> "<C-R>=UltiSnips#JumpForwards()<CR>"

but then using tab on $2 will create double-quote character for no reason (not sure why). I also tried remapping g:UltiSnipsJumpForwardTrigger to tab in ultisnips config, but then in conflicts with tab in cmp. Any ideas what is going on? WHy:
if vim.fn["UltiSnips#CanJumpForwards"]() == 1 then vim.fn.feedkeys(t("<C-R>=UltiSnips#JumpForwards()<CR>"))
wont jump to next tab if I wont fill in $2 ?

Could UltiSnips functions be called silently?

Hey, everything works great except the only thing I noticed is that :call UltiSnips#JumpForwards() is output in the command line every time I press Tab to go to the next tabstop. Same for other function calls. Could this be made silent?

I tried several things in the mapping like adding <silent> etc. but couldn't get it to work.

Many auto-snippets can not be trigger

snippet '(red|blue|gray|green)tt' "redtt \color{color}{text}" rA
\\color{`!p snip.rv = match.group(1)`}{${1:${VISUAL}}}
endsnippet

I find this snippet and many other auto-triggered snippet just occasionally work.

On my machine, if I press redttredtt, only the first one will trigger the snippet.

Can you guys test on this case?

E5108: Error executing lua Vim:E117: Unknown function: `UltiSnips#CanJumpForwards`, `UltiSnips#CanJumpBackwards`, and `UltiSnips#CanExpand`

Here's my current config:

local cmp = require("cmp")
local cmp_ultisnips_mappings = require("cmp_nvim_ultisnips.mappings")
local neogen_ok, neogen = pcall(require, "neogen")

local icons = require("lazyvim.config.global").icons
local kind_icons = icons.kind
local duplicates = {
  buffer = 1,
  path = 1,
  nvim_lsp = 0,
}

local source_names = {
  nvim_lsp = "(LSP)",
  ultisnips = "(Snippets)",
  calc = "(Calc)",
  path = "(Path)",
  buffer = "(Buffer)",
  emoji = "(Emoji)",
  nvim_lua = "(Lua)",
}

local cmp_sources = {
  { name = "nvim_lsp" },
  { name = "ultisnips" },
  { name = "calc" },
  { name = "path" },
  { name = "buffer" },
  { name = "emoji" },
  { name = "nvim_lua" },
}

cmp.setup({
  snippet = {
    expand = function(args)
      vim.fn["UltiSnips#Anon"](args.body)
    end,
  },

  mapping = cmp.mapping.preset.insert({
    ["<CR>"] = cmp.mapping({
      i = function(fallback)
        cmp_ultisnips_mappings.compose { "expand" } (fallback)
      end,
    }),

    ["<C-j>"] = cmp.mapping({
      i = function(fallback)
        cmp_ultisnips_mappings.compose { "jump_forwards" } (function()
          if neogen_ok and neogen.jumpable() then
            neogen.jump_next()
          else
            fallback()
          end
        end)
      end,
    }),

    ["<C-k>"] = cmp.mapping({
      i = function(fallback)
        cmp_ultisnips_mappings.compose { "jump_forwards" } (function()
          if neogen_ok and neogen.jumpable(true) then
            neogen.jump_prev()
          else
            fallback()
          end
        end)
      end,
    }),
  }),

  formatting = {
    fields = { "kind", "abbr", "menu" },

    format = function(entry, vim_item)
      local max_width = 50
      if max_width ~= 0 and #vim_item.abbr > max_width then
        vim_item.abbr = string.sub(vim_item.abbr, 1, max_width - 1) .. icons.ui.Ellipsis
      end

      vim_item.menu = ({
        omni = (vim.inspect(vim_item.menu):gsub('%"', "")),
        buffer = "[Buffer]",
      })[entry.source.name]
      vim_item.kind = kind_icons[vim_item.kind]
      vim_item.menu = source_names[entry.source.name]
      vim_item.dup = duplicates[entry.source.name]
      return vim_item
    end,
  },
  sources = cmp_sources,
})

Here's the error:

2023-01-09_09-53-59.mp4

As you can see in the video, when I type Ctrl+{j,k} and Enter, I get those errors.

Wrong context matching

Minimum init.lua
---------------------------------------------------------------------------------
--                                   Packer                                    --
---------------------------------------------------------------------------------

local install_path = vim.fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim'
if vim.fn.empty(vim.fn.glob(install_path)) > 0 then
vim.fn.termopen(('git clone --depth 1 https://github.com/wbthomason/packer.nvim %q'):format(install_path))
end

require('packer').startup({ function(use)
use 'wbthomason/packer.nvim'
use 'nvim-treesitter/nvim-treesitter'
use { 'hrsh7th/nvim-cmp', requires = { 'quangnguyen30192/cmp-nvim-ultisnips' } }
use 'SirVer/ultisnips'
use { 'https://gitlab.com/astadnik/snippets.git', rtp = '.' }
end
})

---------------------------------------------------------------------------------
--                                 TreeSitter                                  --
---------------------------------------------------------------------------------

require 'nvim-treesitter.configs'.setup {
ensure_installed = "latex"
}

---------------------------------------------------------------------------------
--                                   Options                                   --
---------------------------------------------------------------------------------

vim.g.UltiSnipsExpandTrigger = '<Plug>(ultisnips_expand)'
vim.g.UltiSnipsJumpForwardTrigger = '<Plug>(ultisnips_jump_forward)'
vim.g.UltiSnipsJumpBackwardTrigger = '<Plug>(ultisnips_jump_backward)'
vim.g.UltiSnipsListSnippets = '<c-x><c-s>'

vim.g.tex_flavor = 'latex'

---------------------------------------------------------------------------------
--                                Context stuff                                --
---------------------------------------------------------------------------------

local ts = require 'vim.treesitter'

local MATH_NODES = {
displayed_equation = true,
inline_formula = true,
math_environment = true,
}

local function get_node_at_cursor()
local buf = vim.api.nvim_get_current_buf()
local row, col = unpack(vim.api.nvim_win_get_cursor(0))
row = row - 1
col = col - 1

local parser = ts.get_parser(buf, 'latex')
if not parser then
  return
end
local root_tree = parser:parse()[1]
local root = root_tree and root_tree:root()

if not root then
  return
end

return root:named_descendant_for_range(row, col, row, col)
end

function In_mathzone()
local node = get_node_at_cursor()
print("HELLO")
while node do
  if node:type() == 'text_mode' then
    return false
  elseif MATH_NODES[node:type()] then
    return true
  end
  node = node:parent()
end
return false
end

---------------------------------------------------------------------------------
--                                     CMP                                     --
---------------------------------------------------------------------------------

local cmp = require('cmp')
-- local luasnip = require("luasnip")
require("cmp_nvim_ultisnips").setup {}
local cmp_ultisnips_mappings = require("cmp_nvim_ultisnips.mappings")

local function t(keys)
vim.api.nvim_feedkeys(
  vim.api.nvim_replace_termcodes(keys, true, true, true), "m", true)
end

cmp.setup {
snippet = {
  expand = function(args)
    vim.fn["UltiSnips#Anon"](args.body)
  end
},
mapping = {
  ['<C-d>'] = cmp.mapping.scroll_docs(4),
  ['<C-f>'] = cmp.mapping.scroll_docs(-4),
  ['<C-Space>'] = cmp.mapping.complete(),
  ["<C-j>"] = cmp.mapping(
    {
      i = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true }),
      c = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true }),
      x = function() t("<Plug>(ultisnips_expand)") end,
    }
  ),
  ['<C-p>'] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }),
  ['<C-n>'] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }),
  ["<C-l>"] = cmp.mapping(function(fallback)
    if vim.fn["UltiSnips#CanJumpForwards"]() == 1 then
      t('<Plug>(ultisnips_jump_forward)')
    else
      fallback()
    end
  end, { "i", "s" }),
  ["<C-h>"] = cmp.mapping(function(fallback)
    if vim.fn["UltiSnips#CanJumpBackwards"]() == 1 then
      t('<Plug>(ultisnips_jump_backward)')
    else
      fallback()
    end
  end, { "i", "s" }),
},
sources = cmp.config.sources({ { name = 'ultisnips' } }),
-- preselect = cmp.PreselectMode.None,
}
Example file
\documentclass{scrartcl}
\usepackage{mathtools}

\begin{document}

% \(<cursor_here>\)
\(\)

\end{document}

When I put the cursor between \(\), and write mrm, there is no completion suggestion.
If I write mrm (with space before), there is.

Hovewer, if in the snippet file I set the options to iA instead of i (to expand automatically), the snippet is expanded, which IMO indicates that cmp-nvim-ultisnips passes whether to show snippet or not to the cmp wrongly.

Two questions?

  1. I am not seeing ultisnips snippets in the completion menu even though I added it to sources. Any idea why?

  2. How do you prevent a message from being displayed every time ultisnip fires?

No snippets in completion list?

Hi all,

I'm migrating from my old vim+Ultisnips+supertab to the newer neovim+Ultisnips+nvim-cmp config. I've spent hours and still can't get snippets to work. Please help!

Expected behavior:

Open a .py file, type some keyword, e.g. class, then a completion list would appear listing a class snippet entry.

Actual behavior:

The completion list shows only these:

class   Keyword
class   Keyword
class   Keyword
classmethod   Class
classmethod   Class
classmethod   Class

(Why the same thing repeats 3 times, btw?)

My specs:

nvim --version:

NVIM v0.6.1
Build type: Release
LuaJIT 2.0.5
Compiled by builduser

Features: +acl +iconv +tui
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/usr/share/nvim"

Run :checkhealth for more info

How to reproduce

Below is my init.vim:

"--------------------- vim-plug --------------------- {{{
call plug#begin(stdpath('config') . '/plugged')

" LSP {
Plug 'neovim/nvim-lspconfig'
Plug 'williamboman/nvim-lsp-installer'
" LSP }

" treesitter
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}

" nvim-cmp {
Plug 'hrsh7th/cmp-nvim-lsp'
Plug 'hrsh7th/cmp-buffer'
Plug 'hrsh7th/cmp-path'
Plug 'hrsh7th/cmp-cmdline'
Plug 'hrsh7th/nvim-cmp'
" nvim-cmp }

" snippet engine
Plug 'SirVer/ultisnips'
" default snippets
"Plug 'honza/vim-snippets'
Plug 'quangnguyen30192/cmp-nvim-ultisnips'

call plug#end()
call plug#helptags()

"--------------------- vim-plug --------------------- }}}

"--------------------- LSP --------------------- {{{
lua <<EOF
local lsp_installer = require("nvim-lsp-installer")
lsp_installer.on_server_ready(function(server)
    local opts = {}
    server:setup(opts)
end)

local nvim_lsp = require('lspconfig')

local on_attach = function(client, bufnr)
  require('completion').on_attach()
  local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end
  local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end
  buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')

  -- Mappings
  local opts = { noremap=true, silent=true }
  buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts)
  buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
  buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts)
end

  local servers = {'pyright'}
  for _, lsp in ipairs(servers) do
    nvim_lsp[lsp].setup {
      on_attach = on_attach,
    }
  end
EOF
"--------------------- LSP --------------------- }}}

"--------------------- nvim-cmp ---------------------- {{{
lua <<EOF
  local cmp = require'cmp'
  local ultisnips_mappings = require("cmp_nvim_ultisnips.mappings")

  cmp.setup({
    snippet = {
      expand = function(args)
        vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users.
      end,
    },
    mapping = {
      ["<Tab>"] = cmp.mapping(function(fallback)
        ultisnips_mappings.expand_or_jump_forwards(fallback)
        end),

      ["<S-Tab>"] = function(fallback)
          if cmp.visible() then
              cmp.select_prev_item()
          else
              fallback()
          end
        end,
    },

    sources = cmp.config.sources({
      { name = 'ultisnips' }, -- For ultisnips users.
      { name = 'nvim_lsp' },
      { name = 'buffer' },
    })
  })

  -- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore).
  cmp.setup.cmdline('/', {
    sources = {
      { name = 'buffer' }
    }
  })

  -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
  cmp.setup.cmdline(':', {
    sources = cmp.config.sources({
      { name = 'path' }
    }, {
      { name = 'cmdline' }
    })
  })


  -- Setup lspconfig.
  local capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities())
  -- Replace <YOUR_LSP_SERVER> with each lsp server you've enabled.
  require('lspconfig')['pyright'].setup {
    capabilities = capabilities
  }
EOF

"--------------------- nvim-cmp ---------------------- }}}

"------------------- UltiSnips ------------------- {{{
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-j>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"
let g:UltiSnipsListSnippets="<leader>l"
let g:ultisnips_python_style="google"
"------------------- UltiSnips ------------------- }}}

"----------------------Others---------------------- {{{
set number
set autoindent
set hls
set autochdir
set ic!
set termguicolors
set splitbelow splitright
set wildmode=longest,list,full
syntax on
filetype plugin indent on
filetype plugin on
set tabstop=4 softtabstop=4 expandtab shiftwidth=4
set mouse=a
set completeopt=menu,noinsert,menuone,noselect
set wildmenu
set t_Co=256
"----------------------Others---------------------- }}}

Insert mode is slow and laggy with this source enabled

Hello! Firstly, thanks a ton for this awesome plugin. I use it every day to earn a living.

I'm having an issue very similar to this one in the main cmp repo: hrsh7th/nvim-cmp#1608
Basically, when this plugin is enabled, typing in insert mode becomes slow and laggy. It's most noticeable with typescript files in big projects (Slow language server), but I can see a difference with simple rust files as well.

Asciinema recording: (Note the jumpiness when holding the 'a' key) - asciicast

My neovim config
My cmp config specifically

Please let me know if I can do any more troubleshooting! Thanks.

Error detected while processing TextChangedI Autocommands for "*":

When I open a latex file and start typing, I get the following issue:

Error detected while processing TextChangedI Autocommands for "*":                                                                                   
Error executing lua callback: Vim(return):Error invoking 'python_execute' on channel 5 (python3-script-host):                                        
Traceback (most recent call last):                                                                                                                   
  File "<string>", line 19, in <module>                                                                                                              
TypeError: SnippetDefinition._context_match() takes 2 positional arguments but 3 were given                                                          
stack traceback:                                                                                                                                     
        [C]: in function 'load_snippets'                                                                                                             
        ...azy/cmp-nvim-ultisnips/lua/cmp_nvim_ultisnips/source.lua:27: in function 'complete'                                                       
        ...laris/.local/share/nvim/lazy/nvim-cmp/lua/cmp/source.lua:296: in function 'complete'                                                      
        ...gularis/.local/share/nvim/lazy/nvim-cmp/lua/cmp/core.lua:286: in function 'complete'                                                      
        ...gularis/.local/share/nvim/lazy/nvim-cmp/lua/cmp/core.lua:168: in function 'callback'                                                      
        ...gularis/.local/share/nvim/lazy/nvim-cmp/lua/cmp/core.lua:218: in function 'autoindent'                                                    
        ...gularis/.local/share/nvim/lazy/nvim-cmp/lua/cmp/core.lua:160: in function 'on_change'                                                     
        ...gularis/.local/share/nvim/lazy/nvim-cmp/lua/cmp/init.lua:301: in function 'callback'                                                      
        ...local/share/nvim/lazy/nvim-cmp/lua/cmp/utils/autocmd.lua:49: in function 'emit'                                                           
        ...local/share/nvim/lazy/nvim-cmp/lua/cmp/utils/autocmd.lua:23: in function <...local/share/nvim/lazy/nvim-cmp/lua/cmp/utils/autocmd.lua:22>

I've got vimtex installed, and when I disable vimtex, this error goes away. Could you look more into this to see if you can fix it because I would like to have both plugins without one causing an error to the other.

Mapping causes error on system paste

Using the recommended tab mappings causes the below error if you open a file, enter insert mode, and paste text from the system clipboard (cmd v on mac). This does not occur if the tab mappings are not present in the cmp config. The error also doesn't occur if before pasting you type text that causes the cmp completion window to appear and then paste after it has appeared once.

        ["<Tab>"] = cmp.mapping(function(fallback)
            cmp_ultisnips_mappings.expand_or_jump_forwards(fallback)
        end, {
            "i",
            "s",
            "c",
        }),
        ["<S-Tab>"] = cmp.mapping(function(fallback)
            cmp_ultisnips_mappings.jump_backwards(fallback)
        end, {
            "i",
            "s",
            "c",
        }),
Error detected while processing TextChangedI Autocommands for "*":
E5108: Error executing lua Vim(return):Error invoking 'python_execute' on channel 3 (python3-script-host
):
Traceback (most recent call last):
  File "<string>", line 7, in <module>
NameError: name 'UltiSnips_Manager' is not defined
stack traceback:
        [C]: in function 'load_snippets'
        ...art/cmp-nvim-ultisnips/lua/cmp_nvim_ultisnips/source.lua:22: in function 'complete'
        .../nvim/site/pack/packer/start/nvim-cmp/lua/cmp/source.lua:290: in function 'complete'
        ...re/nvim/site/pack/packer/start/nvim-cmp/lua/cmp/core.lua:255: in function 'complete'
        ...re/nvim/site/pack/packer/start/nvim-cmp/lua/cmp/core.lua:166: in function 'callback'
        ...re/nvim/site/pack/packer/start/nvim-cmp/lua/cmp/core.lua:216: in function 'autoindent'
        ...re/nvim/site/pack/packer/start/nvim-cmp/lua/cmp/core.lua:158: in function 'on_change'
        ...re/nvim/site/pack/packer/start/nvim-cmp/lua/cmp/init.lua:301: in function 'callback'
        ...ite/pack/packer/start/nvim-cmp/lua/cmp/utils/autocmd.lua:31: in function 'emit'
        [string ":lua"]:1: in main chunk

Strange error when trying to load ultisnips

I have a new install of nvim + all my plugins (from a previous working setup), and any time I type in insert mode I see the following error. Not sure how to further debug it. Any ideas?

Screenshot 2022-02-19 183146

Taking into account the user's current text, for auto completion

Over at nvim-cmp, I filed an issue while trying snippet autocompletion out - hrsh7th/nvim-cmp#451

The issue is that auto-completion results showed all snippets, regardless of what was currently typed. I made a fork which implements that check, over here: https://github.com/ColinKennedy/cmp-nvim-ultisnips/tree/add_snippet_recognition

I haven't done performance metrics to see if there's a big hit but I haven't noticed any slow down with completion results. Would you be interested in adding this in a PR?

Cannot jump forward

Hi! I use an example from the README.md.
Everything works, except jumping to the next placeholder:

vim.fn.feedkeys(t("<ESC>:call UltiSnips#JumpForwards()<CR>"))

I've checked that this line is indeed being called. Also I've checked that if I do the same manually (press esc etc), I successfully jump to the next placeholder.
Also I've printed the value returned by

local t = function(str)
    print(vim.api.nvim_replace_termcodes(str, true, true, true))
    return vim.api.nvim_replace_termcodes(str, true, true, true)
end

It shows me ^[:call UltiSnips#JumpForwards()^M, as expected.

Instead when the line is getting executed, I just get back to the normal mode. The cursor is at the end of the placeholder.
I've spent a considerable amount of time, and have no idea how to narrow down the possible reason of the issue.

I've tried to disable UltiSnips mappings:

vim.g.UltiSnipsExpandTrigger = "<NUL>"
vim.g.UltiSnipsListSnippets = "<NUL>"
vim.g.UltiSnipsJumpForwardTrigger = "<NUL>"
vim.g.UltiSnipsJumpBackwardTrigger = "<NUL>"

which didn't work.

Using tab to jump forward leaves a space before jumping forward

The relevant part of my config is given below along with a screen recording. I currently have Tab mapped to just jump forward. When I'm inside a snippet and the completion menu pops up, pressing Tab does not automatically jump to the next place holder. Instead, it inserts a space. It's only after that that I can jump forward.

["<Tab>"] = cmp.mapping(
    function(fallback)
        cmp_ultisnips_mappings.compose {"jump_forwards"}(fallback)
    end, {"i", "s"}),

["<S-Tab>"] = cmp.mapping(
    function(fallback)
        cmp_ultisnips_mappings.compose {"jump_backwards"}(fallback)
    end, {"i", "s"}),

nvim

Error detected while processing TextChangedI Autocommands for "*":

It happens in tex files when I type things. Especially things that trigger ltex.
I updated nvim-cmp to latest version.

Error detected while processing TextChangedI Autocommands for "*":
Error executing lua callback: Vim(return):Error invoking 'python_execute' on channel 3 (python3-script-host):
Traceback (most recent call last):
  File "<string>", line 19, in <module>
TypeError: _context_match() takes 2 positional arguments but 3 were given
stack traceback:
	[C]: in function 'load_snippets'
	...ged\cmp-nvim-ultisnips/lua/cmp_nvim_ultisnips/source.lua:27: in function 'complete'
	C:\Users\ekarni\.vim\plugged\nvim-cmp/lua/cmp/source.lua:296: in function 'complete'
	C:\Users\ekarni\.vim\plugged\nvim-cmp/lua/cmp/core.lua:286: in function 'complete'
	C:\Users\ekarni\.vim\plugged\nvim-cmp/lua/cmp/core.lua:168: in function 'callback'
	C:\Users\ekarni\.vim\plugged\nvim-cmp/lua/cmp/core.lua:218: in function 'autoindent'
	C:\Users\ekarni\.vim\plugged\nvim-cmp/lua/cmp/core.lua:160: in function 'on_change'
	C:\Users\ekarni\.vim\plugged\nvim-cmp/lua/cmp/init.lua:301: in function 'callback'
	...s\ekarni\.vim\plugged\nvim-cmp/lua/cmp/utils/autocmd.lua:49: in function 'emit'
	...s\ekarni\.vim\plugged\nvim-cmp/lua/cmp/utils/autocmd.lua:23: in function <...s\ekarni\.vim\plugged\nvim-cmp/lua/cmp/utils/autocmd.lua:22>

Having issues with nested tabstop

snippet pT "Description" b
paddingTop: ${1:theme.spacing($2)},
endsnippet

Previously to the switch to cmp, i had this mapping that allowed to either replace completely $1 by typing or filling $2 by tabbing when on $1, this doesnt work anymore as I can t seem to tab to the next.
Can someone helps please as this was very useful for me.
Thanks !

Add support for VISUAL

Ultisnips has a possibility to visually select some words, and then expand the snippet. The selected lines automatically appear in the ${VISUAL} placeholder.
Documentation for this
Is it possible to implement that in this plugin?

Jumping not always working correctly

With the following typescript snippet:

snippet log "console.log" A
console.log('${$2}', ${1})
$3
endsnippet

I am unable to jump out from console.log('', asdasd|) the cursor position where cursor is |. Instead it keeps using tab to add more spaces, and never get me in the quotes. Can you test if it is the same issue for you?

ultisnips not working with the latest neovim nightly

I have noticed that the Ultisnips options have stopped working with latest neovim nightly release. Have checked that it works with the rolled back stable release.

Is there something we need to do to fix in the new release

Expand Snippet shows on the command line

I came across this which is basically the same question as this one. Unfortunately, it seems that the issue still exists. Have a look at the video recording below.

local p1, cmp = pcall(require, "cmp")
local p2, cmp_ultisnips_mappings = pcall(require, "cmp_nvim_ultisnips.mappings")

cmp.setup({

    snippet = {
        expand = function(args)
            vim.fn["UltiSnips#Anon"](args.body)
        end,
    },

    sources = {
        { name = "ultisnips" },
        { name = "nvim_lua" },
        { name = "nvim_lsp" },
        { name = "buffer", keyword_length = 5},
        { name = "path" },
    },

    mapping = {
        ['<CR>'] = cmp.mapping.confirm({ select = true }),

        ["<Tab>"] = cmp.mapping(
            function(fallback) cmp_ultisnips_mappings.expand_or_jump_forwards(fallback) end,
            {"i", "s"}),

        ["<S-Tab>"] = cmp.mapping(
          function(fallback) cmp_ultisnips_mappings.jump_backwards(fallback) end,
            {"i", "s"}),
    },

})
2022-03-13.05-26-06.mp4

add a new mapping function?

Hi, thanks for this fantastic plugin.

Since I do not want to integrate too many functions in the Tab key.
Actually , I use the default jump key of UltiSnips, which is C+J.
Could you add a new function expand(fallback).

Something like below:

function M.expand(fallback)
   if cmp.get_selected_entry() == nil and vim.fn["UltiSnips#CanExpandSnippet"]() == 1 then
     t("<Plug>(cmpu-expand)")
   elseif cmp.visible() then
     cmp.select_next_item()
   else
     fallback()
   end
 end

Thanks

lsp tsserver breaking functionality

I've observed interesting thing happening here. Whenever tsserver is enabled, the snippet i have posted in my another issue breaks:

snippet log "console.log" A
console.log('${$2}', ${1})
$3
endsnippet

If I disable tsserver with :LspStop tsserver then it works correctly.

Not only this, but if tsserver is enabled, <Tab> is verbose again and writes =UltiSnips#ExpandSnippetOrJump() to the command line. What could be happening here?

I have updated to the latest commit and readme, and I don't even see =UltiSnips#ExpandSnippetOrJump() anywhere in the codebase anymore, so how does it get printed when I enable tsserver

When cmp is active, jump forward doesnt go forward.

My config:

        ["<Tab>"] = cmp.mapping(
          function(fallback)
            cmp_ultisnips_mappings.compose { "jump_forwards" }(fallback)
          end,
          { "i", "s", --[[ "c" (to enable the mapping in command mode) ]] }
        ),
        ["<S-Tab>"] = cmp.mapping(
          function(fallback)
            cmp_ultisnips_mappings.compose { "jump_backwards" }(fallback)
          end,
          { "i", "s", --[[ "c" (to enable the mapping in command mode) ]] }
        ),

I dont want tab to move forward / backwards on autocomplete list (i use C-n and C-p for this). Tab is just for snippets.

Error executing lua [string ":lua"]:103: attempt to call global 't' (a nil value)

When I try to configure cmp using your example in the readme I get the following error.

Error executing lua [string ":lua"]:103: attempt to call global 't' (a nil value)

This is the config I'm using:

    mapping = {
      ['<Tab>'] = cmp.mapping(function(fallback)
        if vim.fn.pumvisible() == 1 then
          if vim.fn["UltiSnips#CanExpandSnippet"]() == 1 or vim.fn["UltiSnips#CanJumpForwards"]() == 1 then
            return vim.fn.feedkeys(t("<C-R>=UltiSnips#ExpandSnippetOrJump()<CR>"))
          end

          vim.fn.feedkeys(t("<C-n>"), "n")
        elseif is_prior_char_whitespace() then
          vim.fn.feedkeys(t("<tab>"), "n")
        else
          fallback()
        end
      end, { 'i', 's' })
    },
  }

What does the t method refer to in this example?

Mapping for TAB people

Tab will cycle forward through autocomplete item (unless we expanded snippet - then it will jump to snippet tag stops)
ctrl+space - will confirm placing selected item or expand selected snippet

	mapping = {
		['<C-p>'] = cmp.mapping.select_prev_item(),
		['<C-n>'] = cmp.mapping.select_next_item(),
		['<S-Tab>'] = cmp.mapping(function(fallback)
			if vim.fn["UltiSnips#CanJumpBackwards"]() == 1 then
				return vim.fn.feedkeys(t("<C-R>=UltiSnips#JumpBackwards()<CR>"))
			elseif vim.fn.pumvisible() == 1 then
				vim.fn.feedkeys(t("<C-p>"), "n")
			elseif check_back_space() then
				vim.fn.feedkeys(t("<S-tab>"), "n")
			else
				fallback()
			end
		end, { "i", "s", }),
		['<Tab>'] = cmp.mapping(function(fallback)
			if vim.fn["UltiSnips#CanJumpForwards"]() == 1 then
				return vim.fn.feedkeys(t("<C-R>=UltiSnips#JumpForwards()<CR>"))
			elseif vim.fn.pumvisible() == 1 then
				vim.fn.feedkeys(t("<C-n>"), "n")
			elseif check_back_space() then
				vim.fn.feedkeys(t("<tab>"), "n")
			else
				fallback()
			end
		end, { "i", "s", }),
		['<C-d>'] = cmp.mapping.scroll_docs(-4),
		['<C-f>'] = cmp.mapping.scroll_docs(4),
		['<C-e>'] = cmp.mapping.close(),
		['<CR>'] = cmp.mapping.confirm({
			behavior = cmp.ConfirmBehavior.Insert,
			select = true,
		}),
		-- ['<C-Space>'] = cmp.mapping.complete(),
		['<C-Space>'] = cmp.mapping(function(fallback)
			if vim.fn.pumvisible() == 1 then
				if vim.fn["UltiSnips#CanExpandSnippet"]() == 1 then
					return vim.fn.feedkeys(t("<C-R>=UltiSnips#ExpandSnippet()<CR>"))
				end

				vim.fn.feedkeys(t("<C-n>"), "n")
			elseif check_back_space() then
				vim.fn.feedkeys(t("<cr>"), "n")
			else
				fallback()
			end
		end, { "i", "s", }),
	},   

I just thought I will put it in here for preferring 'tab'
btw. dont ask what check_back_space does. I just copied it form other examples.

Error when snippet includes ]

The default ultisnips for Rust have a snippet attr that contains a ].

This breaks the string escaping in https://github.com/quangnguyen30192/cmp-nvim-ultisnips/blob/main/autoload/cmp_nvim_ultisnips.vim#L29 with the following error:

Error detected while processing TextChangedI Autocommands for "*":
E5108: Error executing lua Vim(return):Error invoking 'python_execute' on channel 3 (python3-s
cript-host):
Traceback (most recent call last):
  File "<string>", line 21, in <module>
  File "/usr/local/lib/python3.9/dist-packages/pynvim/api/nvim.py", line 287, in command
    return self.request('nvim_command', string, **kwargs)
  File "/usr/local/lib/python3.9/dist-packages/pynvim/api/nvim.py", line 182, in request
    res = self._session.request(name, *args, **kwargs)
  File "/usr/local/lib/python3.9/dist-packages/pynvim/msgpack_rpc/session.py", line 104, in re
quest
    raise self.error_wrapper(err)
pynvim.api.common.NvimError: Vim(lua):E5107: Error loading lua [string ":lua"]:1: unexpected s
ymbol near ']'

Error out when using latest master.

With the latest commit baac332, when I open nvim, I am seeing the following errors:

vim/_editor.lua:0: User Autocommands for "VeryLazy"..script nvim_exec2() called at User Autocommands for "VeryLazy":0../Users/hao/.local/share/nvim/lazy/cmp-nvim-ultisnips/after/plugin/cmp_nvim_ultisnips.lua: Vim(source):E5113: Er
ror while calling lua chunk: vim/_editor.lua:0: User Autocommands for "VeryLazy"..script nvim_exec2() called at User Autocommands for "VeryLazy":0../Users/hao/.local/share/nvim/lazy/cmp-nvim-ultisnips/after/plugin/cmp_nvim_ultisni
ps.lua..nvim_exec2() called at /Users/hao/.local/share/nvim/lazy/cmp-nvim-ultisnips/after/plugin/cmp_nvim_ultisnips.lua:0..function provider#python3#Call, line 1: Vim(return):E5108: Error executing lua Vim:Error invoking 'python_e
xecute' on channel 4 (python3-script-host):
Traceback (most recent call last):
File "", line 1, in
File "/Users/hao/.local/share/nvim/lazy/cmp-nvim-ultisnips/python3/ultisnips_utils.py", line 1, in
from UltiSnips import UltiSnips_Manager, vim_helper
ModuleNotFoundError: No module named 'UltiSnips'

The previous commit works without errors.

broken UltiSnips

After this new PR #50, my UltiSnips is broken for tex file: UltiSnips cannot be triggered.

Before:
Screenshot 2021-12-15 at 6 19 33 PM

After:
Screenshot 2021-12-15 at 6 18 33 PM

It does not change even if I add filetype_source = "treesitter" in the config of cmp-nvim-ultisnips.
Could you help me?

More information:

Inspired by Gilles Castel, I am using VimTeX and UltiSnips to writing LaTeX documents.
Based on UltiSnips context function, I add below to my tex snippets.

global !p
def math():
    return vim.eval('vimtex#syntax#in_mathzone()') == '1'
endglobal

Clearly, this math() function used syntax from VimTeX.
So, in order to get "correct" context, I used additional_vim_regex_highlighting for latex.
Below is (part of) my configuration of nvim-treesitter.

highlight = {
enable = true,
additional_vim_regex_highlighting = "latex"
}

Load the wrong snippets source

I find I couldn't load some snippes in systemverilog.snippets.

I delete systemverilog.snippets file, But it can load verilog.snippets when I edit *.sv files

Possible bug when triggering snippet before the completion menu has opened for the first time

I noticed a weird behavior recently when I changed the keyword length from 1 to 4. First let me give the steps to reproduce:

  • Set ultisnips keyword length from 1 to some high number that doesn't cause the completion menu to open.
  • Open a file that has snippets defined.
  • Trigger a snippet as defined by vim.g.ultisnipsexpandtrigger.
  • Try to jump to the next tabstop with tab. The tab key doesn't do anything.
  • Now, go into insert mode and try to jump to the next tabstop. Instead, the function call gets printed.

Here's a video showing the "bug". In the first part, I show that everything works fine when the snippet is triggered after the completion menu has opened. In the second part, I set the keyword length to 4, trigger the plugin, and then try to jump to the next tabstop. It doesn't work.

ultisnips.mp4

Here's a minimal setup.

cmp.setup({

    completion = {
        -- completeopt = "menu,menuone,preview,noinsert",
        completeopt = "menuone,noselect",
    },

    snippet = {
        expand = function(args)
            vim.fn["UltiSnips#Anon"](args.body)
        end,
    },

    sources = {
        { name = "nvim_lsp" },
        { name = "ultisnips", keyword_length = 4},
        { name = "buffer", keyword_length = 4},
        { name = "nvim_lua" },
        { name = "path" },
        -- more sources
    },

    mapping = {

        ["<Up>"] = cmp.mapping.select_prev_item(),
        ["<Down>"] = cmp.mapping.select_next_item(),
        ['<C-Space>'] = cmp.mapping.complete(),

        ["<CR>"] = cmp.mapping.confirm({
            behavior = cmp.ConfirmBehavior.Replace,
            select = false,
        }),

        ["<C-e>"] = cmp.mapping.close(),

        ["<Tab>"] = cmp.mapping(
        function(fallback)
            cmp_ultisnips_mappings.compose {"jump_forwards", "select_next_item"}(fallback)
        end, {"i", "s"}),

        ["<S-Tab>"] = cmp.mapping(
        function(fallback)
            cmp_ultisnips_mappings.compose {"jump_backwards", "select_prev_item"}(fallback)
        end, {"i", "s"}),

    },

})

Module not found

Hi, I was trying to install via vim-plug and when I do require("cmp-nvim-ultisnips").setup(), I got an error of Module not found.

Minimal init.vim to reproduce

call plug#begin(stdpath("data") . '/plugged')
Plug 'hrsh7th/nvim-cmp'
Plug 'quangnguyen30192/cmp-nvim-ultisnips'
call plug#end()

lua << EOF
require("cmp-nvim-ultisnips").setup {}
EOF

Launch with the above init.vim and do :PlugInstall and both are correctly installed but I got this error
E5108: Error executing lua [string ":lua"]:2: module 'cmp-nvim-ultisnips' not found:.

Sorry, I'm new to lua, maybe I configured something wrong.

Not showing all honza/vim-snippets (but it still exists somehow)

Hi, I've checked a lot of issues before creating this one, although it is related to some.

I'm using honza/vim-snippets with UltiSnips

image

this is what I'm sourcing in cmp.setup

image

Some snippets do not show in the cmp list, I don't know why, but I still can expand them somehow, for example:

if I type "fore", press escape then press "a" (to the end of the word) and press "tab", it expands to a foreach loop. This is valid for any other snippet that does not appear in the list but exists in honza/vim-snippets (If it is not clear, I can post a clip showing this behavior)

The image bellow is showing neovim (top) and vim (bottom), both using the same snippets

image

I don't mind showing different things between neovim and vim, as long the snippets shown are the same

Disabling autotrigger causes error

I have the autotrigger option of ultisnips disabled for performance reasons. More on this issue can be found here.

if has('nvim')
    au VimEnter * if exists('#UltiSnips_AutoTrigger')
        \ |     exe 'au! UltiSnips_AutoTrigger'
        \ |     aug! UltiSnips_AutoTrigger
        \ | endif
endif

Using the above code with this plugin produces an error every time a key is pressed.

Ultisnips stopped working

I do not remember changing anything in my config, but ultisnips just wont show any suggestions anymore.
Is it working ok for you guys?
I have all the basic setup done, nothing too fancy - but cmp just wont show any entry form ultisnips. The only error I ever get - is if I try to edit snipped file and on save I get this:
image

Not sure if this is because I'm on daily nvim build?
UltisnipsEdit works ok though, so Ultisnip seems loaded ok. .

Can't add new snippets without reloading plugin due to caching

Since the snippets cache is never invalidated, it is not possible to add new snippets using :UltiSnipsEdit without reloading this plugin, as the new snippets are not picked up when completion is invoked.

IMO, there should be no need for caching. I read this issue which it seems led to the cache implementation, but I've not seen any noticeable performance change with vs. without caching. I'd be happy to be proven wrong about this though.

Ideally, this plugin would handle the cache invalidation intelligently, but I can see that being very difficult to implement reliably. At the very least, I think there should be an option to disable caching or a way to manually invalidate the cache that I can hook into an autocmd or something.

Snippetes with multiple options doesn't works

Example:

snippet numericality: "numericality: { | }" i
numericality: { ${2|greater_than,greater_than_or_equal_to,less_than,less_than_or_equal_to,equal_to,other_than|}: ${3:100} }
endsnippet

Inserts:

numericality: { 1.greater_than|2.greater_than_or_equal_to|3.less_than|4.less_than_or_equal_to|5.equal_to|6.other_than: 100 }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.