gruntjs/grunt — pull request #1269 by silkentrance (2014-12-28 18:34:51+00:00)
Title: Initial stab at the new feature

See also #1268 for the actual issue.

What it does:

1. lib/grunt.js gRequire's lib/grunt/lang and adds it to the public API
2. calling grunt.lang.lookupExtension('coffee') will
2.1 first try load all grunt-lang-* plugins on both the local node_modules search path and the global search path
2.2 each plugin must implement a require.js module that will export a single function, lets call it 'register'
2.3 tryLoadPlugins will try to require that module and execute the register function
2.4 the register function will return a descriptor containing the language name, the version being supported, the provider and the extensions for which the plugins registers itself for, e.g.

```
{
language : 'CoffeeScript',
version : '1.8.0',
provider : 'grunt-lang-coffee',
extensions : ['coffee', 'litcoffee']
}
```

The register function will also be responsible for registering the language as an extension with node.

Example (minimal) layout of a grunt-lang-* plugin would then be

```
grunt-lang-coffee/
package.json
register.js
```