GithubHelp home page GithubHelp logo

echodoc.vim's Introduction

echodoc.vim

Displays function signatures from completions in the command line.

example

Installation

Use a package manager and follow its instructions.

Note: echodoc requires v:completed_item feature. It is added in Vim 7.4.774.

Global options

Flag Default Description
g:echodoc#enable_at_startup 0 If the value of this variable is non-zero, echodoc is automatically enabled at startup.
g:echodoc#type "echo" Where the documentation is displayed. Choose between: "echo", "signature", "virtual" or "floating"
g:echodoc#events ['CompleteDone'] If the autocmd-events are fired, echodoc is enabled.
g:echodoc#floating_config {} The configuration for the floating window.
g:echodoc#highlight_identifier "Identifier" The highlight of identifier.
g:echodoc#highlight_arguments "Special" The highlight of current argument.
g:echodoc#highlight_trailing "Type" The highlight of trailing.

Type "echo" Usage

When using

let g:echodoc#type = "echo" " Default value

The command line is used to display echodoc text. This means that you will either need to set noshowmode or set cmdheight=2. Otherwise, the -- INSERT -- mode text will overwrite echodoc's text.

When you accept a completion for a function with <c-y>, echodoc will display the function signature in the command line and highlight the argument position your cursor is in.

Examples

Option 1:

" To use echodoc, you must increase 'cmdheight' value.
set cmdheight=2
let g:echodoc_enable_at_startup = 1

Option 2:

" Or, you could disable showmode alltogether.
set noshowmode
let g:echodoc_enable_at_startup = 1

Option 3:

" Or, you could use neovim's virtual virtual text feature.
let g:echodoc#enable_at_startup = 1
let g:echodoc#type = 'virtual'

Option 4:

" Or, you could use neovim's floating window feature.
let g:echodoc#enable_at_startup = 1
let g:echodoc#type = 'floating'
" You could configure the behaviour of the floating window like below:
let g:echodoc#floating_config = {'border': 'single'}
" To use a custom highlight for the float window,
" change Pmenu to your highlight group
highlight link EchoDocFloat Pmenu

Option 5:

" Or, you could use vim's popup window feature.
let g:echodoc#enable_at_startup = 1
let g:echodoc#type = 'popup'
" To use a custom highlight for the popup window,
" change Pmenu to your highlight group
highlight link EchoDocPopup Pmenu

echodoc.vim's People

Contributors

110y avatar ashwinsekar avatar bew avatar bfredl avatar chemzqm avatar get-me-power avatar hauleth avatar johnheenan avatar jrosiek avatar octaltree avatar ratheesh avatar shatur avatar shougo avatar tamago324 avatar theconfuzzleddude avatar tweekmonster avatar yiklek 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

echodoc.vim's Issues

Overload args of a function

echodoc on print() python function, if we try to excess its args: print(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,), with noshowmode and cmdheight=1, it causes flick in command bar.

[Help] How to get echodoc work?

Systems: gvim 8.1 / windows 10

For i.e: I have a python file as below:

def func1(a, b, c, d)
    a = 10
    b = 0.1
    c = "dfadsf"
    d = "fdklajfa"
    print(a, b, c, d)

func1(a, b, c, d)

Problem is that at last line when I try to call func1 with its arguments, there's no echodoc in statusline for func1.

Steps as follow:

  1. type fu
  2. ctrl-n to trigger completion (I use VimCompletesMe for auto completion)
  3. choose func1 in bottom-down list and then press ctrl-y to trigger echodoc.

But echodoc won't be triggered and doesn't echo func1 prototype.

Related .vimrc config:

set noshowmode
shortmess=FfilnxtToOcI cmdheight=1 cmdwinheight=7
laststatus=0 statusline=\ 
let g:echodoc_enable_at_startup = 1
let g:echodoc_type = 'echo'

Function signatures too short

With long function signatures, the middle of the signature is usually replace with ... to have it fit within the space available. However, this seems to also be happening even if the function signature has plenty more space to expand into (see below). I suspect this might be an issue with how echodoc operates when textwidth is set, but I'm not sure.

2014-11-01-135215_1600x900_scrot

As a separate suggestion, maybe shortening function signatures should also be done in a cleverer way? For example, shorten the names (or the types) of each argument individually so that the signature still gives sense of what arguments the function is expecting..

E121: UNdefined variable: v:completed_item

If I enable echodoc I get the following error messages upon insterting:

Error detected while processing function <SNR>79_on_cursor_moved..<SNR>79__on_cursor_moved..29:
line   12:
E121: Undefined variable: v:completed_item
Error detected while processing function <SNR>79_on_cursor_moved..<SNR>79__on_cursor_moved..29:
line   12:
E116: Invalid arguments for function empty(v:completed_item)
Error detected while processing function <SNR>79_on_cursor_moved..<SNR>79__on_cursor_moved..29:
line   12:
E15: Invalid expression: !empty(v:completed_item)

If I disable the plug-in via :EchoDocDisable the error isn't displayed anymore.

vimrc with only neocomplete stuff:

``set enc=utf-8
set fenc=utf-8
set termencoding=utf-8
set nocompatible

filetype plugin indent on

" Plug-in management {{{
call plug#begin('~/.vim/plugged')
Plug 'Shougo/neocomplete.vim' | Plug 'Shougo/neosnippet.vim' | Plug 'Shougo/neosnippet-snippets' | Plug 'Shougo/echodoc.vim'
Plug 'Shougo/vimproc.vim', {'do' : 'make'}
call plug#end()
" }}}
set noshowmode

filetype plugin indent on
set omnifunc=syntaxcomplete#Complete
set completeopt=menu,preview,longest

" neocomplete {{{
let g:neocomplete#enable_at_startup = 1
let g:neocomplete#enable_smart_case = 1
let g:neocomplete#enable_camel_case = 1
let g:neocomplete#auto_completion_start_length = 2

