README
lucy-codegen
A library for auto-generating source code in different programming languages. Useful for creating SDKs and sample code.
Supported Languages
- JavaScript
- NodeJS
- Ruby
- PHP
In Progress
- Java
- Python
- cURL
Project Overview
Generators
Generators are contained in the generators/
directory. Each generator takes in a language and generates sample code for achieving some goal in that language:
- Request: Generates code for making an HTTP request
- App: Generates code for serving a Single Page Application
You can see samples of the generated code in the test/golden directory
Languages
Languages are described in the langs/
directory. Each language is expected to implement certain fields and functions for generating code in that language. For instance, JavaScript has the following implementation:
var JS = {
name: 'javascript',
label: 'JavaScript',
extension: '.js',
nulltype: 'null',
}
JS.comment = function(str) { return '// ' + str }
JS.for = function(iter) {
return iter.group + '.forEach(function(' + iter.iterator + ', index) {';
}
JS.rof = function(iter) {
return '});'
}
JS.if = function(cond) {
return 'if(' + cond +') {'
}
JS.fi = function(cond) {
return '}'
}
Languages are expected to implement the following fields and functions:
name
: Should match the language's subdirectorylabel
: A human-readable label for this languageextension
: The default file extension for this languagenulltype
: A string that represents a null valuecomment(str)
: A comment block containing the given textfor(cond)
: The opening of a for() looprof(cond)
: The end of a for() loopif(cond)
: The opening of an if() statementfi(cond)
: The end of an if() statementvariable(name)
: Turns JS syntax (e.g.js foo.bar[3].baz
) into syntax for this languageliteral(literal)
: Turn a JSON serializable object into code for describing it as a literal in this languageconcat(strings)
: Code to concatenate the provided stringsjsonEncode(variable)
: Code to convertvariable
to a JSON stringhtml
: A set of functions for generating HTML templates in this language (e.g. EJS for Node, ERB for Ruby)html.for(cond)
html.rof(cond)
html.if(cond)
html.fi(cond)
html.variable(name)
html.variableJS(name)
app
: A set of instructions for building code that serves a Single Page Application