Commit Graph

38 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
Brandon Keepers 8a42f76f03 Remove .script! hack 2015-04-17 14:09:05 +12: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
Brandon Keepers fd85f7f112 consolidate shebang logic 2014-11-27 12:18:23 -05:00
Brandon Keepers bf4baff363 Move call method into existing Classifier class 2014-11-27 11:29:38 -05:00
Brandon Keepers c1a9737313 Try strategies until one language is returned 2014-11-27 11:12:47 -05:00
Brandon Keepers a4081498f8 Remove unneded empty blob check 2014-11-27 10:55:03 -05:00
Brandon Keepers 9efd923382 Merge remote-tracking branch 'origin/master' into strategies
* origin/master: (165 commits)
  Add F# and GLSL samples.  Add Forth and GLSL extension .fs. Add heuristic to disambiguate between F#, Forth, and GLSL.
  byebug requires ruby 2.0
  Remove test for removed extension
  Fix typo in test
  add rake interpreter
  add python3 interpreter
  Remove old wrong_shebang.rb sample
  Add byebug
  Link to Lightshow in CONTRIBUTING.md
  Switch to a better F# grammar
  Bump Rugged again
  Checkout the master for testing
  Rugged 0.22.0b3
  Reordering
  Bump version to 4.0.3
  Add some docs for tm_scope
  Change NONE to none
  Checking other case for Chart.jS
  Test that all languages have grammars
  Fix RHTML's tm_scope
  ...

Conflicts:
	lib/linguist/language.rb
2014-11-27 10:52:44 -05:00
Brandon Keepers 74fa4b9b75 docs 2014-11-03 08:54:11 -05:00
Brandon Keepers 815337299a Extract empty blob strategy 2014-11-03 08:21:46 -05:00
Brandon Keepers fd32938cd8 Extract strategies for detecting the language 2014-11-03 08:17:02 -05:00
Brandon Keepers 8d7b4f81b4 Extract filename strategy 2014-11-02 22:15:52 -05:00