let g:neocomplete#sources#tags#cache_limit_size = 16777216 " 16MB
let g:neocomplete#max_list = 500

let g:neocomplete#enable_auto_delimiter = 1
let g:neocomplete#fallback_mappings =
  \ ["\<C-x>\<C-o>", "\<C-x>\<C-n>"]

let g:neocomplete#use_vimproc = 1
let g:neosnippet#enable_completed_snippet = 1

" For conceal markers.
if has('conceal')
  set conceallevel=2 concealcursor=niv
endif
let g:echodoc_enable_at_startup = 1
"}}}

Echodoc does not show function signatures

Hi,

I'm having problems getting echodoc to work with my setup.
Can anyone spot an obvious configuration issue?

Here's my neovim checkhealth:

`health#deoplete#check

deoplete.nvim

  • OK: exists("v:t_list") was successful
  • OK: has("timers") was successful
  • OK: has("python3") was successful
  • OK: Python3.5+ was successful
  • INFO: If you're still having problems, try the following commands:
    $ export NVIM_PYTHON_LOG_FILE=/tmp/log
    $ export NVIM_PYTHON_LOG_LEVEL=DEBUG
    $ nvim
    $ cat /tmp/log_{PID}
    and then create an issue on github

health#jedi#check

jedi

Jedi-vim debug information

jedi-vim version
  • jedi-vim git version: b6dfc5f
  • jedi git submodule status: bd1010bbd2693f189ff780eb21fc4294071cb280 pythonx/jedi (v0.13.1)
  • parso git submodule status: 930ec08ab0cd77aae07e24aa78f9c5119be216bb pythonx/parso (v0.3.1-7-g930ec08)
Global Python

Using Python version 3 to access Jedi.

  • global sys.version: 3.6.5 | packaged by conda-forge | (default, Apr 6 2018, 13:44:09), [GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)]
  • global site module: /Users/landge/miniconda3/lib/python3.6/site.py
Jedi
  • path: /Users/landge/.local/share/nvim/plugged/jedi-vim/pythonx/jedi/jedi/__init__.py
  • version: 0.13.1
Jedi environment: <SameEnvironment: 3.6.5 in /Users/landge/miniconda3>
  • executable: /Users/landge/miniconda3/bin/python3
  • sys_path:
    • /Users/landge/miniconda3/lib/python36.zip
    • /Users/landge/miniconda3/lib/python3.6
    • /Users/landge/miniconda3/lib/python3.6/lib-dynload
    • /Users/landge/miniconda3/lib/python3.6/site-packages
    • /Users/landge/miniconda3/lib/python3.6/site-packages/cycler-0.10.0-py3.6.egg
Known environments
  • <Environment: 3.6.5 in /Users/landge/miniconda3> (/Users/landge/miniconda3/bin/python3.6)

  • <Environment: 2.7.14 in /usr/local/Cellar/python@2/2.7.14_3/Frameworks/Python.framework/Versions/2.7> (/usr/local/opt/python@2/bin/python2.7)

Settings
g:jedi#show_call_singatures = '1' (default: '-')


  omnifunc=htmlcomplete#CompleteTags
	Last set from /usr/local/Cellar/neovim/0.3.1/share/nvim/runtime/ftplugin/html.vim
  completeopt=menuone,longest,preview
	Last set from ~/.local/share/nvim/plugged/jedi-vim/plugin/jedi.vim

health#nvim#check

Configuration

  • OK: no issues found

Performance

  • OK: Build type: Release

Remote Plugins

  • OK: Up to date

terminal

  • INFO: key_backspace (kbs) terminfo entry: key_backspace=^H
  • INFO: key_dc (kdch1) terminfo entry: key_dc=\E[3~
  • INFO: $TERM_PROGRAM='iTerm.app'
  • INFO: $COLORTERM='truecolor'

health#provider#check

Clipboard (optional)

  • OK: Clipboard tool found: pbcopy

Python 2 provider (optional)

  • WARNING: No Python interpreter was found with the neovim module. Using the first available for diagnostics.
  • ERROR: Python provider error
    • ADVICE:
      • provider/pythonx: Could not load Python 2:
        /usr/local/bin/python2 does not have the "neovim" module. :help |provider-python|
        /usr/local/bin/python2.7 does not have the "neovim" module. :help |provider-python|
        python2.6 not found in search path or not executable.
        /Users/landge/miniconda3/bin/python is Python 3.6 and cannot provide Python 2.
  • INFO: Executable: Not found

Python 3 provider (optional)

  • INFO: g:python3_host_prog is not set. Searching for python3 in the environment.
  • INFO: Multiple python3 executables found. Set g:python3_host_prog to avoid surprises.
  • INFO: Executable: /Users/landge/miniconda3/bin/python3
  • INFO: Other python executable: /usr/local/bin/python3
  • INFO: Python3 version: 3.6.5
  • INFO: python3-neovim version: 0.3.0
  • OK: Latest python3-neovim is installed: 0.3.0

Ruby provider (optional)

  • INFO: Ruby: ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
  • 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: v10.2.1
  • 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

`

And my init.vim:

call plug#begin('~/.local/share/nvim/plugged')
Plug 'vim-python/python-syntax'
Plug 'rafi/awesome-vim-colorschemes'
Plug 'scrooloose/nerdtree'
if has('nvim')
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
endif
Plug 'vim-airline/vim-airline'
Plug 'Shougo/echodoc.vim'
Plug 'zchee/deoplete-jedi'
Plug 'davidhalter/jedi-vim'
Plug 'christoomey/vim-tmux-navigator'
Plug 'rakr/vim-one'
call plug#end()
set termguicolors
let g:deoplete#sources#jedi#show_docstring=0
let g:echodoc_enable_at_startup="1"
let g:airline_theme='one'
let g:echodoc_type='echo'
let g:jedi#show_call_singatures= "1"
colorscheme one
set background=dark
set cmdheight=2
call deoplete#enable()

