JCavallo / tryton-vim

Tools for developing tryton with vim
5 stars 0 forks source link

Tryton Vim plugin

tryton-vim is dedicated to helping developers using the tryton framework. The available features are :

Requirements

For complete functionalities, you will need the trytond debug module installed in your tryton installation, and the unite and deoplete plugins.

Nothing is mandatory, but some features will be missing if those module / plugins are not installed.

The plugin works better with Neovim, and functionalities like code completion will not work without it.

Installation

Just use your favorite plugin manager, and it should work properly.

Basic usage

Configuration

Base configuration :

let g:tryton_default_mappings = 1
let g:tryton_trytond_path = "$PROJECT_PATH/trytond"

Advanced configuration :

let g:tryton_cache_dir = expand('~/.cache/unite/tryton')
let g:tryton_server_host_name = 'localhost'
let g:tryton_server_port = '7999'
let g:tryton_server_login = 'admin'
let g:tryton_server_password = 'admin'
let g:tryton_server_database = 'ref'
let g:tryton_model_match = {
    \ 'party': 'party.party',
    \ 'invoice': 'account.invoice',
    \ 'move': 'account.move',
    \ 'user': 'res.user',
    \ }

Basically, the plugin needs to know where is tryton installed (to be able to jump between files easily). In an advanced configuration, in a local vimrc file, you may want to give some information about the tryton server you want to connect to for model browsing and completion. This part is optional, the plugin will ask you for these informations if it does not find them.

The g:tryton_cache_dir is used to locally store the model data to avoid asking the server everytime it is needed.

The g:tryton_model_match variable is used in the completion part to be able to automatically map a variable name to a model. There are more informations about these variables in the documentation.

Filetype

The plugin adds a secondary filetype for python / xml files which are detected to be part of a tryton installation. The detection is based on the contents of a file (look for "tryton[d]" in the file) and on its location (for xml files in a "view" folder under a directory which has a "tryton.cfg" file).

The filetypes are secondary, which means they comlpete the basic filetypes. So a trytond python file will have the python.trpy filetype. This means that it will be both considered a python file ans a trpy file.

trpy files have :

trxml files have some dedicated snippets, and can be configured to be validated against the .rng files if Syntastic is installed. If it is not, you can manually trigger the validation with the tryton#tools#ValidateXml method.

Model introspection

If the debug module is installed, the plugin can connect to a running trytond instance and request a dump of the modelisation of a database. It may take a few seconds, so it is cached. It can be reloaded the same way you usually reload a unite source.

Once the model is loaded, you can use the tryton_details unite source to browse the model:

Unite tryton_details

The source accept parameters, so for instance if you want to look at the different overrides of the party.party model, you may use:

Unite tryton_details:party.party/mro

The plugin also defines tryton#tools#get_current_model() and tryton#tools#get_current_method() which you can use to create useful mappings:

nnoremap <silent><Plug>(tryton-browse-current-function-mro)
    \ :<C-U>call unite#start_script([['tryton_details',
        \ tryton#tools#get_current_model() . '/' . 'methods' . '/' .
        \ tryton#tools#get_current_method() . '/' . 'mro']],
    \ {'start_insert': 0})<CR>

This will open the mro for the method you are currently working on.

The navigation in the tryton_details source is based on the go_down action defined on the unite source. By default, this action is mapped to <CR>. Going back in the tree is done through quitting the current unite window.

mro entries and view entries are openable, so you can have access to the standard open, split, etc... standard actions from unite.

Auto complete

If deoplete is installed, and a database model is loaded, vim will automatically propose auto-completion based on the model.

It detects the cls and self keywords to detect that the completion may be triggered, and uses the model to propose the associated fields or methods. It displays the field original module and their type. For methods there is the prototype (i.e. the default parameters) so you know what the method expects as parameters.

If a field is a relation field (Many2One), the completion will continue on the new model.

If self is an æccount.invoice, self.party. will trigger completion on the party.party model, and so on.

You can define the g:tryton_model_match method to map keywords to model, so vim can know which fields should be proposed:

let g:tryton_model_match = {
    \ 'party': 'party.party'
    \ }

With this configuration, writing party will trigger completion based on the party.party model whatever model you are working on at the moment.