moved the coffeescript extension over from .cs to .coffee -- let's leave C# in peace. Changed array comprehensions to always return their mapped result, even when unassigned

This commit is contained in:
Jeremy Ashkenas
2009-12-25 14:18:05 -08:00
parent e494d520ea
commit d46bf8ee71
51 changed files with 127 additions and 147 deletions

View File

@@ -5,7 +5,7 @@
<key>name</key>
<string>comments</string>
<key>scope</key>
<string>source.cs</string>
<string>source.coffee</string>
<key>settings</key>
<dict>
<key>shellVariables</key>

View File

@@ -6,8 +6,7 @@
<string>CoffeeScript Syntax: version 1</string>
<key>fileTypes</key>
<array>
<string>cs</string>
<string>coffeescript</string>
<string>coffee</string>
</array>
<key>name</key>
<string>CoffeeScript</string>
@@ -19,22 +18,22 @@
<key>1</key>
<dict>
<key>name</key>
<string>entity.name.function.cs</string>
<string>entity.name.function.coffee</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>keyword.operator.cs</string>
<string>keyword.operator.coffee</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>variable.parameter.function.cs</string>
<string>variable.parameter.function.coffee</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>storage.type.function.cs</string>
<string>storage.type.function.coffee</string>
</dict>
</dict>
<key>comment</key>
@@ -42,7 +41,7 @@
<key>match</key>
<string>([a-zA-Z_?.$]*)\s*(=|:)\s*([\w,\s]*?)\s*(=&gt;)</string>
<key>name</key>
<string>meta.function.cs</string>
<string>meta.function.coffee</string>
</dict>
<dict>
<key>captures</key>
@@ -50,12 +49,12 @@
<key>1</key>
<dict>
<key>name</key>
<string>variable.parameter.function.cs</string>
<string>variable.parameter.function.coffee</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>storage.type.function.cs</string>
<string>storage.type.function.coffee</string>
</dict>
</dict>
<key>comment</key>
@@ -63,7 +62,7 @@
<key>match</key>
<string>([a-zA-Z_?., $]*)\s*(=&gt;)</string>
<key>name</key>
<string>meta.inline.function.cs</string>
<string>meta.inline.function.coffee</string>
</dict>
<dict>
<key>captures</key>
@@ -71,12 +70,12 @@
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.new.cs</string>
<string>keyword.operator.new.coffee</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>entity.name.type.instance.cs</string>
<string>entity.name.type.instance.coffee</string>
</dict>
</dict>
<key>match</key>
@@ -88,7 +87,7 @@
<key>match</key>
<string>\b((0(x|X)[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?(e[+\-]?[0-9]+)?))\b</string>
<key>name</key>
<string>constant.numeric.cs</string>
<string>constant.numeric.coffee</string>
</dict>
<dict>
<key>begin</key>
@@ -98,7 +97,7 @@
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.cs</string>
<string>punctuation.definition.string.begin.coffee</string>
</dict>
</dict>
<key>end</key>
@@ -108,18 +107,18 @@
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.cs</string>
<string>punctuation.definition.string.end.coffee</string>
</dict>
</dict>
<key>name</key>
<string>string.quoted.single.cs</string>
<string>string.quoted.single.coffee</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)</string>
<key>name</key>
<string>constant.character.escape.cs</string>
<string>constant.character.escape.coffee</string>
</dict>
</array>
</dict>
@@ -131,7 +130,7 @@
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.cs</string>
<string>punctuation.definition.string.begin.coffee</string>
</dict>
</dict>
<key>end</key>
@@ -141,18 +140,18 @@
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.cs</string>
<string>punctuation.definition.string.end.coffee</string>
</dict>
</dict>
<key>name</key>
<string>string.quoted.double.cs</string>
<string>string.quoted.double.coffee</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)</string>
<key>name</key>
<string>constant.character.escape.cs</string>
<string>constant.character.escape.coffee</string>
</dict>
</array>
</dict>
@@ -164,7 +163,7 @@
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.cs</string>
<string>punctuation.definition.string.begin.coffee</string>
</dict>
</dict>
<key>end</key>
@@ -174,18 +173,18 @@
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.cs</string>
<string>punctuation.definition.string.end.coffee</string>
</dict>
</dict>
<key>name</key>
<string>string.quoted.script.cs</string>
<string>string.quoted.script.coffee</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)</string>
<key>name</key>
<string>constant.character.escape.cs</string>
<string>constant.character.escape.coffee</string>
</dict>
</array>
</dict>
@@ -195,61 +194,61 @@
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.cs</string>
<string>punctuation.definition.comment.coffee</string>
</dict>
</dict>
<key>match</key>
<string>(#).*$\n?</string>
<key>name</key>
<string>comment.line.cs</string>
<string>comment.line.coffee</string>
</dict>
<dict>
<key>match</key>
<string>\b(break|when|catch|continue|else|finally|for|if|return|switch|then|throw|try|unless|while)\b</string>
<key>name</key>
<string>keyword.control.cs</string>
<string>keyword.control.coffee</string>
</dict>
<dict>
<key>match</key>
<string>\b(true|on|yes)\b</string>
<key>name</key>
<string>constant.language.boolean.true.cs</string>
<string>constant.language.boolean.true.coffee</string>
</dict>
<dict>
<key>match</key>
<string>\b(false|off|no)\b</string>
<key>name</key>
<string>constant.language.boolean.false.cs</string>
<string>constant.language.boolean.false.coffee</string>
</dict>
<dict>
<key>match</key>
<string>\bnull\b</string>
<key>name</key>
<string>constant.language.null.cs</string>
<string>constant.language.null.coffee</string>
</dict>
<dict>
<key>match</key>
<string>\b(super|this|extends)\b</string>
<key>name</key>
<string>variable.language.cs</string>
<string>variable.language.coffee</string>
</dict>
<dict>
<key>match</key>
<string>\b(debugger)\b</string>
<key>name</key>
<string>keyword.other.cs</string>
<string>keyword.other.coffee</string>
</dict>
<dict>
<key>match</key>
<string>!|\$|%|&amp;|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|&lt;=|&gt;=|&lt;&lt;=|&gt;&gt;=|&gt;&gt;&gt;=|&lt;&gt;|&lt;|&gt;|!|&amp;&amp;|\?|\|\||\:|\*=|(?&lt;!\()/=|%=|\+=|\-=|&amp;=|\^=|\b(in|instanceof|new|delete|typeof|and|or|is|isnt|not)\b</string>
<key>name</key>
<string>keyword.operator.cs</string>
<string>keyword.operator.coffee</string>
</dict>
<dict>
<key>match</key>
<string>\b(Infinity|NaN|undefined)\b</string>
<key>name</key>
<string>constant.language.cs</string>
<string>constant.language.coffee</string>
</dict>
<dict>
<key>begin</key>
@@ -259,7 +258,7 @@
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.cs</string>
<string>punctuation.definition.string.begin.coffee</string>
</dict>
</dict>
<key>end</key>
@@ -269,18 +268,18 @@
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.cs</string>
<string>punctuation.definition.string.end.coffee</string>
</dict>
</dict>
<key>name</key>
<string>string.regexp.cs</string>
<string>string.regexp.coffee</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\.</string>
<key>name</key>
<string>constant.character.escape.cs</string>
<string>constant.character.escape.coffee</string>
</dict>
</array>
</dict>
@@ -288,41 +287,41 @@
<key>match</key>
<string>\;</string>
<key>name</key>
<string>punctuation.terminator.statement.cs</string>
<string>punctuation.terminator.statement.coffee</string>
</dict>
<dict>
<key>match</key>
<string>,[ |\t]*</string>
<key>name</key>
<string>meta.delimiter.object.comma.cs</string>
<string>meta.delimiter.object.comma.coffee</string>
</dict>
<dict>
<key>match</key>
<string>\.</string>
<key>name</key>
<string>meta.delimiter.method.period.cs</string>
<string>meta.delimiter.method.period.coffee</string>
</dict>
<dict>
<key>match</key>
<string>\{|\}</string>
<key>name</key>
<string>meta.brace.curly.cs</string>
<string>meta.brace.curly.coffee</string>
</dict>
<dict>
<key>match</key>
<string>\(|\)</string>
<key>name</key>
<string>meta.brace.round.cs</string>
<string>meta.brace.round.coffee</string>
</dict>
<dict>
<key>match</key>
<string>\[|\]</string>
<key>name</key>
<string>meta.brace.square.cs</string>
<string>meta.brace.square.coffee</string>
</dict>
</array>
<key>scopeName</key>
<string>source.cs</string>
<string>source.coffee</string>
<key>uuid</key>
<string>5B520980-A7D5-4E10-8582-1A4C889A8DE5</string>
</dict>

View File

@@ -13,7 +13,7 @@ module CoffeeScript
coffee-script compiles CoffeeScript source files into JavaScript.
Usage:
coffee-script path/to/script.cs
coffee-script path/to/script.coffee
EOS
# Seconds to pause between checks for changed source files.

View File

@@ -1,4 +1,4 @@
# This (javascript) file is generated from lib/coffee_script/narwhal/coffee-script.cs
# This (javascript) file is generated from lib/coffee_script/narwhal/coffee-script.coffee
# Executes the `coffee-script` Ruby program to convert from CoffeeScript
# to Javascript. Eventually this will hopefully happen entirely within JS.

View File

@@ -1,6 +1,6 @@
(function(){
// This (javascript) file is generated from lib/coffee_script/narwhal/coffee-script.cs Executes the `coffee-script` Ruby program to convert from CoffeeScript
// This (javascript) file is generated from lib/coffee_script/narwhal/coffee-script.coffee Executes the `coffee-script` Ruby program to convert from CoffeeScript
// to Javascript. Eventually this will hopefully happen entirely within JS. Require external dependencies.
var OS = require('os');
var File = require('file');

View File

@@ -1,6 +1,6 @@
(function(){
// This (javascript) file is generated from lib/coffee_script/narwhal/loader.cs
// This (javascript) file is generated from lib/coffee_script/narwhal/loader.coffee
var coffeescript = null;
var factories = {
};
@@ -16,5 +16,5 @@
return factories[topId] = factories[topId] || this.reload(topId, path);
}
};
require.loader.loaders.unshift([".cs", loader]);
require.loader.loaders.unshift([".coffee", loader]);
})();

View File

@@ -1,4 +1,4 @@
# This (javascript) file is generated from lib/coffee_script/narwhal/loader.cs
# This (javascript) file is generated from lib/coffee_script/narwhal/loader.coffee
coffeescript: null
factories: {}
@@ -16,4 +16,4 @@ loader: {
}
require.loader.loaders.unshift([".cs", loader])
require.loader.loaders.unshift([".coffee", loader])

View File

@@ -506,32 +506,28 @@ module CoffeeScript
def compile(o={})
o = super(o)
scope = o[:scope]
name_found = scope.find(@name)
index_found = @index && scope.find(@index)
svar = scope.free_variable
ivar = scope.free_variable
lvar = scope.free_variable
name_part = name_found ? @name : "var #{@name}"
index_name = @index ? (index_found ? @index : "var #{@index}") : nil
source_part = "var #{svar} = #{@source.compile(o)};"
for_part = "var #{ivar}=0, #{lvar}=#{svar}.length; #{ivar}<#{lvar}; #{ivar}++"
var_part = "\n#{o[:indent] + TAB}#{name_part} = #{svar}[#{ivar}];\n"
index_part = @index ? "#{o[:indent] + TAB}#{index_name} = #{ivar};\n" : ''
scope = o[:scope]
name_found = scope.find(@name)
index_found = @index && scope.find(@index)
svar = scope.free_variable
ivar = scope.free_variable
lvar = scope.free_variable
rvar = scope.free_variable
name_part = name_found ? @name : "var #{@name}"
index_name = @index ? (index_found ? @index : "var #{@index}") : nil
source_part = "var #{svar} = #{@source.compile(o)};"
for_part = "var #{ivar}=0, #{lvar}=#{svar}.length; #{ivar}<#{lvar}; #{ivar}++"
var_part = "\n#{o[:indent] + TAB}#{name_part} = #{svar}[#{ivar}];\n"
index_part = @index ? "#{o[:indent] + TAB}#{index_name} = #{ivar};\n" : ''
body = @body
suffix = ';'
set_result = "var #{rvar} = [];\n#{o[:indent]}"
save_result = "#{rvar}[#{ivar}] = "
return_result = rvar
set_result = ''
save_result = ''
return_result = ''
body = @body
suffix = ';'
if o[:return] || o[:assign]
rvar = scope.free_variable
set_result = "var #{rvar} = [];\n#{o[:indent]}"
save_result += "#{rvar}[#{ivar}] = "
return_result = rvar
return_result = "#{o[:assign]} = #{return_result};" if o[:assign]
return_result = "return #{return_result};" if o[:return]
return_result = "\n#{o[:indent]}#{return_result}"
return_result = "#{o[:assign]} = #{return_result}" if o[:assign]
return_result = "return #{return_result}" if o[:return]
if @filter
body = CallNode.new(ValueNode.new(LiteralNode.new(rvar), [AccessorNode.new('push')]), [@body])
body = IfNode.new(@filter, body, nil, :statement => true)
@@ -542,6 +538,7 @@ module CoffeeScript
body = IfNode.new(@filter, @body)
end
return_result = "\n#{o[:indent]}#{return_result};"
indent = o[:indent] + TAB
body = body.compile(o.merge(:indent => indent))
write("#{source_part}\n#{o[:indent]}#{set_result}for (#{for_part}) {#{var_part}#{index_part}#{indent}#{save_result}#{body}#{suffix}\n#{o[:indent]}}#{return_result}")