The completions are shown in a pop-up, but the signatures are not shown.

screenshot 2018-11-06 at 11 28 44

screenshot 2018-11-06 at 11 30 43

Nothing is shown after selecting the candidate with Ctrl-n, Ctrl-y

Thanks in advance,
landge

Not working for me

I'm using this settings, among others but I cant get this plugin to work, I don't see any method signature at the bottom, even when I select an item with Ctrl+y:

"Testing better completion
" the framework
Plug 'roxma/nvim-completion-manager'

" (optional) javascript completion
Plug 'roxma/nvim-cm-tern',  {'do': 'npm install'}
" (optional) language server protocol framework
Plug 'autozimu/LanguageClient-neovim', { 'do': ':UpdateRemotePlugins' }
" (optional) php completion via LanguageClient-neovim
Plug 'roxma/LanguageServer-php-neovim',  {'do': 'composer install && composer run-script parse-stubs'}

" (Optional) Showing function signature and inline doc.
Plug 'Shougo/echodoc.vim'
set  noshowmode

RuntimeError: still parsing the file, no completion yet?

I installed echodoc by vim-plug this afternoon and try to use it in my C++ code.
I installed YCM and I used tab to complete the function name. But nothing appeared at the bottom.
I thought I'd must done something wrong, I tried several times nothing happened until it suddenly appeared "RuntimeError still parsing the file, no completion yet".
The sentence like this(not exactly), and it disappeared when I try to copy it.
Did I do something wrong? How to solve it?
I set noshowmode in vimrc and my vim version is 8.1.

How to work with `add(2)(3)` syntax

Given I have a function that returns a function, how could I have argument completion for it?

For example: add = a => b => a + b

