Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integrate with existing tools #10

Closed
5 of 11 tasks
jdkato opened this issue Feb 18, 2017 · 23 comments
Closed
5 of 11 tasks

Integrate with existing tools #10

jdkato opened this issue Feb 18, 2017 · 23 comments

Comments

@jdkato
Copy link
Member

jdkato commented Feb 18, 2017

Editors + CLI tools

Other

The following would be nice to have, but will probably need to access Vale through an API of some sort (see languagetool-msword10-addin, for example).

  • Chrome + Firefox + Thunderbird
  • MS Word
  • WordPress
  • Slack
@TimKam
Copy link

TimKam commented Mar 18, 2017

Are you already working on an Atom plugin? If not, I could give it a try.

@jdkato
Copy link
Member Author

jdkato commented Mar 18, 2017

I haven't started working on it, so the help would be much appreciated.

Thanks!

EDIT: Also, let me know if there's anything I can do to help -- I know Vale's documentation is poor at the moment.

@TimKam
Copy link

TimKam commented Mar 23, 2017

Thanks. I plan to have a first version ready at the weekend.
I was wondering, though, if Vale can process text that is provided directly as an argument on the command line.
For example, vale --text="Lint this text" - or similar. This would make linting text on the fly more practicable.

@jdkato
Copy link
Member Author

jdkato commented Mar 23, 2017

No, this isn't currently supported. I'm not against adding this functionality, but I haven't decided on the best way to handle it yet.

Since Vale tries to be smart about syntax (e.g., ignoring code blocks), it'd either have to treat all text from --text as plain text or you'd need to specify the format (--text="Lint this text" --format="...", perhaps) since there's no file extension.

@TimKam
Copy link

TimKam commented Mar 26, 2017

Ok. Then it's linting on save for now, but I'm happy to make it on-the-fly linting once you implement this.
The first version of the Atom plugin is available at https://atom.io/packages/atomic-vale, respectively https://github.com/TimKam/atomic-vale.
I can transfer ownership, if you prefer.

@jdkato
Copy link
Member Author

jdkato commented Mar 26, 2017

Thanks—it looks great! I'll let you know once I've implemented support for on-the-fly linting (it should be reasonably soon).

As far as ownership goes, I'm fine with you keeping it. It's up to you, though.

@TimKam
Copy link

TimKam commented Mar 29, 2017

Ok, then I'll keep ownership for now.

@jdkato
Copy link
Member Author

jdkato commented Apr 2, 2017

I've implemented support input for stdin:

# Will be treated as plain text
$ vale 'This is some text to lint'
...
# Will be treated as Markdown
$ vale --ext='.md' 'This is some text to lint'
...
# Will be treated as plain text
$ echo 'this is more text' | vale
...

should all work now. I also have this working on a branch of the Sublime Text plugin (https://github.com/ValeLint/SubVale/blob/feat/buf/Vale.py#L53).

@chew-z
Copy link

chew-z commented Apr 29, 2017

I think vale should give other exit code then zero when there are some errors or warnings.

vale 'This is some some text to lint'
✔ 0 errors, 0 warnings and 0 suggestions in 1 file. 
vale 'This is very very text to lint'

 stdin.txt
 1:9   warning  Consider removing 'very'  vale.Editorializing
 1:14  warning  Consider removing 'very'  vale.Editorializing

✖ 0 errors, 2 warnings and 0 suggestions in 1 file.

Some other tools relay on non-zero (1) exit code to process the output further.

@jdkato
Copy link
Member Author

jdkato commented Apr 29, 2017

@chew-z: Vale should exit with (1) on errors already (for example, I'm using Vale to lint its own documentation on Travis CI and the build will fail on errors). I think this is reasonable default behavior as you'll likely want to ignore many warnings and you can always change the rule's level if not:

[*]
vale.Editorializing = error

That said, I'm open to making this more configurable. Would you want a setting to control which levels result in a non-zero exit code?

@chew-z
Copy link

chew-z commented Apr 29, 2017

Yes, I think it would be useful to have more control over non-zero exit.

What I have been trying to do in a very lazy way was integrating vale with vim through ale plugin. I have simply copied plugin for proselint which comes to calling external command on a copy of current file. This should be simple enough but I had no luck so far.

Called from internal shell vale returns nice warrnings just like proselint

:!vale --ext='.md' "%"

but proselint is also returning exit 1 and this is what triggers ale into action, I think. This is common convention in vim that it is passing quietly when exit code is zero.

I will digg into that more tomorrow.

@jdkato
Copy link
Member Author

jdkato commented Apr 29, 2017

After glancing at one of the implementations for proselint, I noticed that its callback (ale#handlers#unix#HandleAsWarning) expects Unix-style output. You may want to try passing the --output=line option to Vale, which will give the expected format:

$ vale --output=line /test/double.md
/test/double.md:2:13:vale.Repetition:'be' is repeated!

@chew-z
Copy link

chew-z commented Apr 29, 2017

There was a small, unrelated bug in ale which just had been fixed.

So now VIM+ale+vale is beautifully working for me with very minimal plugin in .../ale/ale_linters/markdown/vale.vim:

call ale#linter#Define('markdown', {
\   'name': 'vale',
\   'executable': 'vale',
\   'command': "vale --output=line %t",
\   'callback': 'ale#handlers#unix#HandleAsWarning',
\})

btw: what is option --ext='.md' good for?

@jdkato
Copy link
Member Author

jdkato commented Apr 29, 2017

Vale needs to know the format of a file so it can properly lint it (e.g., skip code blocks, etc.). This is normally done by inspecting the file extension, but there's no extension when input is given via stdin. So, you can optionally specify one with --ext (if omitted, Vale will treat input as .txt and apply no special logic).

@w0rp
Copy link

w0rp commented Apr 29, 2017

@chew-z With %t in ALE, the temporary filename created will use the same basename as a file you're editing, so it should be able to pick up the file extension from there.

@chew-z
Copy link

chew-z commented May 2, 2017

So my pull request has been accepted and glue for vale is now part of ale.

So it could be said that now vale is integrated also with VIM.

@jdkato
Copy link
Member Author

jdkato commented May 2, 2017

Thanks! I've updated the README.

@swsnr
Copy link

swsnr commented Jun 8, 2017

FYI, I wrote and published a VSCode extension. I'm sorry; I didn't realise you were already working on one, and I'm happy to deprecate my extension when the official one is ready.

@jdkato
Copy link
Member Author

jdkato commented Jun 8, 2017

@lunaryorn: Oh, that's okay! Mine is in pretty rough shape anyway, so I think I'll just defer to your work.

@swsnr
Copy link

swsnr commented Jun 8, 2017

@jdkato Thanks 😊

@ChrisChinchilla
Copy link
Contributor

@jdkato Can we reopen this, or track some of the other integration points elsewhere? I am working on some browser plugin ideas…

@ChrisChinchilla
Copy link
Contributor

One really useful step that I'm a bit stuck on is figuring out how to run vale on a remote host. I'm not too familiar with go to know the best and most cost-effective way of doing this though.

@jdkato jdkato mentioned this issue Dec 31, 2018
3 tasks
@jdkato
Copy link
Member Author

jdkato commented Dec 31, 2018

@ChrisChinchilla: Sure, I've created a new issue (#97) where we can discuss browser addons/plugins.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants