├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── SECURITY.md ├── language-detect.js ├── package.json ├── scripts └── build ├── test ├── fixtures │ ├── Cakefile │ │ └── .gitkeep │ ├── Gemfile │ ├── bar.h │ ├── build │ ├── obscure │ └── unknown_shebang └── index.js └── vendor ├── aliases.json ├── extensions.json ├── filenames.json └── interpreters.json /.gitignore: -------------------------------------------------------------------------------- 1 | coverage 2 | node_modules 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | notifications: 4 | email: 5 | on_success: never 6 | on_failure: change 7 | 8 | node_js: 9 | - "0.10" 10 | 11 | after_script: "npm install coveralls@2 && cat ./coverage/lcov.info | coveralls" 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Language Detect 2 | 3 | [![NPM version][npm-image]][npm-url] 4 | [![NPM downloads][downloads-image]][downloads-url] 5 | [![Build status][travis-image]][travis-url] 6 | [![Test coverage][coveralls-image]][coveralls-url] 7 | [![Greenkeeper badge](https://badges.greenkeeper.io/blakeembrey/node-language-detect.svg)](https://greenkeeper.io/) 8 | 9 | Detect the programming language of any file by checking the file name, file extension, file shebang and falling back to a programming language classifier. For more language information, it should be used in conjunction with [language-map](https://github.com/blakeembrey/language-map). 10 | 11 | ## Installation 12 | 13 | ``` 14 | npm install language-detect --save 15 | ``` 16 | 17 | ## Usage 18 | 19 | ```javascript 20 | var detect = require('language-detect'); 21 | ``` 22 | 23 | ### Asynchronously From a File 24 | 25 | ```javascript 26 | detect(__dirname + '/test.js', function (err, language) { 27 | console.log(err); //=> null 28 | console.log(language); //=> "JavaScript" 29 | }); 30 | ``` 31 | 32 | ### Synchronously From a File 33 | 34 | ```javascript 35 | detect.sync(__dirname + '/test.js'); //=> "JavaScript" 36 | ``` 37 | 38 | ### From The Filename and Contents 39 | 40 | ```javascript 41 | detect.contents(__dirname + '/test.js', 'var test = true;\n'); //=> "JavaScript" 42 | ``` 43 | 44 | ### From Only a Filename 45 | 46 | ```javascript 47 | detect.filename(__dirname + '/test.js'); //=> "JavaScript" 48 | ``` 49 | 50 | ### Check for Shebang 51 | 52 | ```javascript 53 | detect.shebang('#!/usr/bin/env node\n...'); //=> "JavaScript" 54 | ``` 55 | 56 | ### Run Classification 57 | 58 | Uses [language-classifier](https://github.com/tj/node-language-classifier) which can only detect a small subset of languages. 59 | 60 | ```javascript 61 | detect.classify('.test { color: red; }') 62 | ``` 63 | 64 | ### Other Properties 65 | 66 | * **detect.aliases** A map of known aliases 67 | * **detect.interpreters** A map of known interpreters 68 | * **detect.extensions** A map of known file extensions 69 | * **detect.filenames** A map of known file names 70 | 71 | ## License 72 | 73 | MIT 74 | 75 | [npm-image]: https://img.shields.io/npm/v/language-detect.svg?style=flat 76 | [npm-url]: https://npmjs.org/package/language-detect 77 | [downloads-image]: https://img.shields.io/npm/dm/language-detect.svg?style=flat 78 | [downloads-url]: https://npmjs.org/package/language-detect 79 | [travis-image]: https://img.shields.io/travis/blakeembrey/node-language-detect.svg?style=flat 80 | [travis-url]: https://travis-ci.org/blakeembrey/node-language-detect 81 | [coveralls-image]: https://img.shields.io/coveralls/blakeembrey/node-language-detect.svg?style=flat 82 | [coveralls-url]: https://coveralls.io/r/blakeembrey/node-language-detect?branch=master 83 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Security contact information 4 | 5 | To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. 6 | -------------------------------------------------------------------------------- /language-detect.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | var path = require('path'); 3 | var classify = require('language-classifier'); 4 | 5 | /** 6 | * Map classification language names to mapped language names. 7 | * 8 | * @type {Object} 9 | */ 10 | var classifyMap = { 11 | 'ruby': 'Ruby', 12 | 'python': 'Python', 13 | 'javascript': 'JavaScript', 14 | 'objective-c': 'Objective-C', 15 | 'html': 'HTML', 16 | 'css': 'CSS', 17 | 'shell': 'Shell', 18 | 'c++': 'C++', 19 | 'c': 'C', 20 | 'coffee-script': 'CoffeeScript' 21 | }; 22 | 23 | /** 24 | * Return the programming language of a given filename. 25 | * 26 | * @param {String} filename 27 | * @param {Function} done 28 | */ 29 | exports = module.exports = function (filename, done) { 30 | fs.stat(filename, function (err, stats) { 31 | if (err) { 32 | return done(err); 33 | } 34 | 35 | if (!stats.isFile()) { 36 | return done(new Error('Should only detect files: ' + filename)); 37 | } 38 | 39 | // Do the simplest synchronous test based on filenames first. 40 | var fileDetected = exports.filename(filename); 41 | 42 | if (fileDetected) { 43 | return done(null, fileDetected); 44 | } 45 | 46 | var languages = {}; 47 | var shebang = ''; 48 | var firstChunk = true; 49 | var hasShebang = false; 50 | var shebangDetected; 51 | 52 | // Open a file read stream. This should be the simplest way to do 53 | // dynamic language detection while the stream is running. 54 | var stream = fs.createReadStream(filename); 55 | 56 | // Call `done` with the error when something breaks. 57 | stream.on('error', done); 58 | 59 | stream.on('data', function (data) { 60 | var chunk = data.toString(); 61 | 62 | // If it's the first chunk we want to 63 | if (firstChunk) { 64 | chunk = chunk.replace(/^ +/, ''); 65 | 66 | // If we have at least two characters left in the chunk, we can assume 67 | // enough of the first chunk has been received to test the shebang. 68 | if (chunk.length > 1) { 69 | firstChunk = false; 70 | 71 | // If we have a shebang, we need to special case the stream until 72 | // the first new line. 73 | if (chunk.substr(0, 2) === '#!') { 74 | hasShebang = true; 75 | } 76 | } 77 | } 78 | 79 | // While we have the shebang line, concat each chunk together for testing. 80 | if (hasShebang) { 81 | shebang += chunk; 82 | 83 | // On the first new line, test the shebang and attempt to close the 84 | // stream early. 85 | if (/\r?\n/.test(shebang)) { 86 | hasShebang = false; 87 | shebangDetected = exports.shebang(shebang); 88 | 89 | if (shebangDetected) { 90 | return stream.close(); 91 | } 92 | } 93 | } 94 | 95 | // If the shebang doesn't exist, fall back to language classification. 96 | var classified = exports.classify(chunk); 97 | 98 | if (classified) { 99 | (languages[classified]++ || (languages[classified] = 1)); 100 | } 101 | }); 102 | 103 | stream.on('close', function () { 104 | // We can short-circuit if the shebang was detected. 105 | if (shebangDetected) { 106 | return done(null, shebangDetected); 107 | } 108 | 109 | // No languages were detected in the entire file. 110 | if (!Object.keys(languages).length) { 111 | return done(); 112 | } 113 | 114 | // Get the most popular language from language detection. 115 | var popular = Object.keys(languages).reduce(function (highest, language) { 116 | return languages[highest] > languages[language] ? highest : language; 117 | }); 118 | 119 | return done(null, popular); 120 | }); 121 | }); 122 | }; 123 | 124 | /** 125 | * Export useful direct aliases. 126 | * 127 | * @type {Object} 128 | */ 129 | exports.aliases = require('./vendor/aliases.json'); 130 | exports.filenames = require('./vendor/filenames.json'); 131 | exports.extensions = require('./vendor/extensions.json'); 132 | exports.interpreters = require('./vendor/interpreters.json'); 133 | 134 | /** 135 | * Detect file language synchronously. 136 | * 137 | * @param {String} filename 138 | * @return {String} 139 | */ 140 | exports.sync = function (filename) { 141 | if (!fs.statSync(filename).isFile()) { 142 | throw new Error('Should only detect files: ' + filename); 143 | } 144 | 145 | return ( 146 | exports.filename(filename) || 147 | exports.contents(path, fs.readFileSync(filename)) 148 | ); 149 | } 150 | 151 | /** 152 | * Check against the contents of a file synchronously. 153 | 154 | * @param {String} filename 155 | * @param {String} contents 156 | * @return {String} 157 | */ 158 | exports.contents = function (filename, contents) { 159 | return ( 160 | exports.filename(filename) || 161 | exports.shebang(contents) || 162 | exports.classify(contents) 163 | ); 164 | }; 165 | 166 | /** 167 | * Attempt to get the language based on a filename. 168 | * 169 | * @param {String} filename 170 | * @return {String} 171 | */ 172 | exports.filename = function (filename) { 173 | var basename = path.basename(filename); 174 | 175 | // The filename was detected. 176 | if (typeof exports.filenames[basename] === 'string') { 177 | return exports.filenames[basename]; 178 | } 179 | 180 | var extension = (path.extname(basename) || '').toLowerCase(); 181 | 182 | // The extension was recognised. 183 | if (typeof exports.extensions[extension] === 'string') { 184 | return exports.extensions[extension]; 185 | } 186 | }; 187 | 188 | /** 189 | * Return the language from a shebang definition. 190 | * 191 | * @param {String} contents 192 | * @return {String} 193 | */ 194 | exports.shebang = function (contents) { 195 | // Coerece to a string (in case of Buffer) and replace preceding whitespace. 196 | var file = contents.toString().replace(/^\s*/, ''); 197 | 198 | // Return early if it doesn't start with a shebang. 199 | if (file.substr(0, 2) !== '#!') { 200 | return; 201 | } 202 | 203 | var bang = file.split(/\r?\n/g)[0]; 204 | var tokens = bang.replace(/^#! +/, '#!').split(' '); 205 | var pieces = tokens[0].split('/'); 206 | var script = pieces[pieces.length - 1]; 207 | 208 | if (script === 'env') { 209 | script = tokens[1]; 210 | } 211 | 212 | // "python2.6" -> "python" 213 | script = script.replace(/(?:\d+\.?)+$/, ''); 214 | 215 | return exports.interpreters[script] || exports.aliases[script]; 216 | }; 217 | 218 | /** 219 | * Attempt to classify the file contents. 220 | * 221 | * @param {String} contents 222 | * @return {String} 223 | */ 224 | exports.classify = function (contents) { 225 | return classifyMap[classify(contents.toString())]; 226 | }; 227 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "language-detect", 3 | "version": "1.1.0", 4 | "description": "Detect the programming language of any file.", 5 | "main": "language-detect.js", 6 | "scripts": { 7 | "test": "npm run-script prepublish && istanbul cover _mocha -- -R spec", 8 | "build": "node scripts/build", 9 | "prepublish": "npm run build" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git://github.com/blakeembrey/node-language-detect.git" 14 | }, 15 | "keywords": [ 16 | "language", 17 | "detect", 18 | "classify", 19 | "file" 20 | ], 21 | "author": { 22 | "name": "Blake Embrey", 23 | "email": "hello@blakeembrey.com", 24 | "url": "http://blakeembrey.me" 25 | }, 26 | "license": "MIT", 27 | "bugs": { 28 | "url": "https://github.com/blakeembrey/node-language-detect/issues" 29 | }, 30 | "homepage": "https://github.com/blakeembrey/node-language-detect", 31 | "dependencies": { 32 | "language-classifier": "0.0.1" 33 | }, 34 | "devDependencies": { 35 | "istanbul": "^0.4.0", 36 | "language-map": "^1.0.0", 37 | "mocha": "^3.3.0" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /scripts/build: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var fs = require('fs'); 4 | var map = require('language-map'); 5 | var path = require('path'); 6 | 7 | /** 8 | * Data stores. 9 | */ 10 | var aliases = {}; 11 | var filenames = {}; 12 | var extensions = {}; 13 | var interpreters = {}; 14 | 15 | /** 16 | * Writable paths. 17 | */ 18 | var VENDOR_DIR = path.join(__dirname, '..', 'vendor'); 19 | var ALIAS_PATH = path.join(VENDOR_DIR, 'aliases.json'); 20 | var FILENAME_PATH = path.join(VENDOR_DIR, 'filenames.json'); 21 | var EXTENSION_PATH = path.join(VENDOR_DIR, 'extensions.json'); 22 | var INTERPRETER_PATH = path.join(VENDOR_DIR, 'interpreters.json'); 23 | 24 | /** 25 | * Add a key definition based on the current `this` context. 26 | * 27 | * @param {String} language 28 | * @param {String} definition 29 | */ 30 | var addDefinition = function (language, definition) { 31 | this[definition] = language; 32 | }; 33 | 34 | /** 35 | * Iterate over every language extracting the relevant meta data. 36 | */ 37 | Object.keys(map).forEach(function (language) { 38 | var definition = map[language]; 39 | 40 | if (definition.extensions) { 41 | definition.extensions 42 | .map(Function.prototype.call, String.prototype.toLowerCase) 43 | .forEach(addDefinition.bind(extensions, language)); 44 | } 45 | 46 | if (definition.aliases) { 47 | definition.aliases.forEach(addDefinition.bind(aliases, language)); 48 | } 49 | 50 | if (definition.filenames) { 51 | definition.filenames.forEach(addDefinition.bind(filenames, language)); 52 | } 53 | 54 | if (definition.interpreters) { 55 | definition.interpreters.forEach(addDefinition.bind(interpreters, language)); 56 | } 57 | }); 58 | 59 | /** 60 | * Write the data to disk as JSON. 61 | */ 62 | fs.writeFileSync(ALIAS_PATH, JSON.stringify(aliases, null, 2)); 63 | fs.writeFileSync(FILENAME_PATH, JSON.stringify(filenames, null, 2)); 64 | fs.writeFileSync(EXTENSION_PATH, JSON.stringify(extensions, null, 2)); 65 | fs.writeFileSync(INTERPRETER_PATH, JSON.stringify(interpreters, null, 2)); 66 | -------------------------------------------------------------------------------- /test/fixtures/Cakefile/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blakeembrey/node-language-detect/c8a3e253dbefff155d386165d0809524aa7ff092/test/fixtures/Cakefile/.gitkeep -------------------------------------------------------------------------------- /test/fixtures/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gemspec 3 | 4 | if RUBY_VERSION < "1.9.3" 5 | # escape_utils 1.0.0 requires 1.9.3 and above 6 | gem "escape_utils", "0.3.2" 7 | end 8 | -------------------------------------------------------------------------------- /test/fixtures/bar.h: -------------------------------------------------------------------------------- 1 | class Bar 2 | { 3 | protected: 4 | 5 | char *name; 6 | 7 | public: 8 | 9 | void hello(); 10 | } 11 | -------------------------------------------------------------------------------- /test/fixtures/build: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var fs = require('fs'); 4 | -------------------------------------------------------------------------------- /test/fixtures/obscure: -------------------------------------------------------------------------------- 1 | body { 2 | background: black; 3 | color: white 4 | } 5 | -------------------------------------------------------------------------------- /test/fixtures/unknown_shebang: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env unknown 2 | 3 | composure_keywords () 4 | { 5 | echo "about author example group param version" 6 | } 7 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | var assert = require('assert'); 2 | var fs = require('fs'); 3 | var join = require('path').join; 4 | var detect = require('../'); 5 | 6 | describe('language detect', function () { 7 | it('should allow synchronous filename detection', function () { 8 | assert.equal(detect.filename('unknown'), null); 9 | assert.equal(detect.filename('test.js'), 'JavaScript'); 10 | assert.equal(detect.filename('test.cpp'), 'C++'); 11 | }); 12 | 13 | it('should allow synchronous shebang detection', function () { 14 | assert.equal(detect.shebang(''), null); 15 | assert.equal(detect.shebang('#!/usr/bin/env make'), 'Makefile'); 16 | assert.equal(detect.shebang('#!/usr/bin/sbcl --script'), 'Common Lisp'); 17 | assert.equal(detect.shebang('#!/usr/bin/python2.6'), 'Python'); 18 | }); 19 | 20 | it('should allow synchronous language classification', function () { 21 | assert.equal(detect.classify('for link in links:'), 'Python'); 22 | }); 23 | 24 | it('should error when the file doesn\'t exist', function (done) { 25 | detect('/where/art/thou/romeo', function (err) { 26 | assert.ok(err); 27 | 28 | return done(); 29 | }); 30 | }); 31 | 32 | it('should error when checking a directory', function (done) { 33 | detect(__dirname + '/fixtures/Cakefile', function (err) { 34 | assert.ok(err); 35 | 36 | return done(); 37 | }) 38 | }); 39 | 40 | function test (name, path, language) { 41 | describe(name, function () { 42 | it('should detect', function (done) { 43 | detect(path, function (err, result) { 44 | assert.equal(result, language); 45 | 46 | return done(err); 47 | }); 48 | }); 49 | 50 | it('should work synchronously', function () { 51 | var result = detect.sync(path); 52 | 53 | assert.equal(result, language); 54 | }); 55 | 56 | it('should work on contents', function () { 57 | var result = detect.contents(path, fs.readFileSync(path, 'utf8')); 58 | 59 | assert.equal(result, language); 60 | }); 61 | }); 62 | } 63 | 64 | test('file name detection', join(__dirname, 'fixtures/Gemfile'), 'Ruby'); 65 | test('file extension detection', join(__dirname, 'fixtures/bar.h'), 'Objective-C'); 66 | test('shebang detection', join(__dirname, 'fixtures/build'), 'JavaScript'); 67 | test('language classification', join(__dirname, 'fixtures/obscure'), 'CSS'); 68 | 69 | describe('additional tests', function () { 70 | it('shebang detect should fallback', function (done) { 71 | detect(join(__dirname, 'fixtures/bar.h'), function (err, language) { 72 | assert.equal(language, 'Objective-C'); 73 | 74 | return done(err); 75 | }); 76 | }); 77 | 78 | it('should work with object property name', function () { 79 | var result = detect.filename('constructor'); 80 | 81 | assert.equal(result, undefined); 82 | }); 83 | }); 84 | }); 85 | -------------------------------------------------------------------------------- /vendor/aliases.json: -------------------------------------------------------------------------------- 1 | { 2 | "ags": "AGS Script", 3 | "aspx": "ASP", 4 | "aspx-vb": "ASP", 5 | "ats2": "ATS", 6 | "actionscript 3": "ActionScript", 7 | "actionscript3": "ActionScript", 8 | "as3": "ActionScript", 9 | "ada95": "Ada", 10 | "ada2005": "Ada", 11 | "aconf": "ApacheConf", 12 | "apache": "ApacheConf", 13 | "osascript": "AppleScript", 14 | "nasm": "Assembly", 15 | "ahk": "AutoHotkey", 16 | "au3": "AutoIt", 17 | "AutoIt3": "AutoIt", 18 | "AutoItScript": "AutoIt", 19 | "bat": "Batchfile", 20 | "batch": "Batchfile", 21 | "dosbatch": "Batchfile", 22 | "winbatch": "Batchfile", 23 | "b3d": "BlitzBasic", 24 | "blitz3d": "BlitzBasic", 25 | "blitzplus": "BlitzBasic", 26 | "bplus": "BlitzBasic", 27 | "bmax": "BlitzMax", 28 | "csharp": "C#", 29 | "cpp": "C++", 30 | "c2hs": "C2hs Haskell", 31 | "Carto": "CartoCSS", 32 | "chpl": "Chapel", 33 | "coffee": "CoffeeScript", 34 | "coffee-script": "CoffeeScript", 35 | "cfm": "ColdFusion", 36 | "cfml": "ColdFusion", 37 | "coldfusion html": "ColdFusion", 38 | "cfc": "ColdFusion CFC", 39 | "lisp": "Common Lisp", 40 | "delphi": "Component Pascal", 41 | "objectpascal": "Component Pascal", 42 | "c++-objdumb": "Cpp-ObjDump", 43 | "gherkin": "Cucumber", 44 | "pyrex": "Cython", 45 | "dcl": "DIGITAL Command Language", 46 | "byond": "DM", 47 | "dtrace-script": "DTrace", 48 | "dpatch": "Darcs Patch", 49 | "udiff": "Diff", 50 | "elisp": "Emacs Lisp", 51 | "emacs": "Emacs Lisp", 52 | "fsharp": "F#", 53 | "xml+genshi": "Genshi", 54 | "xml+kid": "Genshi", 55 | "pot": "Gettext Catalog", 56 | "gf": "Grammatical Framework", 57 | "nroff": "Groff", 58 | "gsp": "Groovy Server Pages", 59 | "java server page": "Groovy Server Pages", 60 | "xhtml": "HTML", 61 | "html+django/jinja": "HTML+Django", 62 | "html+jinja": "HTML+Django", 63 | "htmldjango": "HTML+Django", 64 | "erb": "HTML+ERB", 65 | "hbs": "Handlebars", 66 | "htmlbars": "Handlebars", 67 | "hylang": "Hy", 68 | "igor": "IGOR Pro", 69 | "igorpro": "IGOR Pro", 70 | "dosini": "INI", 71 | "irc": "IRC log", 72 | "irc logs": "IRC log", 73 | "i7": "Inform 7", 74 | "inform7": "Inform 7", 75 | "jsp": "Java Server Pages", 76 | "js": "JavaScript", 77 | "node": "JavaScript", 78 | "lassoscript": "Lasso", 79 | "flex": "Lex", 80 | "litcoffee": "Literate CoffeeScript", 81 | "lhaskell": "Literate Haskell", 82 | "lhs": "Literate Haskell", 83 | "live-script": "LiveScript", 84 | "ls": "LiveScript", 85 | "mumps": "M", 86 | "bsdmake": "Makefile", 87 | "make": "Makefile", 88 | "mf": "Makefile", 89 | "mma": "Mathematica", 90 | "max/msp": "Max", 91 | "maxmsp": "Max", 92 | "nginx configuration file": "Nginx", 93 | "nixos": "Nix", 94 | "nush": "Nu", 95 | "obj-c": "Objective-C", 96 | "objc": "Objective-C", 97 | "objectivec": "Objective-C", 98 | "obj-c++": "Objective-C++", 99 | "objc++": "Objective-C++", 100 | "objectivec++": "Objective-C++", 101 | "obj-j": "Objective-J", 102 | "objectivej": "Objective-J", 103 | "objj": "Objective-J", 104 | "progress": "OpenEdge ABL", 105 | "openedge": "OpenEdge ABL", 106 | "abl": "OpenEdge ABL", 107 | "inc": "PHP", 108 | "pasm": "Parrot Assembly", 109 | "pir": "Parrot Internal Representation", 110 | "postscr": "PostScript", 111 | "posh": "PowerShell", 112 | "protobuf": "Protocol Buffer", 113 | "Protocol Buffers": "Protocol Buffer", 114 | "rusthon": "Python", 115 | "R": "R", 116 | "Rscript": "R", 117 | "splus": "R", 118 | "html+ruby": "RHTML", 119 | "ragel-rb": "Ragel in Ruby Host", 120 | "ragel-ruby": "Ragel in Ruby Host", 121 | "raw": "Raw token data", 122 | "red/system": "Red", 123 | "jruby": "Ruby", 124 | "macruby": "Ruby", 125 | "rake": "Ruby", 126 | "rb": "Ruby", 127 | "rbx": "Ruby", 128 | "saltstate": "SaltStack", 129 | "salt": "SaltStack", 130 | "sh": "Shell", 131 | "bash": "Shell", 132 | "zsh": "Shell", 133 | "bash session": "ShellSession", 134 | "console": "ShellSession", 135 | "squeak": "Smalltalk", 136 | "sourcemod": "SourcePawn", 137 | "sml": "Standard ML", 138 | "latex": "TeX", 139 | "fundamental": "Text", 140 | "ts": "TypeScript", 141 | "vim": "VimL", 142 | "nvim": "VimL", 143 | "vb.net": "Visual Basic", 144 | "vbnet": "Visual Basic", 145 | "rss": "XML", 146 | "xsd": "XML", 147 | "wsdl": "XML", 148 | "xsl": "XSLT", 149 | "yml": "YAML", 150 | "rst": "reStructuredText", 151 | "advpl": "xBase", 152 | "clipper": "xBase", 153 | "foxpro": "xBase" 154 | } -------------------------------------------------------------------------------- /vendor/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | ".abap": "ABAP", 3 | ".asc": "Public Key", 4 | ".ash": "AGS Script", 5 | ".ampl": "AMPL", 6 | ".mod": "XML", 7 | ".g4": "ANTLR", 8 | ".apib": "API Blueprint", 9 | ".apl": "APL", 10 | ".dyalog": "APL", 11 | ".asp": "ASP", 12 | ".asax": "ASP", 13 | ".ascx": "ASP", 14 | ".ashx": "ASP", 15 | ".asmx": "ASP", 16 | ".aspx": "ASP", 17 | ".axd": "ASP", 18 | ".dats": "ATS", 19 | ".hats": "ATS", 20 | ".sats": "ATS", 21 | ".as": "ActionScript", 22 | ".adb": "Ada", 23 | ".ada": "Ada", 24 | ".ads": "Ada", 25 | ".agda": "Agda", 26 | ".als": "Alloy", 27 | ".apacheconf": "ApacheConf", 28 | ".vhost": "Nginx", 29 | ".cls": "Visual Basic", 30 | ".applescript": "AppleScript", 31 | ".scpt": "AppleScript", 32 | ".arc": "Arc", 33 | ".ino": "Arduino", 34 | ".asciidoc": "AsciiDoc", 35 | ".adoc": "AsciiDoc", 36 | ".aj": "AspectJ", 37 | ".asm": "Assembly", 38 | ".a51": "Assembly", 39 | ".inc": "SourcePawn", 40 | ".nasm": "Assembly", 41 | ".aug": "Augeas", 42 | ".ahk": "AutoHotkey", 43 | ".ahkl": "AutoHotkey", 44 | ".au3": "AutoIt", 45 | ".awk": "Awk", 46 | ".auk": "Awk", 47 | ".gawk": "Awk", 48 | ".mawk": "Awk", 49 | ".nawk": "Awk", 50 | ".bat": "Batchfile", 51 | ".cmd": "Batchfile", 52 | ".befunge": "Befunge", 53 | ".bison": "Bison", 54 | ".bb": "BlitzBasic", 55 | ".decls": "BlitzBasic", 56 | ".bmx": "BlitzMax", 57 | ".bsv": "Bluespec", 58 | ".boo": "Boo", 59 | ".b": "Limbo", 60 | ".bf": "HyPhy", 61 | ".brs": "Brightscript", 62 | ".bro": "Bro", 63 | ".c": "C", 64 | ".cats": "C", 65 | ".h": "Objective-C", 66 | ".idc": "C", 67 | ".w": "C", 68 | ".cs": "Smalltalk", 69 | ".cshtml": "C#", 70 | ".csx": "C#", 71 | ".cpp": "C++", 72 | ".c++": "C++", 73 | ".cc": "C++", 74 | ".cp": "Component Pascal", 75 | ".cxx": "C++", 76 | ".h++": "C++", 77 | ".hh": "Hack", 78 | ".hpp": "C++", 79 | ".hxx": "C++", 80 | ".inl": "C++", 81 | ".ipp": "C++", 82 | ".tcc": "C++", 83 | ".tpp": "C++", 84 | ".c-objdump": "C-ObjDump", 85 | ".chs": "C2hs Haskell", 86 | ".clp": "CLIPS", 87 | ".cmake": "CMake", 88 | ".cmake.in": "CMake", 89 | ".cob": "COBOL", 90 | ".cbl": "COBOL", 91 | ".ccp": "COBOL", 92 | ".cobol": "COBOL", 93 | ".cpy": "COBOL", 94 | ".css": "CSS", 95 | ".capnp": "Cap'n Proto", 96 | ".mss": "CartoCSS", 97 | ".ceylon": "Ceylon", 98 | ".chpl": "Chapel", 99 | ".ch": "xBase", 100 | ".ck": "ChucK", 101 | ".cirru": "Cirru", 102 | ".clw": "Clarion", 103 | ".icl": "Clean", 104 | ".dcl": "Clean", 105 | ".clj": "Clojure", 106 | ".boot": "Clojure", 107 | ".cl2": "Clojure", 108 | ".cljc": "Clojure", 109 | ".cljs": "Clojure", 110 | ".cljs.hl": "Clojure", 111 | ".cljscm": "Clojure", 112 | ".cljx": "Clojure", 113 | ".hic": "Clojure", 114 | ".coffee": "CoffeeScript", 115 | "._coffee": "CoffeeScript", 116 | ".cjsx": "CoffeeScript", 117 | ".cson": "CoffeeScript", 118 | ".iced": "CoffeeScript", 119 | ".cfm": "ColdFusion", 120 | ".cfml": "ColdFusion", 121 | ".cfc": "ColdFusion CFC", 122 | ".lisp": "NewLisp", 123 | ".asd": "Common Lisp", 124 | ".cl": "OpenCL", 125 | ".l": "PicoLisp", 126 | ".lsp": "NewLisp", 127 | ".ny": "Common Lisp", 128 | ".podsl": "Common Lisp", 129 | ".sexp": "Common Lisp", 130 | ".cps": "Component Pascal", 131 | ".coq": "Coq", 132 | ".v": "Verilog", 133 | ".cppobjdump": "Cpp-ObjDump", 134 | ".c++-objdump": "Cpp-ObjDump", 135 | ".c++objdump": "Cpp-ObjDump", 136 | ".cpp-objdump": "Cpp-ObjDump", 137 | ".cxx-objdump": "Cpp-ObjDump", 138 | ".creole": "Creole", 139 | ".cr": "Crystal", 140 | ".feature": "Cucumber", 141 | ".cu": "Cuda", 142 | ".cuh": "Cuda", 143 | ".cy": "Cycript", 144 | ".pyx": "Cython", 145 | ".pxd": "Cython", 146 | ".pxi": "Cython", 147 | ".d": "Makefile", 148 | ".di": "D", 149 | ".d-objdump": "D-ObjDump", 150 | ".com": "DIGITAL Command Language", 151 | ".dm": "DM", 152 | ".zone": "DNS Zone", 153 | ".arpa": "DNS Zone", 154 | ".darcspatch": "Darcs Patch", 155 | ".dpatch": "Darcs Patch", 156 | ".dart": "Dart", 157 | ".diff": "Diff", 158 | ".patch": "Diff", 159 | ".dockerfile": "Dockerfile", 160 | ".djs": "Dogescript", 161 | ".dylan": "Dylan", 162 | ".dyl": "Dylan", 163 | ".intr": "Dylan", 164 | ".lid": "Dylan", 165 | ".e": "Eiffel", 166 | ".ecl": "ECLiPSe", 167 | ".eclxml": "ECL", 168 | ".sch": "KiCad", 169 | ".brd": "Eagle", 170 | ".epj": "Ecere Projects", 171 | ".ex": "Elixir", 172 | ".exs": "Elixir", 173 | ".elm": "Elm", 174 | ".el": "Emacs Lisp", 175 | ".emacs": "Emacs Lisp", 176 | ".emacs.desktop": "Emacs Lisp", 177 | ".em": "EmberScript", 178 | ".emberscript": "EmberScript", 179 | ".erl": "Erlang", 180 | ".es": "Erlang", 181 | ".escript": "Erlang", 182 | ".hrl": "Erlang", 183 | ".fs": "GLSL", 184 | ".fsi": "F#", 185 | ".fsx": "F#", 186 | ".fx": "FLUX", 187 | ".flux": "FLUX", 188 | ".f90": "FORTRAN", 189 | ".f": "Forth", 190 | ".f03": "FORTRAN", 191 | ".f08": "FORTRAN", 192 | ".f77": "FORTRAN", 193 | ".f95": "FORTRAN", 194 | ".for": "Forth", 195 | ".fpp": "FORTRAN", 196 | ".factor": "Factor", 197 | ".fy": "Fancy", 198 | ".fancypack": "Fancy", 199 | ".fan": "Fantom", 200 | ".fth": "Forth", 201 | ".4th": "Forth", 202 | ".forth": "Forth", 203 | ".fr": "Text", 204 | ".frt": "Forth", 205 | ".g": "GAP", 206 | ".gco": "G-code", 207 | ".gcode": "G-code", 208 | ".gms": "GAMS", 209 | ".gap": "GAP", 210 | ".gd": "GDScript", 211 | ".gi": "GAP", 212 | ".tst": "Scilab", 213 | ".s": "GAS", 214 | ".ms": "Groff", 215 | ".glsl": "GLSL", 216 | ".fp": "GLSL", 217 | ".frag": "JavaScript", 218 | ".frg": "GLSL", 219 | ".fshader": "GLSL", 220 | ".geo": "GLSL", 221 | ".geom": "GLSL", 222 | ".glslv": "GLSL", 223 | ".gshader": "GLSL", 224 | ".shader": "GLSL", 225 | ".vert": "GLSL", 226 | ".vrx": "GLSL", 227 | ".vshader": "GLSL", 228 | ".gml": "XML", 229 | ".kid": "Genshi", 230 | ".ebuild": "Gentoo Ebuild", 231 | ".eclass": "Gentoo Eclass", 232 | ".po": "Gettext Catalog", 233 | ".pot": "Gettext Catalog", 234 | ".glf": "Glyph", 235 | ".gp": "Gnuplot", 236 | ".gnu": "Gnuplot", 237 | ".gnuplot": "Gnuplot", 238 | ".plot": "Gnuplot", 239 | ".plt": "Gnuplot", 240 | ".go": "Go", 241 | ".golo": "Golo", 242 | ".gs": "JavaScript", 243 | ".gst": "Gosu", 244 | ".gsx": "Gosu", 245 | ".vark": "Gosu", 246 | ".grace": "Grace", 247 | ".gradle": "Gradle", 248 | ".gf": "Grammatical Framework", 249 | ".dot": "Graphviz (DOT)", 250 | ".gv": "Graphviz (DOT)", 251 | ".man": "Groff", 252 | ".1": "Groff", 253 | ".1in": "Groff", 254 | ".1m": "Groff", 255 | ".1x": "Groff", 256 | ".2": "Groff", 257 | ".3": "Groff", 258 | ".3in": "Groff", 259 | ".3m": "Groff", 260 | ".3qt": "Groff", 261 | ".3x": "Groff", 262 | ".4": "Groff", 263 | ".5": "Groff", 264 | ".6": "Groff", 265 | ".7": "Groff", 266 | ".8": "Groff", 267 | ".9": "Groff", 268 | ".n": "Nemerle", 269 | ".rno": "Groff", 270 | ".roff": "Groff", 271 | ".groovy": "Groovy", 272 | ".grt": "Groovy", 273 | ".gtpl": "Groovy", 274 | ".gvy": "Groovy", 275 | ".gsp": "Groovy Server Pages", 276 | ".hcl": "HCL", 277 | ".tf": "HCL", 278 | ".html": "HTML", 279 | ".htm": "HTML", 280 | ".html.hl": "HTML", 281 | ".st": "Smalltalk", 282 | ".xht": "HTML", 283 | ".xhtml": "HTML", 284 | ".mustache": "HTML+Django", 285 | ".jinja": "HTML+Django", 286 | ".erb": "HTML+ERB", 287 | ".erb.deface": "HTML+ERB", 288 | ".phtml": "HTML+PHP", 289 | ".http": "HTTP", 290 | ".php": "PHP", 291 | ".haml": "Haml", 292 | ".haml.deface": "Haml", 293 | ".handlebars": "Handlebars", 294 | ".hbs": "Handlebars", 295 | ".hb": "Harbour", 296 | ".hs": "Haskell", 297 | ".hsc": "Haskell", 298 | ".hx": "Haxe", 299 | ".hxsl": "Haxe", 300 | ".hy": "Hy", 301 | ".pro": "QMake", 302 | ".dlm": "IDL", 303 | ".ipf": "IGOR Pro", 304 | ".ini": "INI", 305 | ".cfg": "INI", 306 | ".prefs": "INI", 307 | ".properties": "INI", 308 | ".irclog": "IRC log", 309 | ".weechatlog": "IRC log", 310 | ".idr": "Idris", 311 | ".lidr": "Idris", 312 | ".ni": "Inform 7", 313 | ".i7x": "Inform 7", 314 | ".iss": "Inno Setup", 315 | ".io": "Io", 316 | ".ik": "Ioke", 317 | ".thy": "Isabelle", 318 | ".ijs": "J", 319 | ".flex": "JFlex", 320 | ".jflex": "JFlex", 321 | ".json": "JSON", 322 | ".lock": "JSON", 323 | ".json5": "JSON5", 324 | ".jsonld": "JSONLD", 325 | ".jq": "JSONiq", 326 | ".jade": "Jade", 327 | ".j": "Objective-J", 328 | ".java": "Java", 329 | ".jsp": "Java Server Pages", 330 | ".js": "JavaScript", 331 | "._js": "JavaScript", 332 | ".bones": "JavaScript", 333 | ".es6": "JavaScript", 334 | ".jake": "JavaScript", 335 | ".jsb": "JavaScript", 336 | ".jsfl": "JavaScript", 337 | ".jsm": "JavaScript", 338 | ".jss": "JavaScript", 339 | ".jsx": "JavaScript", 340 | ".njs": "JavaScript", 341 | ".pac": "JavaScript", 342 | ".sjs": "JavaScript", 343 | ".ssjs": "JavaScript", 344 | ".sublime-build": "JavaScript", 345 | ".sublime-commands": "JavaScript", 346 | ".sublime-completions": "JavaScript", 347 | ".sublime-keymap": "JavaScript", 348 | ".sublime-macro": "JavaScript", 349 | ".sublime-menu": "JavaScript", 350 | ".sublime-mousemap": "JavaScript", 351 | ".sublime-project": "JavaScript", 352 | ".sublime-settings": "JavaScript", 353 | ".sublime-theme": "JavaScript", 354 | ".sublime-workspace": "JavaScript", 355 | ".sublime_metrics": "JavaScript", 356 | ".sublime_session": "JavaScript", 357 | ".xsjs": "JavaScript", 358 | ".xsjslib": "JavaScript", 359 | ".jl": "Julia", 360 | ".krl": "KRL", 361 | ".kicad_pcb": "KiCad", 362 | ".kit": "Kit", 363 | ".kt": "Kotlin", 364 | ".ktm": "Kotlin", 365 | ".kts": "Kotlin", 366 | ".lfe": "LFE", 367 | ".ll": "LLVM", 368 | ".lol": "LOLCODE", 369 | ".lsl": "LSL", 370 | ".lvproj": "LabVIEW", 371 | ".lasso": "Lasso", 372 | ".las": "Lasso", 373 | ".lasso8": "Lasso", 374 | ".lasso9": "Lasso", 375 | ".ldml": "Lasso", 376 | ".latte": "Latte", 377 | ".lean": "Lean", 378 | ".hlean": "Lean", 379 | ".less": "Less", 380 | ".lex": "Lex", 381 | ".ly": "LilyPond", 382 | ".ily": "LilyPond", 383 | ".m": "Objective-C", 384 | ".ld": "Linker Script", 385 | ".lds": "Linker Script", 386 | ".liquid": "Liquid", 387 | ".lagda": "Literate Agda", 388 | ".litcoffee": "Literate CoffeeScript", 389 | ".lhs": "Literate Haskell", 390 | ".ls": "LoomScript", 391 | "._ls": "LiveScript", 392 | ".xm": "Logos", 393 | ".x": "Logos", 394 | ".xi": "Logos", 395 | ".lgt": "Logtalk", 396 | ".logtalk": "Logtalk", 397 | ".lookml": "LookML", 398 | ".lua": "Lua", 399 | ".fcgi": "Shell", 400 | ".nse": "Lua", 401 | ".pd_lua": "Lua", 402 | ".rbxs": "Lua", 403 | ".wlua": "Lua", 404 | ".mumps": "M", 405 | ".mtml": "MTML", 406 | ".muf": "MUF", 407 | ".mak": "Makefile", 408 | ".mk": "Makefile", 409 | ".mako": "Mako", 410 | ".mao": "Mako", 411 | ".md": "Markdown", 412 | ".markdown": "Markdown", 413 | ".mkd": "Markdown", 414 | ".mkdn": "Markdown", 415 | ".mkdown": "Markdown", 416 | ".ron": "Markdown", 417 | ".mask": "Mask", 418 | ".mathematica": "Mathematica", 419 | ".cdf": "Mathematica", 420 | ".ma": "Mathematica", 421 | ".nb": "Mathematica", 422 | ".nbp": "Mathematica", 423 | ".wl": "Mathematica", 424 | ".wlt": "Mathematica", 425 | ".matlab": "Matlab", 426 | ".maxpat": "Max", 427 | ".maxhelp": "Max", 428 | ".maxproj": "Max", 429 | ".mxt": "Max", 430 | ".pat": "Max", 431 | ".mediawiki": "MediaWiki", 432 | ".moo": "Moocode", 433 | ".minid": "MiniD", 434 | ".druby": "Mirah", 435 | ".duby": "Mirah", 436 | ".mir": "Mirah", 437 | ".mirah": "Mirah", 438 | ".mo": "Modelica", 439 | ".mms": "Module Management System", 440 | ".mmk": "Module Management System", 441 | ".monkey": "Monkey", 442 | ".moon": "MoonScript", 443 | ".myt": "Myghty", 444 | ".ncl": "Text", 445 | ".nl": "NewLisp", 446 | ".nsi": "NSIS", 447 | ".nsh": "NSIS", 448 | ".axs": "NetLinx", 449 | ".axi": "NetLinx", 450 | ".axs.erb": "NetLinx+ERB", 451 | ".axi.erb": "NetLinx+ERB", 452 | ".nlogo": "NetLogo", 453 | ".nginxconf": "Nginx", 454 | ".nim": "Nimrod", 455 | ".nimrod": "Nimrod", 456 | ".ninja": "Ninja", 457 | ".nit": "Nit", 458 | ".nix": "Nix", 459 | ".nu": "Nu", 460 | ".numpy": "NumPy", 461 | ".numpyw": "NumPy", 462 | ".numsc": "NumPy", 463 | ".ml": "Standard ML", 464 | ".eliom": "OCaml", 465 | ".eliomi": "OCaml", 466 | ".ml4": "OCaml", 467 | ".mli": "OCaml", 468 | ".mll": "OCaml", 469 | ".mly": "OCaml", 470 | ".objdump": "ObjDump", 471 | ".mm": "XML", 472 | ".sj": "Objective-J", 473 | ".omgrofl": "Omgrofl", 474 | ".opa": "Opa", 475 | ".opal": "Opal", 476 | ".opencl": "OpenCL", 477 | ".p": "OpenEdge ABL", 478 | ".scad": "OpenSCAD", 479 | ".org": "Org", 480 | ".ox": "Ox", 481 | ".oxh": "Ox", 482 | ".oxo": "Ox", 483 | ".oxygene": "Oxygene", 484 | ".oz": "Oz", 485 | ".pwn": "PAWN", 486 | ".aw": "PHP", 487 | ".ctp": "PHP", 488 | ".php3": "PHP", 489 | ".php4": "PHP", 490 | ".php5": "PHP", 491 | ".phpt": "PHP", 492 | ".pls": "PLSQL", 493 | ".pkb": "PLSQL", 494 | ".pks": "PLSQL", 495 | ".plb": "PLSQL", 496 | ".plsql": "PLSQL", 497 | ".sql": "SQLPL", 498 | ".pan": "Pan", 499 | ".psc": "Papyrus", 500 | ".parrot": "Parrot", 501 | ".pasm": "Parrot Assembly", 502 | ".pir": "Parrot Internal Representation", 503 | ".pas": "Pascal", 504 | ".dfm": "Pascal", 505 | ".dpr": "Pascal", 506 | ".lpr": "Pascal", 507 | ".pp": "Puppet", 508 | ".pl": "Prolog", 509 | ".al": "Perl", 510 | ".cgi": "Shell", 511 | ".perl": "Perl", 512 | ".ph": "Perl", 513 | ".plx": "Perl", 514 | ".pm": "Perl6", 515 | ".pod": "Pod", 516 | ".psgi": "Perl", 517 | ".t": "Turing", 518 | ".6pl": "Perl6", 519 | ".6pm": "Perl6", 520 | ".nqp": "Perl6", 521 | ".p6": "Perl6", 522 | ".p6l": "Perl6", 523 | ".p6m": "Perl6", 524 | ".pl6": "Perl6", 525 | ".pm6": "Perl6", 526 | ".pig": "PigLatin", 527 | ".pike": "Pike", 528 | ".pmod": "Pike", 529 | ".pogo": "PogoScript", 530 | ".ps": "PostScript", 531 | ".eps": "PostScript", 532 | ".ps1": "PowerShell", 533 | ".psd1": "PowerShell", 534 | ".psm1": "PowerShell", 535 | ".pde": "Processing", 536 | ".prolog": "Prolog", 537 | ".spin": "Propeller Spin", 538 | ".proto": "Protocol Buffer", 539 | ".pub": "Public Key", 540 | ".pd": "Pure Data", 541 | ".pb": "PureBasic", 542 | ".pbi": "PureBasic", 543 | ".purs": "PureScript", 544 | ".py": "Python", 545 | ".gyp": "Python", 546 | ".lmi": "Python", 547 | ".pyde": "Python", 548 | ".pyp": "Python", 549 | ".pyt": "Python", 550 | ".pyw": "Python", 551 | ".tac": "Python", 552 | ".wsgi": "Python", 553 | ".xpy": "Python", 554 | ".pytb": "Python traceback", 555 | ".qml": "QML", 556 | ".qbs": "QML", 557 | ".pri": "QMake", 558 | ".r": "Rebol", 559 | ".rd": "R", 560 | ".rsx": "R", 561 | ".raml": "RAML", 562 | ".rdoc": "RDoc", 563 | ".rbbas": "REALbasic", 564 | ".rbfrm": "REALbasic", 565 | ".rbmnu": "REALbasic", 566 | ".rbres": "REALbasic", 567 | ".rbtbar": "REALbasic", 568 | ".rbuistate": "REALbasic", 569 | ".rhtml": "RHTML", 570 | ".rmd": "RMarkdown", 571 | ".rkt": "Racket", 572 | ".rktd": "Racket", 573 | ".rktl": "Racket", 574 | ".scrbl": "Racket", 575 | ".rl": "Ragel in Ruby Host", 576 | ".raw": "Raw token data", 577 | ".reb": "Rebol", 578 | ".r2": "Rebol", 579 | ".r3": "Rebol", 580 | ".rebol": "Rebol", 581 | ".red": "Red", 582 | ".reds": "Red", 583 | ".cw": "Redcode", 584 | ".rs": "Rust", 585 | ".rsh": "RenderScript", 586 | ".robot": "RobotFramework", 587 | ".rg": "Rouge", 588 | ".rb": "Ruby", 589 | ".builder": "Ruby", 590 | ".gemspec": "Ruby", 591 | ".god": "Ruby", 592 | ".irbrc": "Ruby", 593 | ".jbuilder": "Ruby", 594 | ".mspec": "Ruby", 595 | ".pluginspec": "XML", 596 | ".podspec": "Ruby", 597 | ".rabl": "Ruby", 598 | ".rake": "Ruby", 599 | ".rbuild": "Ruby", 600 | ".rbw": "Ruby", 601 | ".rbx": "Ruby", 602 | ".ru": "Ruby", 603 | ".ruby": "Ruby", 604 | ".thor": "Ruby", 605 | ".watchr": "Ruby", 606 | ".sas": "SAS", 607 | ".scss": "SCSS", 608 | ".smt2": "SMT", 609 | ".smt": "SMT", 610 | ".sparql": "SPARQL", 611 | ".rq": "SPARQL", 612 | ".sqf": "SQF", 613 | ".hqf": "SQF", 614 | ".cql": "SQL", 615 | ".ddl": "SQL", 616 | ".prc": "SQL", 617 | ".tab": "SQL", 618 | ".udf": "SQL", 619 | ".viw": "SQL", 620 | ".db2": "SQLPL", 621 | ".ston": "STON", 622 | ".svg": "SVG", 623 | ".sage": "Sage", 624 | ".sagews": "Sage", 625 | ".sls": "Scheme", 626 | ".sass": "Sass", 627 | ".scala": "Scala", 628 | ".sbt": "Scala", 629 | ".sc": "SuperCollider", 630 | ".scaml": "Scaml", 631 | ".scm": "Scheme", 632 | ".sld": "Scheme", 633 | ".sps": "Scheme", 634 | ".ss": "Scheme", 635 | ".sci": "Scilab", 636 | ".sce": "Scilab", 637 | ".self": "Self", 638 | ".sh": "Shell", 639 | ".bash": "Shell", 640 | ".bats": "Shell", 641 | ".command": "Shell", 642 | ".ksh": "Shell", 643 | ".tmux": "Shell", 644 | ".tool": "Shell", 645 | ".zsh": "Shell", 646 | ".sh-session": "ShellSession", 647 | ".shen": "Shen", 648 | ".sl": "Slash", 649 | ".slim": "Slim", 650 | ".smali": "Smali", 651 | ".tpl": "Smarty", 652 | ".sp": "SourcePawn", 653 | ".sma": "SourcePawn", 654 | ".nut": "Squirrel", 655 | ".fun": "Standard ML", 656 | ".sig": "Standard ML", 657 | ".sml": "Standard ML", 658 | ".do": "Stata", 659 | ".ado": "Stata", 660 | ".doh": "Stata", 661 | ".ihlp": "Stata", 662 | ".mata": "Stata", 663 | ".matah": "Stata", 664 | ".sthlp": "Stata", 665 | ".styl": "Stylus", 666 | ".scd": "SuperCollider", 667 | ".swift": "Swift", 668 | ".sv": "SystemVerilog", 669 | ".svh": "SystemVerilog", 670 | ".vh": "SystemVerilog", 671 | ".toml": "TOML", 672 | ".txl": "TXL", 673 | ".tcl": "Tcl", 674 | ".adp": "Tcl", 675 | ".tm": "Tcl", 676 | ".tcsh": "Tcsh", 677 | ".csh": "Tcsh", 678 | ".tex": "TeX", 679 | ".aux": "TeX", 680 | ".bbx": "TeX", 681 | ".bib": "TeX", 682 | ".cbx": "TeX", 683 | ".dtx": "TeX", 684 | ".ins": "TeX", 685 | ".lbx": "TeX", 686 | ".ltx": "TeX", 687 | ".mkii": "TeX", 688 | ".mkiv": "TeX", 689 | ".mkvi": "TeX", 690 | ".sty": "TeX", 691 | ".toc": "TeX", 692 | ".tea": "Tea", 693 | ".txt": "Text", 694 | ".textile": "Textile", 695 | ".thrift": "Thrift", 696 | ".tu": "Turing", 697 | ".ttl": "Turtle", 698 | ".twig": "Twig", 699 | ".ts": "XML", 700 | ".upc": "Unified Parallel C", 701 | ".anim": "Unity3D Asset", 702 | ".asset": "Unity3D Asset", 703 | ".mat": "Unity3D Asset", 704 | ".meta": "Unity3D Asset", 705 | ".prefab": "Unity3D Asset", 706 | ".unity": "Unity3D Asset", 707 | ".uc": "UnrealScript", 708 | ".vcl": "VCL", 709 | ".vhdl": "VHDL", 710 | ".vhd": "VHDL", 711 | ".vhf": "VHDL", 712 | ".vhi": "VHDL", 713 | ".vho": "VHDL", 714 | ".vhs": "VHDL", 715 | ".vht": "VHDL", 716 | ".vhw": "VHDL", 717 | ".vala": "Vala", 718 | ".vapi": "Vala", 719 | ".veo": "Verilog", 720 | ".vim": "VimL", 721 | ".vb": "Visual Basic", 722 | ".bas": "Visual Basic", 723 | ".frm": "Visual Basic", 724 | ".frx": "Visual Basic", 725 | ".vba": "Visual Basic", 726 | ".vbhtml": "Visual Basic", 727 | ".vbs": "Visual Basic", 728 | ".volt": "Volt", 729 | ".vue": "Vue", 730 | ".owl": "Web Ontology Language", 731 | ".webidl": "WebIDL", 732 | ".xc": "XC", 733 | ".xml": "XML", 734 | ".ant": "XML", 735 | ".axml": "XML", 736 | ".ccxml": "XML", 737 | ".clixml": "XML", 738 | ".cproject": "XML", 739 | ".csproj": "XML", 740 | ".ct": "XML", 741 | ".dita": "XML", 742 | ".ditamap": "XML", 743 | ".ditaval": "XML", 744 | ".dll.config": "XML", 745 | ".filters": "XML", 746 | ".fsproj": "XML", 747 | ".fxml": "XML", 748 | ".glade": "XML", 749 | ".grxml": "XML", 750 | ".iml": "XML", 751 | ".ivy": "XML", 752 | ".jelly": "XML", 753 | ".kml": "XML", 754 | ".launch": "XML", 755 | ".mdpolicy": "XML", 756 | ".mxml": "XML", 757 | ".nproj": "XML", 758 | ".nuspec": "XML", 759 | ".odd": "XML", 760 | ".osm": "XML", 761 | ".plist": "XML", 762 | ".ps1xml": "XML", 763 | ".psc1": "XML", 764 | ".pt": "XML", 765 | ".rdf": "XML", 766 | ".rss": "XML", 767 | ".scxml": "XML", 768 | ".srdf": "XML", 769 | ".storyboard": "XML", 770 | ".sttheme": "XML", 771 | ".sublime-snippet": "XML", 772 | ".targets": "XML", 773 | ".tmcommand": "XML", 774 | ".tml": "XML", 775 | ".tmlanguage": "XML", 776 | ".tmpreferences": "XML", 777 | ".tmsnippet": "XML", 778 | ".tmtheme": "XML", 779 | ".ui": "XML", 780 | ".urdf": "XML", 781 | ".vbproj": "XML", 782 | ".vcxproj": "XML", 783 | ".vxml": "XML", 784 | ".wsdl": "XML", 785 | ".wsf": "XML", 786 | ".wxi": "XML", 787 | ".wxl": "XML", 788 | ".wxs": "XML", 789 | ".x3d": "XML", 790 | ".xacro": "XML", 791 | ".xaml": "XML", 792 | ".xib": "XML", 793 | ".xlf": "XML", 794 | ".xliff": "XML", 795 | ".xmi": "XML", 796 | ".xml.dist": "XML", 797 | ".xsd": "XML", 798 | ".xul": "XML", 799 | ".zcml": "XML", 800 | ".xsp-config": "XPages", 801 | ".xsp.metadata": "XPages", 802 | ".xpl": "XProc", 803 | ".xproc": "XProc", 804 | ".xquery": "XQuery", 805 | ".xq": "XQuery", 806 | ".xql": "XQuery", 807 | ".xqm": "XQuery", 808 | ".xqy": "XQuery", 809 | ".xs": "XS", 810 | ".xslt": "XSLT", 811 | ".xsl": "XSLT", 812 | ".xojo_code": "Xojo", 813 | ".xojo_menu": "Xojo", 814 | ".xojo_report": "Xojo", 815 | ".xojo_script": "Xojo", 816 | ".xojo_toolbar": "Xojo", 817 | ".xojo_window": "Xojo", 818 | ".xtend": "Xtend", 819 | ".yml": "YAML", 820 | ".reek": "YAML", 821 | ".rviz": "YAML", 822 | ".syntax": "YAML", 823 | ".yaml": "YAML", 824 | ".yaml-tmlanguage": "YAML", 825 | ".y": "Yacc", 826 | ".yacc": "Yacc", 827 | ".yy": "Yacc", 828 | ".zep": "Zephir", 829 | ".zimpl": "Zimpl", 830 | ".zmpl": "Zimpl", 831 | ".zpl": "Zimpl", 832 | ".desktop": "desktop", 833 | ".desktop.in": "desktop", 834 | ".ec": "eC", 835 | ".eh": "eC", 836 | ".edn": "edn", 837 | ".fish": "fish", 838 | ".mu": "mupad", 839 | ".nc": "nesC", 840 | ".ooc": "ooc", 841 | ".rst": "reStructuredText", 842 | ".rest": "reStructuredText", 843 | ".wisp": "wisp", 844 | ".prg": "xBase", 845 | ".prw": "xBase" 846 | } -------------------------------------------------------------------------------- /vendor/filenames.json: -------------------------------------------------------------------------------- 1 | { 2 | "ant.xml": "Ant Build System", 3 | "build.xml": "Ant Build System", 4 | "CMakeLists.txt": "CMake", 5 | "riemann.config": "Clojure", 6 | "Cakefile": "CoffeeScript", 7 | "Dockerfile": "Dockerfile", 8 | "mix.lock": "Elixir", 9 | ".emacs": "Emacs Lisp", 10 | ".emacs.desktop": "Emacs Lisp", 11 | "rebar.config": "Erlang", 12 | "rebar.config.lock": "Erlang", 13 | "rebar.lock": "Erlang", 14 | ".factor-boot-rc": "Factor", 15 | ".factor-rc": "Factor", 16 | "Fakefile": "Fancy", 17 | "ROOT": "Isabelle ROOT", 18 | ".jshintrc": "JSON", 19 | "composer.lock": "JSON", 20 | "Jakefile": "JavaScript", 21 | "ld.script": "Linker Script", 22 | "Slakefile": "LiveScript", 23 | "GNUmakefile": "Makefile", 24 | "Kbuild": "Makefile", 25 | "Makefile": "Makefile", 26 | "Makefile.inc": "Makefile", 27 | "makefile": "Makefile", 28 | "pom.xml": "Maven POM", 29 | "descrip.mmk": "Module Management System", 30 | "descrip.mms": "Module Management System", 31 | "nginx.conf": "Nginx", 32 | "Nukefile": "Nu", 33 | "Phakefile": "PHP", 34 | "Rexfile": "Perl6", 35 | "Modulefile": "Puppet", 36 | "BUILD": "Python", 37 | "SConscript": "Python", 38 | "SConstruct": "Python", 39 | "Snakefile": "Python", 40 | "wscript": "Python", 41 | ".Rprofile": "R", 42 | ".pryrc": "Ruby", 43 | "Appraisals": "Ruby", 44 | "Berksfile": "Ruby", 45 | "Brewfile": "Ruby", 46 | "Buildfile": "Ruby", 47 | "Deliverfile": "Ruby", 48 | "Fastfile": "Ruby", 49 | "Gemfile": "Ruby", 50 | "Gemfile.lock": "Ruby", 51 | "Guardfile": "Ruby", 52 | "Jarfile": "Ruby", 53 | "Mavenfile": "Ruby", 54 | "Podfile": "Ruby", 55 | "Puppetfile": "Ruby", 56 | "Snapfile": "Ruby", 57 | "Thorfile": "Ruby", 58 | "Vagrantfile": "Ruby", 59 | "buildfile": "Ruby", 60 | ".nvimrc": "VimL", 61 | ".vimrc": "VimL", 62 | "_vimrc": "VimL", 63 | "gvimrc": "VimL", 64 | "nvimrc": "VimL", 65 | "vimrc": "VimL", 66 | ".classpath": "XML", 67 | ".project": "XML", 68 | "Settings.StyleCop": "XML", 69 | "Web.Debug.config": "XML", 70 | "Web.Release.config": "XML", 71 | "Web.config": "XML", 72 | "packages.config": "XML" 73 | } -------------------------------------------------------------------------------- /vendor/interpreters.json: -------------------------------------------------------------------------------- 1 | { 2 | "osascript": "AppleScript", 3 | "awk": "Awk", 4 | "gawk": "Awk", 5 | "mawk": "Awk", 6 | "nawk": "Awk", 7 | "tcc": "C", 8 | "coffee": "CoffeeScript", 9 | "lisp": "Common Lisp", 10 | "sbcl": "Common Lisp", 11 | "ccl": "Common Lisp", 12 | "clisp": "Common Lisp", 13 | "ecl": "Common Lisp", 14 | "crystal": "Crystal", 15 | "dtrace": "DTrace", 16 | "escript": "Erlang", 17 | "gnuplot": "Gnuplot", 18 | "groovy": "Groovy", 19 | "ioke": "Ioke", 20 | "node": "JavaScript", 21 | "lsl": "LSL", 22 | "lua": "Lua", 23 | "make": "Makefile", 24 | "mmi": "Mercury", 25 | "moon": "MoonScript", 26 | "newlisp": "NewLisp", 27 | "nush": "Nu", 28 | "ocaml": "OCaml", 29 | "ocamlrun": "OCaml", 30 | "php": "PHP", 31 | "parrot": "Parrot Internal Representation", 32 | "perl": "Perl", 33 | "perl6": "Perl6", 34 | "picolisp": "PicoLisp", 35 | "pil": "PicoLisp", 36 | "pike": "Pike", 37 | "swipl": "Prolog", 38 | "python": "Python", 39 | "python2": "Python", 40 | "python3": "Python", 41 | "qmake": "QMake", 42 | "Rscript": "R", 43 | "racket": "Racket", 44 | "ruby": "Ruby", 45 | "macruby": "Ruby", 46 | "rake": "Ruby", 47 | "jruby": "Ruby", 48 | "rbx": "Ruby", 49 | "boolector": "SMT", 50 | "cvc4": "SMT", 51 | "mathsat5": "SMT", 52 | "opensmt": "SMT", 53 | "smtinterpol": "SMT", 54 | "smt-rat": "SMT", 55 | "stp": "SMT", 56 | "verit": "SMT", 57 | "yices2": "SMT", 58 | "z3": "SMT", 59 | "scala": "Scala", 60 | "guile": "Scheme", 61 | "bigloo": "Scheme", 62 | "chicken": "Scheme", 63 | "bash": "Shell", 64 | "rc": "Shell", 65 | "sh": "Shell", 66 | "zsh": "Shell", 67 | "tclsh": "Tcl", 68 | "wish": "Tcl" 69 | } --------------------------------------------------------------------------------