When I write this: add(
Echodoc will show the first part add(a: number)

But when I have write the rest: add(3)(
Echodoc still shows add(a: number)

Can echodoc do this? If so, how can I add that functionality?
My plugin (tern) has already declared the function type as fn(a: number) -> fn(b: number) -> number

Doesn't work with Rust/deoplete/racer

Hi!

I'm trying to use echodoc with Rust/deoplete/racer, and it's very buggy. Whenever I try to use it, it does nothing until I type the first character of the arguments, at which point it displays function_name(x where x is the first character of the arguments. Typing anything else doesn't do anything; it just stays there until I exit insert mode.

Here are some images of this happening:

2018-01-05_22-47-36

2018-01-05_22-47-57

I also tried with let g:echodoc#type = "signature", which had interesting though also invalid results that I cannot reproduce for some reason. I was seeing type signatures like () -> -> bool, which I believe is nonsense for Rust (though the function did return bool). When I try to reproduce, I get the same issue as above.

Here's my neovim version information (literally just reinstalled to make sure):

2018-01-05_22-51-39

Deoplete is version 4.0 (also just :PlugUpdated)

echodoc is version 1.0

Thanks for a(nother) really cool plugin!

Isn't displaying function signatures

Here's my .vimrc file:

"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
" "
" .::::. "
" ___________ :;;;;:____________ " " \_________/ ?????L \__________/ " " |.....| ????????> :.......' " " |:::::| $$$$$$".:::::::' , "
" ,|:::::| $$$$".:::::::' .OOS. " " ,7D|;;;;;| $$".;;;;;;;' .OOO888S. "
" .GDDD|;;;;;| ?.;;;;;;;' .OO8DDDDDNNS. " " 'DDO|IIIII| .7IIIII7' .DDDDDDDDNNNF "
" 'D|IIIIII7IIIII7' .DDDDDDDDNNNF " " |EEEEEEEEEE7' .DDDDDDDNNNNF "
" |EEEEEEEEZ' .DDDDDDDDNNNF " " |888888Z' .DDDDDDDDNNNF "
" |8888Z' ,DDDDDDDNNNNF` "
" |88Z' "DNNNNNNN" "
" '"' "MMMM" "
" "" "
" "
" ___ ____ __ _ _ ________ ___ "
" / | / / / __ ______ __ __ ____ ___ ___ / / ()_ | | / / / |/ / "
" / /| | / / / / / / / __ / / / / / __ / _ / _ / __ / / / / | | / // // /|/ / "
" / ___ |/ / / / /
/ / /
/ / /
/ / / / / / / / /_/ / / ( ) | |/ // // / / / "
" // |/// _, /_
/_,/ // //_/_/_,/ /// |/// // "
" /
/ "
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"

set nocompatible " required
filetype off " required
set hidden
set showtabline=0

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)
"-------------------=== Code/Project navigation ===-------------
Plugin 'scrooloose/nerdtree' " Project and file navigation
Plugin 'Xuyuanp/nerdtree-git-plugin' " NerdTree git functionality
Plugin 'majutsushi/tagbar' " Class/module browser
Plugin 'vim-ctrlspace/vim-ctrlspace' " Tabs/Buffers/Fuzzy/Workspaces/Bookmarks
Plugin 'mileszs/ack.vim' " Ag/Grep
Plugin 'vim-airline/vim-airline' " Lean & mean status/tabline for vim
Plugin 'vim-airline/vim-airline-themes' " Themes for airline
Plugin 'fisadev/FixedTaskList.vim' " Pending tasks list
Plugin 'yuttie/comfortable-motion.vim' " Smooth scrolling
Plugin 'MattesGroeger/vim-bookmarks' " Bookmarks
Plugin 'thaerkh/vim-indentguides' " Visual representation of indents
Plugin 'neomake/neomake' " Asynchronous Linting and Make Framework
Plugin 'Shougo/deoplete.nvim' " Asynchronous Completion
Plugin 'roxma/nvim-yarp' " Deoplete Dependency #1
Plugin 'roxma/vim-hug-neovim-rpc' " Deoplete Dependency #2

"-------------------=== Other ===-------------------------------
Plugin 'tpope/vim-surround' " Parentheses, brackets, quotes, XML tags, and more
Plugin 'flazz/vim-colorschemes' " Colorschemes
Plugin 'vimwiki/vimwiki' " Personal Wiki
Plugin 'jreybert/vimagit' " Git Operations
Plugin 'kien/rainbow_parentheses.vim' " Rainbow Parentheses
Plugin 'chriskempson/base16-vim' " Base 16 colors
Plugin 'ryanoasis/vim-devicons' " Dev Icons

"-------------------=== Snippets support ===--------------------
Plugin 'garbas/vim-snipmate' " Snippets manager
Plugin 'MarcWeber/vim-addon-mw-utils' " dependencies #1
Plugin 'tomtom/tlib_vim' " dependencies #2
Plugin 'honza/vim-snippets' " snippets repo

"-------------------=== Languages support ===-------------------
Plugin 'scrooloose/nerdcommenter' " Easy code documentation
Plugin 'mitsuhiko/vim-sparkup' " Sparkup(XML/jinja/htlm-django/etc.) support
Plugin 'w0rp/ale'

"-------------------=== Python ===-----------------------------
Plugin 'klen/python-mode' " Python mode (docs, refactor, lints...)
Plugin 'hynek/vim-python-pep8-indent'
Plugin 'mitsuhiko/vim-python-combined'
Plugin 'mitsuhiko/vim-jinja'
Plugin 'jmcantrell/vim-virtualenv'

" All of your Plugins must be added before the following line
call vundle#end() " required
filetype on
filetype plugin on
filetype plugin indent on

"=====================================================
"" General settings
"=====================================================
if filereadable(expand("~/.vimrc_background"))
source ~/.vimrc_background
endif
set encoding=utf-8
let base16colorspace=256
set t_Co=256 " 256 colors
set guifont=mononoki\ Nerd\ Font\ 18
colorscheme base16-default-dark " set vim colorscheme
let g:airline_theme='base16_spacemacs' " set airline theme
syntax enable " enable syntax highlighting

set pyxversion=0
let g:loaded_python_provider = 1
set shell=/bin/bash
set number " show line numbers
set ruler
set ttyfast " terminal acceleration

set tabstop=4 " 4 whitespaces for tabs visual presentation
set shiftwidth=4 " shift lines by 4 spaces
set smarttab " set tabs for a shifttabs logic
set expandtab " expand tabs into spaces
set autoindent " indent when moving to the next line while writing code

set cursorline " shows line under the cursor's line
set showmatch " shows matching part of bracket pairs (), [], {}

set enc=utf-8 " utf-8 by default

set nobackup " no backup files
set nowritebackup " only in case you don't want a backup file while editing
set noswapfile " no swap files

set backspace=indent,eol,start " backspace removes all (indents, EOLs, start) What is start?

set scrolloff=20 " let 10 lines before/after cursor during scroll

set clipboard=unnamed " use system clipboard

set exrc " enable usage of additional .vimrc files from working directory
set secure " prohibit .vimrc files to execute shell, create files, etc...

"=====================================================
"" Tabs / Buffers settings
"=====================================================
tab sball
set switchbuf=useopen
set laststatus=2
nmap :bprev
nmap :bnext
nmap q :SyntasticCheck # :bp bd #

"=====================================================
"" Neomake Settings
"=====================================================
call neomake#configure#automake('w')
let g:neomake_open_list = 2

"=====================================================
"" Deoplete Settings
"=====================================================
" Use deoplete.
let g:deoplete#enable_at_startup=1
let g:deoplete#file#enable_buffer_path=1
let g:deoplete#disable_auto_complete=1
let g:deoplete#enable_refresh_always=0
let g:deoplete#max_list = 500
let g:deoplete#max_menu_width = 60
let g:deoplete#tag#cache_limit_size = 0
let g:deoplete#auto_complete_start_length = 999
let g:deoplete#ignore_sources = {}
let g:deoplete#ignore_sources._ = ['tag', 'dictionary', 'member', 'buffer', 'omni', 'around']
set completeopt+=noselect
set cpt-=t
set cpt+=i

"=====================================================
"" Relative Numbering
"=====================================================
nnoremap :set relativenumber!

"=====================================================
"" Search settings
"=====================================================
set incsearch " incremental search
set hlsearch " highlight search results

"=====================================================
"" Comfortable Motion Settings
"=====================================================
let g:comfortable_motion_scroll_down_key = "j"
let g:comfortable_motion_scroll_up_key = "k"
let g:comfortable_motion_no_default_key_mappings = 1
let g:comfortable_motion_impulse_multiplier = 25 " Feel free to increase/decrease this value.
nnoremap :call comfortable_motion#flick(g:comfortable_motion_impulse_multiplier * winheight(0) * 2)
nnoremap :call comfortable_motion#flick(g:comfortable_motion_impulse_multiplier * winheight(0) * -2)
nnoremap :call comfortable_motion#flick(g:comfortable_motion_impulse_multiplier * winheight(0) * 4)
nnoremap :call comfortable_motion#flick(g:comfortable_motion_impulse_multiplier * winheight(0) * -4)

"=====================================================
"" AirLine settings
"=====================================================
let g:airline#extensions#tabline#enabled=1
let g:airline#extensions#tabline#formatter='unique_tail'
let g:airline_powerline_fonts=1

"=====================================================
"" TagBar settings
"=====================================================
let g:tagbar_autofocus=0
let g:tagbar_width=42
autocmd BufEnter *.py :call tagbar#autoopen(0)
autocmd BufWinLeave *.py :TagbarClose
nnoremap :TagbarToggle
"=====================================================
"" NERDTree settings
"=====================================================
let NERDTreeIgnore=['.pyc$', '.pyo$', 'pycache$'] " Ignore files in NERDTree
let NERDTreeWinSize=40
autocmd VimEnter * if !argc() | NERDTree | endif " Load NERDTree only if vim is run without arguments
nmap " :NERDTreeToggle

"=====================================================
"" NERDComment Settings
"=====================================================
" Add spaces after comment delimiters by default
let g:NERDSpaceDelims = 1

" Use compact syntax for prettified multi-line comments
let g:NERDCompactSexyComs = 1

" Align line-wise comment delimiters flush left instead of following code indentation
let g:NERDDefaultAlign = 'left'

" Set a language to use its alternate delimiters by default
let g:NERDAltDelims_java = 1

" Add your own custom formats or override the defaults
let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } }

