How do I comment in CoffeeScript? "/* this */" doesn't work

77.2k views Asked by At

In what ways can you comment in CoffeeScript?

The documentation say you can use three hash symbols to start and close a comment block:

###
  Comments
  go
  here
###

I've found that I can sometimes use the following two formats

`// backticks allow for straight-JavaScript,
 // but the closing backtick can't be on a comment line (I think?)
`

Are there a simpler way to insert short comments in CoffeeScript?

Do NOT use this style**

Since this is getting a lot of views, I want to emphasize that

/* Comment goes here */

produces a MATH error when the /* is on its own line.

As Trevor pointed out in a comment on the question, this is a regular expression, NOT a comment!

5

There are 5 answers

3
Michael Durrant On BEST ANSWER

Use a single # sign

# like this

One character seems pretty minimal ;)

Also:

###
This block comment (useful for ©-Copyright info) also gets 
passed on to the browsers HTML /* like this! */
###
0
mu is too short On

The main way to comment is sh/Perl/Ruby/... style # comments:

# This comment goes to the end of the line
# and it won't appear in the "compiled"
# JavaScript version.

You use the block style ### comments when you want a comment to appear in the JavaScript version:

Sometimes you'd like to pass a block comment through to the generated JavaScript. For example, when you need to embed a licensing header at the top of a file. Block comments, which mirror the syntax for heredocs, are preserved in the generated code.

So if you start with

###
PancakeParser is Public Domain
###

then you'd get this JavaScript comment in the generated JavaScript:

/*
PancakeParser is Public Domain
*/
0
John Deighan On

For comments in the middle of a line, try:

if somecond `/* hi */` && some other cond, etc.

The backticks cause CoffeeScript to put the enclosed text into the generated JavaScript as is.

0
John Deighan On

Unfortunately, CoffeeScript is inconsistent with whether comments introduced with a single # character make it to the output JavaScript. For example:

# testme.coffee

fName = 'John'
lName = 'Smith'
fullName = "#{fName} #{lName}" # |||| $:
if true #comment
    console.log `/* hi */` 'Hello, World!'

compiles to

// Generated by CoffeeScript 2.7.0
(function() {
  // testme.coffee
  var fName, fullName, lName;

  fName = 'John';

  lName = 'Smith';

  fullName = `${fName} ${lName}`;

  if (true) { //comment
    console.log(/* hi */`Hello, World!`);
  }

}).call(this);

Note the missing comment on the line that assigns to fullName.

5
Mark Wilden On

Beware of ###! If you use ### to separate sections of code (as I do) it's awfully surprising when that code stops working as a result.