glynnforrest / salt-mode

Emacs major mode for Salt States
GNU General Public License v3.0
22 stars 4 forks source link

Feature Request company-mode completion #17

Open ghost opened 6 years ago

ghost commented 6 years ago

I really like where this is headed.. I would like to have the completion using company-mode in spacemacs. I will dive in and help if I can.. I'm new to lisp elisp.. I'm going to dig into getting this working.. If you have any tips or pointers that would help, it would be appreciated ..

Marty

glynnforrest commented 6 years ago

I agree @MBuchaus, company-mode completion would be a great addition. I've been hoping to get started with this for a while but haven't had the time. Please, go ahead if you feel so inclined!

See this wiki page for some tips on writing a company-mode backend. Alternatively, you may want to consider creating a completion-at-point function instead and using company's built-in CAPF backend too.

It would be awesome if you could add some tests for the backend. Don't worry if you're not sure, I can help you 👍

Let me know if you have any questions or need any help.

ghost commented 6 years ago

I will do what I can.. I want to learn this, thanks for the feedback.

max-arnold commented 5 years ago

With a little bit of python intronspection (for ideas see https://github.com/gtmanfred/salint) this could be very useful

glynnforrest commented 5 years ago

@max-arnold what's the first thing you'd like to have completion for?

I think adding something small will be more achievable to begin with.

max-arnold commented 5 years ago

I see four broad categories for possible autocompletion helpers:

  1. Salt state modules (module/function names, arguments)
  2. User state trees (state path/id autocompletion for include, extend, require, watch, onchanges etc)
  3. Yaml keywords which have special meaning in salt (name, include, extend, require, watch, onchanges, onfail, prereq, use, listen and their *_in and *_any counterparts, runas, runas_password, fire_event, reload_*, unless, onlyif, check_cmd, retry, order). Basically, everything defined in salt.state.STATE_INTERNAL_KEYWORDS.
  4. Basic Jinja syntax, plus maybe the helpers defined in salt.utils.jinja.py

So far the (3) seems to be easiest to start with, and (1) looks most useful.

As a side note, the Salt plugin for Sublime partially covers (1) and (4): https://github.com/saltstack/sublime-text/tree/master/Snippets

max-arnold commented 4 years ago

The new baredoc module in the upcoming Salt 3001 Sodium release can dump all the state/execution module functions. VSCode SaltStack plugin already uses it to provide the most comprehensive state autocompletion feature:

https://github.com/korekontrol/vscode-saltstack/pull/6/ https://github.com/korekontrol/vscode-saltstack/pull/8/

glynnforrest commented 4 years ago

Interesting, thanks @max-arnold!

Do you have an opinion on the VSCode approach (generating and storing json files) vs the salt-mode approach (calling a python script and loading the definitions into memory)?

max-arnold commented 4 years ago

VSCode approach pros:

Cons:

I guess it is easier to keep the existing approach in salt-mode and call the baredoc module directly (it can parse any salt module even if it doesn't have all the necessary dependencies installed).