" Allow commenting and inverting empty lines (useful when commenting a region)
let g:NERDCommentEmptyLines = 1

" Enable trimming of trailing whitespace when uncommenting
let g:NERDTrimTrailingWhitespace = 1

"=====================================================
"" DevIcon Settings
"=====================================================
" loading the plugin
let g:webdevicons_enable = 1

" adding the flags to NERDTree
let g:webdevicons_enable_nerdtree = 1

" adding to vim-airline's tabline
let g:webdevicons_enable_airline_tabline = 1

" adding to vim-airline's statusline
let g:webdevicons_enable_airline_statusline = 1

" turn on/off file node glyph decorations (not particularly useful)
let g:WebDevIconsUnicodeDecorateFileNodes = 1

" use double-width(1) or single-width(0) glyphs
" only manipulates padding, has no effect on terminal or set(guifont) font
let g:WebDevIconsUnicodeGlyphDoubleWidth = 1

" whether or not to show the nerdtree brackets around flags
let g:webdevicons_conceal_nerdtree_brackets = 0

" the amount of space to use after the glyph character (default ' ')
let g:WebDevIconsNerdTreeAfterGlyphPadding = ' '

" Force extra padding in NERDTree so that the filetype icons line up vertically
let g:WebDevIconsNerdTreeGitPluginForceVAlign = 1

" change the default character when no match found
let g:WebDevIconsUnicodeDecorateFileNodesDefaultSymbol = 'ƛ'

" set a byte character marker (BOM) utf-8 symbol when retrieving file encoding
" disabled by default with no value
let g:WebDevIconsUnicodeByteOrderMarkerDefaultSymbol = ''

" enable folder/directory glyph flag (disabled by default with 0)
let g:WebDevIconsUnicodeDecorateFolderNodes = 1

" enable open and close folder/directory glyph flags (disabled by default with 0)
let g:DevIconsEnableFoldersOpenClose = 1

" enable pattern matching glyphs on folder/directory (enabled by default with 1)
let g:DevIconsEnableFolderPatternMatching = 1

" enable file extension pattern matching glyphs on folder/directory (disabled by default with 0)
let g:DevIconsEnableFolderExtensionPatternMatching = 0

"=====================================================
"" SnipMate settings
"=====================================================
let g:snippets_dir='~/.vim/vim-snippets/snippets'

"=====================================================
"" Rainbow Parentheses Autoload
"=====================================================
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound
au Syntax * RainbowParenthesesLoadSquare
au Syntax * RainbowParenthesesLoadBraces

"=====================================================
"" Indent Guides Settings
"=====================================================
set listchars=tab:›\ ,trail:•,extends:#,nbsp:.
"=====================================================
"" Python settings
"=====================================================

" python executables for different plugins
let g:pymode_python='python'

" rope
let g:pymode_rope=0
let g:pymode_rope_completion=0
let g:pymode_rope_complete_on_dot=0
let g:pymode_rope_auto_project=0
let g:pymode_rope_enable_autoimport=0
let g:pymode_rope_autoimport_generate=0
let g:pymode_rope_guess_project=0

" documentation
let g:pymode_doc=0
let g:pymode_doc_bind='K'

" lints
let g:pymode_lint=0

" virtualenv
let g:pymode_virtualenv=1

" breakpoints
let g:pymode_breakpoint=1
let g:pymode_breakpoint_key='b'

" syntax highlight
let g:pymode_syntax=1
let g:pymode_syntax_slow_sync=1
let g:pymode_syntax_all=1
let g:pymode_syntax_print_as_function=g:pymode_syntax_all
let g:pymode_syntax_highlight_async_await=g:pymode_syntax_all
let g:pymode_syntax_highlight_equal_operator=g:pymode_syntax_all
let g:pymode_syntax_highlight_stars_operator=g:pymode_syntax_all
let g:pymode_syntax_highlight_self=g:pymode_syntax_all
let g:pymode_syntax_indent_errors=g:pymode_syntax_all
let g:pymode_syntax_string_formatting=g:pymode_syntax_all
let g:pymode_syntax_space_errors=g:pymode_syntax_all
let g:pymode_syntax_string_format=g:pymode_syntax_all
let g:pymode_syntax_string_templates=g:pymode_syntax_all
let g:pymode_syntax_doctests=g:pymode_syntax_all
let g:pymode_syntax_builtin_objs=g:pymode_syntax_all
let g:pymode_syntax_builtin_types=g:pymode_syntax_all
let g:pymode_syntax_highlight_exceptions=g:pymode_syntax_all
let g:pymode_syntax_docstrings=g:pymode_syntax_all

" highlight 'long' lines (>= 80 symbols) in python files
augroup vimrc_autocmds
autocmd!
autocmd FileType python,rst,c,cpp highlight Excess ctermbg=DarkGrey guibg=Black
autocmd FileType python,rst,c,cpp match Excess /%81v.*/
autocmd FileType python,rst,c,cpp set nowrap
autocmd FileType python,rst,c,cpp set colorcolumn=80
augroup END

" code folding
let g:pymode_folding=0

" pep8 indents
let g:pymode_indent=1

" code running
let g:pymode_run=1
let g:pymode_run_bind=''

