docs/style_guide.coffee

Coffeescript Style Guide for BokehJS

General guidelines

  • 2 spaces per indent
  • 80 characters per line

Names

Use underscores ('snake case') for variable names

foo = 10 some_thing = 20

...for function names

my_func = (a, b) ->

...and for method names

class Foo my_method: (foo) ->

Use CamelCase ('CapWords') for class names

class SomeThing extends Backbone.Model

Use initial underscore to mark "private" methods and attribute in classes

class Foo public_method: () -> console.log('a public method') @_private_method() # OK to call from another method _private_method: () -> console.log('should only be called by other methods of this class') _private_attr = 10 # should not be accessed outside methods

Functions

Always use parentheses around function calls

console.log('call me like this')

i.e., don't do this:

console.log 'not like this'

Always use parenthesis when defining a function:

foo = (a, b, c) ->

Even if there are no arguments:

foo = () ->

For inline functions definitions, use 4 spaces before the start of the function definition and 2 spaces before the comma separating function arguments:

some_foo(1, 2, 3, () -> my_callback_goes_here() a = 'node': 'fast' return a , () -> second_callback_goes_here() )

Always return something, or null (do not rely on CoffeeScript's implicit return value)

foo = () -> a = 10 return null

don't do this:

foo = () -> a = 10

Object Literals

OK to omit braces for object literals that are standalone

obj = coffee: 'black' cream: 'none' bagels: cream_cheese: 'fat_free' toasted: 'of course'

In function calls, prefer to put braces around object literals

foo({'name': 'John Doe', 'title': 'coder'})

Note: object literals in function calls which do NOT fit in one line can be tricky. This won't compile:

foo({'name': 'firstobject',
  'title': 'first'})
foo({ 'foo': 10, 'bar': 20, })