Commit Graph

28 Commits

Author SHA1 Message Date
Arfon Smith
c8094d3775 Merge branch 'master' into 3227-local 2016-09-21 20:26:51 -07:00
Alhadis
697380336c Revise pattern for Emacs modeline detection
This is a rewrite of the regex that handles Emacs modeline matching. The
current one is a little flaky, causing some files to be misclassified as
"E", among other things.

It's worth noting malformed modelines can still change a file's language
in Emacs. Provided the -*- delimiters are intact, and the mode's name is
decipherable, Emacs will set the appropriate language mode *and* display
a warning about a malformed modeline:

    -*- foo-bar mode: ruby -*-   # Malformed, but understandable
            -*- mode: ruby--*-   # Completely invalid

The new pattern accommodates this leniency, making no effort to validate
a modeline's syntax beyond readable mode-names. In other words, if Emacs
accepts certain errors, we should too.
2016-09-17 19:45:43 +10:00
Alhadis
e73a4ecd0e Allow " ex:" to match at beginning of file
Although unlikely to be valid syntax in most programming languages, such
a modeline is valid syntax in Vim, and will trigger any filetype modes.
2016-09-12 19:59:08 +10:00
Alhadis
22d4865c52 Revise patterns for Vim modeline detection
The current expressions fail to match certain permutations of options:

    vim: noexpandtab: ft=javascript:
    vim: titlestring=foo\ ft=notperl ft=javascript:

Version-specific modelines are also unaccounted for:

    vim600: set foldmethod=marker ft=javascript:   # >= Vim 6.0
    vim<600: set ft=javascript:                    # <  Vim 6.0

See http://vimdoc.sourceforge.net/htmldoc/options.html#modeline
2016-09-11 00:51:03 +10:00
Paul Chaignon
5c19f1f546 Limit scope of modeline search (#2967)
Only matches the first and last 5 lines against the modeline regular expressions
2016-05-05 09:33:40 -06:00
Arfon Smith
8de50edb41 ruby for example 2016-02-12 17:05:44 -07:00
chrisarcand
d87fad649c Improved vim modeline detection
TLDR: This greatly increases the flexibility of vim modeline detection
to manually set the language of a file.

In vim there are two forms of modelines:

[text]{white}{vi:|vim:|ex:}[white]{options}
examples: 'vim: syntax=perl', 'ex: filetype=ruby'

-and-

[text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]
examples: 'vim set syntax=perl:', 'Vim: se ft=ruby:'

As you can see, there are many combinations. These changes should allow
most combinations to be used. The two most important additions are the
use of the keyword 'syntax', as well as the addition of the first form
(you now no longer need to use the keyword 'set' with a colon at the end).
The use of first form with 'syntax' is very, very common across GitHub:

https://github.com/search?l=ruby&q=vim%3A+syntax%3D&ref=searchresults&type=Code&utf8=%E2%9C%93
2016-01-16 08:57:20 -05:00
Ammar Askar
4650368bc2 Make regex for vim modeline more lenient
This change allows the filetype/language to be retrieved from more complex vim modelines. The current regex strictly allows a set line which contains only the filetype/ft parameter and nothing else
2015-08-10 00:42:14 -05:00
Arfon Smith
7e32b45aa8 Removing whitespace matching 2015-05-13 08:31:45 -05:00
Arfon Smith
2fac182a90 Improving Vim modeline regex 2015-05-12 16:49:14 -05:00
michael tesch
ce1f51a34f forgot a | 2015-03-15 12:51:14 +01:00
michael tesch
5fd7992f98 dont save useless matches, thanks to pchaigno 2015-03-15 12:40:31 +01:00
michael tesch
6aab682728 fixed case with multiple other file vars before and after mode: 2015-03-14 23:24:41 +01:00
Michael Tesch
068c8a341d better regex for matching emacs modeline
the emacs modeline is actually a per-file variable setting mechanism, which means it can have other flags in it.

this regex extracts the part that corresponds to the file's language ("mode:" - ie emacs major mode)

http://ergoemacs.org/emacs_manual/emacs/Specifying-File-Variables.html
2015-03-14 18:35:57 +01:00
Arfon Smith
201b0ba53c Making modelines case-insensitive 2015-02-06 08:41:37 -06:00
Lars Brinkhoff
2077fa3837 'Text' doesn't qualify as a valid modeline language. 2015-02-04 08:20:19 +01:00
Brandon Keepers
4f92d620eb Simplify detect 2015-01-29 16:28:54 -06:00
Brandon Keepers
e7f5779659 Break modelines into two regular expressions
This makes them easier to read and maintains Ruby 1.9 compatibility
2015-01-29 16:28:54 -06:00
Brandon Keepers
437ba70b9e Find modeline anywhere in the data 2015-01-29 13:14:06 -06:00
Brandon Keepers
fadca563bc Move regex to a constant 2015-01-29 13:09:12 -06:00
Brandon Keepers
7a601b196e Fix regex syntax 2015-01-29 13:07:18 -06:00
Arfon Smith
bf6bd246fd Syntax tweak 2015-01-28 16:52:26 -06:00
Arfon Smith
96154627d3 Clearer regex 2015-01-27 09:42:24 -06:00
Arfon Smith
20a3e7e4b8 Update docs 2015-01-26 16:12:20 -06:00
Arfon Smith
98fc4d78aa Slightly reworked regex. 2015-01-26 15:37:45 -06:00
Arfon Smith
d773c2e90d Escape the * 2015-01-26 15:18:40 -06:00
Arfon Smith
7929e7ab9c Adding Emacs modes 2015-01-26 15:11:55 -06:00
Arfon Smith
e536eea5b6 Basic Vim modeline detection strategy 2015-01-26 14:22:09 -06:00