let g:ale_sign_column_always = 0
let g:ale_emit_conflict_warnings = 0
let g:airline#extensions#ale#enabled = 1
let g:pymode_rope_lookup_project = 0
let g:airline#extensions#tabline#enabled = 1

imap :w:!clear;python %

python3 << EOF
import vim
import git
def is_git_repo():
try:
_ = git.Repo('.', search_parent_directories=True).git_dir
return "1"
except:
return "0"
vim.command("let g:pymode_rope = " + is_git_repo())
EOF

" Toggle between windows
nnoremap
nnoremap
nnoremap
nnoremap

" deoplete tab-complete
inoremap pumvisible() ? "<c-n>" : "<tab>"
" tern
autocmd FileType javascript nnoremap gb :TernDef

" change colour scheme
"colorscheme wombat
":colorscheme molokai
colorscheme Benokai

Plugin 'Shougo/neosnippet.vim'
Plugin 'Shougo/neosnippet-snippets'
let g:neosnippet#enable_completed_snippet = 1
" Plugin key-mappings.
" Note: It must be "imap" and "smap". It uses mappings.
imap (neosnippet_expand_or_jump)
smap (neosnippet_expand_or_jump)
xmap (neosnippet_expand_target)

" SuperTab like snippets behavior.
" Note: It must be "imap" and "smap". It uses mappings.
"imap
" \ pumvisible() ? "<C-n>" :
" \ neosnippet#expandable_or_jumpable() ?
" \ "<Plug>(neosnippet_expand_or_jump)" : "<TAB>"
smap neosnippet#expandable_or_jumpable() ?
\ "<Plug>(neosnippet_expand_or_jump)" : "<TAB>"

" Enable snipMate compatibility feature.
let g:neosnippet#enable_snipmate_compatibility = 1

" Tell Neosnippet about the other snippets
let g:neosnippet#snippets_directory='~/.vim/bundle/vim-snippets/snippets'

Plugin 'Shougo/echodoc.vim'

set cmdheight=2
let g:echodoc_enable_at_startup = 1

InsertEnter does not trigger echodoc

With echodoc enabled and on a function whose signature it knows how to display, entering insert mode does not cause it to display the signature. I would personally prefer to see the function signature immediately, but I imagine there's a reason it doesn't. I see looking through the source that not showing on InsertEnter is by design. Is this purely for performance reasons? Or trying not to step on other plugins' toes?

Support omni autocompletion?

I can make echodoc works with typing print then type () will trigger echodoc - in python file

But parser.parse_args then () won't trigger echodoc, any suggestions?

:messages shows empty in both tries.

Decrease Echo Time

It would be nice for echodoc to output/echo it's output faster after cursor stopping to move.

g:echodoc_enable_at_startup が効かない

発生条件.
NeoBundleLazy を設定する

NeoBundle 'Shougo/echodoc', '', 'default'
call neobundle#config('echodoc', {
      \ 'lazy' : 1,
      \ 'autoload' : {
      \ 'insert' : 1,
      \ }})

plugin/echodoc.vim 内で, autocmd VimEnter * call echodoc#enable() と、している影響だと思います。
手動で Enable すれば動作するようになります。

Errors when typing in new buffer

When I create a new buffer that has no file associated with it (e.g. :new) and go into insert mode every time I type a new symbol this error is thrown:

Error detected while processing function <SNR>104__on_cursor_moved[14]..echodoc#default#get_cache:
line    2:
E713: Cannot use empty key for Dictionary

If I understand it correctly then get_cache function (https://github.com/Shougo/echodoc.vim/blob/master/autoload/echodoc/default.vim#L80) fails due to the filetype being empty.

When I :set filetype=xml no more errors is shown.

echo jedi docs in command line

Consider the following minimal vimrc

set nocompatible

let $ONEDRIVE_HOME = expand('C:/OD/Users/Pedro/')
let $DOTVIM = expand('$ONEDRIVE_HOME/vimfiles')

set runtimepath+=$DOTVIM/bundle/neocomplete
set runtimepath+=$DOTVIM/bundle/jedi
set runtimepath+=$DOTVIM/bundle/echodoc

filetype plugin indent on

let g:neocomplete#enable_at_startup = 1
if !exists('g:neocomplete#force_omni_input_patterns')
    let g:neocomplete#force_omni_input_patterns = {}
endif
let g:neocomplete#force_omni_input_patterns.python =
    \ '\%([^. \t]\.\|^\s*@\|^\s*from\s.\+import \|^\s*from \|^\s*import \)\w*'

augroup py_comp
    au!
    au FileType python setlocal omnifunc=jedi#completions
augroup END

let g:echodoc_enable_at_startup = 1
set noshowmode
set cmdheight=2
set shortmess+=Ic
set pumheight=15

let g:jedi#completions_enabled = 0
let g:jedi#auto_vim_configuration = 0
if has('python3')
    let g:jedi#force_py_version = 3
endif

and in a new file (foo.py) type str. and select the first candidate with C-n (i.e capitalize). You will see that the preview window opens showing the docs for S.capitalize().

If I understood correctly the echodoc plugin will print the documentation in the command line instead of opening a scratch preview window buffer. It appears it doesn't work in my case. Can this be fixed?

foo

support for a function call format

hi, could the plugin sopport the following calling format

int func(int arg) { return arg; }
// call func
func (3); // one space after function name

doesn't work with YCM for python3?

I typed prin <tab> <enter> ( ' 123 ' )

there's nothing dispalying during the tyeping in statebar which I already set cmdheight=2
my c-y is 'already at newest change'

thanks!

Bug: take c++ template argument as function argument

This bug is very annoying ,suppose I have a template function as:

template<class T,std::size_t size>
void process(std::array<T,size> array){...}

Then when I use ycm or other to complete it echodoc take the argument as two: one is std::array<T,another is size> array.

How to make it to work with deoplete?

Hi Shougo,

I'm using deoplete, but it doesn't seem to trigger echodoc to show doc.

Deoplete provides a list of candidates, I select a one, then enter '(' (its with C++) and nothing happens. I expect that echodoc shows signature of function.

If I press <C-X><C-N><Esc> signature is shown.

How to make it to show signature when I write '(' ?

Thanks,
Milan

echodoc.vim not works on vim8 and macvim

The latest echodoc.vim in git not works on vim8 and macvim

vim8: v8.0.0046 (win64)
macvim: snapshot-113

echodoc.vim not works for both vim8 and macvim since this commit 7b8b42d
image
When I press <c-y>, nothing showed up.

But this commit [3d80a9a] works fine
image

Thanks

display the error info

javascript code

var obj = {
    name: 'yuuko',
    getName: function() {
        return this.name;
    },
    showName: function() {
        console.log(this.name);
    },
    setName: function(name) {
        this.name = name;
    }
};

obj.getName($1)
obj.setName($2)

the $1 and $2 is the cursor position, at the $1 i get the right info, and at the $2 i get info same as $1

mininit..vim

" vim-plug {
    call plug#begin('~/dotfiles/nvim/plugged')

    " deoplete and sources about {
        Plug 'Shougo/deoplete.nvim'
        Plug 'Shougo/echodoc.vim'
        Plug 'carlitux/deoplete-ternjs', { 'for': 'javascript' }
    " }

    call plug#end()

" }

" plugins {

    " deoplete.nvim {
        let g:deoplete#enable_at_startup = 1
        let g:deoplete#max_list = 15
        inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
        function! s:my_cr_function()
            return (pumvisible() ? "\<C-y>" : "" ) . "\<CR>"
        endfunction
        inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
    " }
" }

Ignore "self" for python methods

This is what echodoc shows for constructor method of ForeignKey class of django.db.models:

ForeignKey(self, to, on_delete, related_name=None, related_query_name=None, limit_choices_to=None, parent_link=False, to_field=None, )

When I'm writing first argument (which is to) it highlights self as it thinks self is first argument while self should be ignored (it's cool to show it so that user knows the method is a class method, but it should ignore it when highlighting current argument.)

Does this work require Deoplete?

Title says it all. I use CoC autocomplete and this isn't working - I'm wondering if I have to ditch CoC for this to get the function signatures

Function to toggle doc for keyword under cursor

Would it be possible to add a mappable function to toggle/show the echodoc for the keyword under the cursor?

Example: I place the cursor over println("message") somewhere, then I press <C-L> or some other key I've mapped to show the current echodoc.

I know that I can use <C-K> most of the time, but I really like the simplicity of echodoc.

How to enable echodoc for PHP?

I've read issues for both echodoc and neocomplete but I can't seem to understand how to enable echodoc. I've got noshowmode, neocomplete and echodoc installed and both set to be enabled. Do I need to add something more? When the completion popup is shown and if I choose a function and hit C-y, nothing is shown.

minimum configuration to show docs

It doesn't seem to work for me,all I want is for the completion doc that normally shows in preview window to always show in the command line(mainly with javascript).this is what i have in my vimrc

set cmdheight=2
let g:echodoc_enable_at_startup = 1
set completeopt-=preview
Plug 'Shougo/echodoc.vim'

Do I need to make a dictionary for every filetype?If so what is an example that I could use?

echodoc.vim does not display signature when completing a function pointer in C

Hi
I cannot get echodoc.vim to show me the signature of a function pointer in C.
I'm using neovim with deoplete.nvim and deoplete-clang (latest master HEAD)

Here are my options:

let g:deoplete#enable_at_startup=1
let g:deoplete#file#enable_buffer_path=1
let g:deoplete#disable_auto_complete=1
let g:deoplete#enable_refresh_always=0
let g:deoplete#max_list = 500
let g:deoplete#max_menu_width = 60
let g:deoplete#tag#cache_limit_size = 0
let g:deoplete#auto_complete_start_length = 999
let g:deoplete#ignore_sources = {}
let g:deoplete#ignore_sources._ = ['tag', 'dictionary', 'member', 'buffer', 'omni', 'around']
set completeopt+=noselect
set cpt-=t
set cpt+=i

I am getting the following behavior (this is an incomplete C code to give an example):

output

Please let me know if you need more information or if you suspect something is wrong on my local configuration.
Thank you.

Inserting into another function shows previous function signature

  1. Insert some parameters (or just enter and move around) to function A, a function echodoc can display the signature for. (The signature should display.)
  2. Leave insert mode. (The signature should disappear.)
  3. Insert into function B, a function that echodoc can't display the signature for.

It will display the function signature for function A rather than nothing.

This is with only deoplete, neco-vim, and echodoc.

Displays the selection index and the number of matches instead of the function type

I have confirmed that echodoc is enabled and noshowmode set. However, the messages show the number of matches and my selection therein (e.g., match 1 of 4), then does not display anything once I make a selection. Any ideas for what might be going on?

I'm using NVIM 0.2.2 Release.
deoplete and neco-ghc do a great job of displaying options
This error presents itself with and without ALE.

RuntimeError: still parsing the file, no completion yet

image

set encoding=utf-8
set fileencoding=utf-8
set nocompatible
set number
set relativenumber
syntax on
set termguicolors
let &t_8f="\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b="\<Esc>[48;2;%lu;%lu;%lum"
filetype indent on
set autoindent
set shiftwidth=2
set softtabstop=2

call plug#begin('~/.vim/plugged')
Plug 'morhetz/gruvbox'
Plug 'tpope/vim-rsi'
Plug 'Raimondi/delimitMate'
Plug 'Valloric/YouCompleteMe', { 'do': './install.py --clang-completer' }
Plug 'Shougo/echodoc.vim'
call plug#end()

set background=dark
colorscheme gruvbox
set laststatus=2
let airline_theme="gruvbox"
let airline_powerline_fonts=1

let ycm_global_ycm_extra_conf='/Users/inengch/.ycm_extra_conf.py'
let ycm_add_preview_to_completeopt=0
let ycm_show_diagnostics_ui=0
let ycm_server_log_level='info'
let ycm_min_num_identifier_candidate_chars=2
let ycm_collect_identifiers_from_comments_and_strings=1
let ycm_complete_in_strings=1
let ycm_key_invoke_completion='<c-z>'
set completeopt=menu,menuone
noremap <c-z> <NOP>
let ycm_semantic_triggers={
           \ 'c,cpp': ['re!\w{2}'],
           \ }

set noshowmode

Provide support for patching/cleaning signatures?

I'm using coc.nvim as my completion engine and it adds a configurable extra char at the end of menu items to indicate they come with snippets from language server.

recording

I had to apply this patch to echodoc.vim to clean up signature and remove my trailing magic wand char (nf-fa-magic from Nerd Fonts) from echodoc output.

I'm not sure what should be the best solution to this, maybe my local patch already is, but anyways, I'm sharing for ideas.

This was also discussed here: neoclide/coc.nvim#161 (comment).

echodoc output clobbered by next match

Deoplete echos something like "match 1 of 5" to the command line, which means that completing if the first argument of a function clobbers its docs. Is there a way to get echodoc to restore its output or prevent deoplete from echoing the match count?

Colors highlight (enhancement)

@Shougo When you will have time can you add variables to modify colors of function name and parameters? Because right now you hard coded them, so i needed to fork repo only for that.
Thank you.

problem with eclim

hey first when i use eclim with neocomplete i do have nothing

screenshot from 2015-07-29 14 02 51

but when it's from tag i have echodoc work

screenshot from 2015-07-29 14 03 11

this my echodocs config
screenshot from 2015-07-29 13 11 42

and neocomplete config :

screenshot from 2015-07-29 14 43 53

"E474: Attempt to decode a blank string"

I'm getting this error on <c-x><c-o> if I don't have a completion engine enabled (so <c-x><c-o> will not provide anything). It has actually shown up for me first time now while I was trying Go source code with vim-go alone (no coc.nvim). vim-go provides completion on <c-x><c-o> but errors show up after it due to echodoc.

Error detected while processing function <SNR>194__on_cursor_moved[10]..echodoc#default#make_cache[8]..echodoc#util#completion_signature:
line    8:
E474: Attempt to decode a blank string
Error detected while processing function <SNR>194__on_cursor_moved[10]..echodoc#default#make_cache[8]..echodoc#util#completion_signature:
line    8:
E474: Failed to parse 
Error detected while processing function <SNR>194__on_cursor_moved[10]..echodoc#default#make_cache[8]..echodoc#util#completion_signature:
line    8:

It there a way to get the lastly echoed text?

(I just want to ask a question about this repo and I don't know where to put it. If this is the wrong place, please let me know. Thanks)
I looked into the source code and didn't found such a function. Is it possible to add one so that the text can be used for other purpose such as text autocompletion?

echodoc not working with deoplete-jedi

Environment Information

  • OS: lubuntu 16.04 32 bit
  • Neovim version: 0.2.0

minimal init.vim

let g:python3_host_prog = '/usr/bin/python3'
let g:loaded_python_provider = 1

set rtp+=~/.config/nvim/plugged/deoplete.nvim/
set rtp+=~/.config/nvim/plugged/echodoc.vim/

let g:deoplete#enable_at_startup = 1
let g:echodoc#enable_at_sartup = 1
autocmd FileType python setlocal omnifunc=python3complete#Complete
autocmd CompleteDone * silent! pclose!

set noshowmode

Screenshot

screen

Don't open bracket.

Hello, don't is it deoplete issue or echodoc, so I just leave a link on gif.

Gif : https://imgur.com/a/SsNSW

if has('nvim')
   Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
   Plug 'Shougo/deoplete.nvim'
   Plug 'roxma/nvim-yarp'
   Plug 'roxma/vim-hug-neovim-rpc'
endif

Plug 'zchee/deoplete-jedi'
Plug 'Shougo/echodoc.vim'

let g:deoplete#enable_at_startup = 1
let g:deoplete#auto_complete_delay = 500
let g:deoplete#sources#jedi#show_call_signatures = 1
let g:echodoc#enable_at_startup = 1
let g:deoplete#sources#jedi#show_docstring = 1
set cmdheight=2

As you can see on gif, It don't open the bracket '(' when I choose variant and tap enter, so and docstring works only 1 of 4 times.

Thank you.

Issues with ocaml merlin + deoplete

I was trying to use echodoc with ocaml merlin deoplete but it doesn't seem to be printing the signatures at all.
From what I can tell from the code, this is probably because of the way ocaml signatures differ from something like vimscript.

Can you point to me a place where I can add a custom parser for ocaml and make it work with echodoc?

Thanks

How to show only function at bottom status line

I really want the the same way echodoc act in readme.md but preview windows keep pop-up and I don't know how to disable it.
I tried:

set previewheight=3
set winfixheight

set previewheight=0 doesn't work.

" echodoc settings
set noshowmode
let g:echodoc_enable_at_startup = 1
let g:echodoc_type = 'signature'

Can not make it work with nvim-typescript (deoplete)

Install the plugin it using dein.vim, have folling options conserning deoplete and

let g:deoplete#enable_at_startup = 1
let g:deoplete#enable_ignore_case = 1
let g:deoplete#auto_complete_start_length = 1
let g:auto_complete_start_length = 1

let g:echodoc_enable_at_startup=1

set splitbelow
set completeopt+=noselect
set completeopt-=preview

Also have:

set noshowmode

And using arline.vim

Deoplete completion works

What else should be done to start it work? I actually don't understand how echodock gets data what to display.

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.