├── Snippets
├── error.tmSnippet
├── debug.tmSnippet
├── p.tmSnippet
├── puts.tmSnippet
├── mixin.tmSnippet
├── app.tmSnippet
├── _addCallback.tmSnippet
├── _addErrback.tmSnippet
├── _addCancelback.tmSnippet
├── require.tmSnippet
├── rmdir.tmSnippet
├── _addListener.tmSnippet
├── exec.tmSnippet
├── mkdir.tmSnippet
├── rename.tmSnippet
├── hashbang.tmSnippet
├── readdir.tmSnippet
├── cat.tmSnippet
├── stat.tmSnippet
└── exports.tmSnippet
├── Syntaxes
└── JavaScript Node.tmLanguage
├── Commands
└── Run File or Spec.tmCommand
├── README.md
└── info.plist
/Snippets/error.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | sys.error(${1:'${2:ALERT}'});
7 | name
8 | error
9 | scope
10 | source.js.node
11 | tabTrigger
12 | err
13 | uuid
14 | 0DE90632-511B-4AE1-B8D0-494702E8748E
15 |
16 |
17 |
--------------------------------------------------------------------------------
/Snippets/debug.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | sys.debug(${1:'${2:hello world}'});
7 | name
8 | debug
9 | scope
10 | source.js.node
11 | tabTrigger
12 | deb
13 | uuid
14 | D95BACCA-897E-4F09-9576-76A9C528FD28
15 |
16 |
17 |
--------------------------------------------------------------------------------
/Snippets/p.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | sys.${1:p}(${2:'${3:hello world}'});
7 | name
8 | p/puts/print
9 | scope
10 | source.js.node
11 | tabTrigger
12 | p
13 | uuid
14 | B820ECC8-CA27-4EFF-B14F-BC002C4AFE0B
15 |
16 |
17 |
--------------------------------------------------------------------------------
/Snippets/puts.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | sys.puts(${1:'${2:hello world}'});
7 | name
8 | puts
9 | scope
10 | source.js.node
11 | tabTrigger
12 | puts
13 | uuid
14 | B250F874-11E1-4C13-9E9E-EDE16DB6C1C6
15 |
16 |
17 |
--------------------------------------------------------------------------------
/Snippets/mixin.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | process.mixin(${1:exports}, {
7 | $0
8 | });
9 | name
10 | mixin
11 | scope
12 | source.js.node
13 | tabTrigger
14 | mixin
15 | uuid
16 | E114B311-9CD7-422E-BBDB-DF8930F5C5CD
17 |
18 |
19 |
--------------------------------------------------------------------------------
/Snippets/app.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | if (module.id == require.main.id) {
7 | $0
8 | }
9 |
10 | name
11 | app
12 | scope
13 | source.js.node
14 | tabTrigger
15 | app
16 | uuid
17 | B79BFD7D-FF06-402C-B2BA-F80EC68834D1
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Snippets/_addCallback.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | .addCallback(function(${1:e}) {
7 | $0
8 | });
9 | name
10 | .addCallback
11 | scope
12 | source.js.node
13 | tabTrigger
14 | .cb
15 | uuid
16 | 9D08A939-64FB-42F6-BE49-774D1BFB3954
17 |
18 |
19 |
--------------------------------------------------------------------------------
/Snippets/_addErrback.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | .addErrback(function(${1:e}) {
7 | $0
8 | });
9 | name
10 | .addErrback
11 | scope
12 | source.js.node
13 | tabTrigger
14 | .errb
15 | uuid
16 | 7598842A-4E1A-4744-BAC6-EFB1256D6021
17 |
18 |
19 |
--------------------------------------------------------------------------------
/Snippets/_addCancelback.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | .addCancelback(function(${1:e}) {
7 | $0
8 | });
9 | name
10 | .addCancelback
11 | scope
12 | source.js.node
13 | tabTrigger
14 | .canb
15 | uuid
16 | 9D54AD88-5150-4959-934A-307C587BB3AC
17 |
18 |
19 |
--------------------------------------------------------------------------------
/Snippets/require.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | var ${2:${1/(?:_|-)([A-Za-z0-9]+)(?:\.js)?/(?2::\u$1)/g}} = require('${1:sys}')$0;
7 | name
8 | require
9 | scope
10 | source.js.node
11 | tabTrigger
12 | req
13 | uuid
14 | 59AF7588-E4A5-4BD4-8CF0-50EDB8068520
15 |
16 |
17 |
--------------------------------------------------------------------------------
/Snippets/rmdir.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | posix.rmdir(${1:'${2:path}'})${5:.addCallback(function() {
7 | $0
8 | \})};
9 |
10 | name
11 | rmdir
12 | scope
13 | source.js.node
14 | tabTrigger
15 | rmdir
16 | uuid
17 | 7744B7DE-9DB0-48A2-A5F1-D15F54CEEEA1
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Snippets/_addListener.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | .addListener("${1:event}", function(${1:data}) {
7 | $0
8 | });
9 |
10 | name
11 | .addListener
12 | scope
13 | source.js.node
14 | tabTrigger
15 | .lis
16 | uuid
17 | 180C087D-09AE-4F15-8861-2ED02DDD673F
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Snippets/exec.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | sys.exec(${1:'${2:ls -al}'})${5:.addCallback(function (stdout, stderr) {
7 | $0
8 | \})};
9 | name
10 | exec
11 | scope
12 | source.js.node
13 | tabTrigger
14 | exec
15 | uuid
16 | C215A7E3-0F51-4671-99C8-D79DA19D9B02
17 |
18 |
19 |
--------------------------------------------------------------------------------
/Snippets/mkdir.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | posix.mkdir(${1:'${2:path}'}, ${3:'${4:mode}'})${5:.addCallback(function() {
7 | $0
8 | \})};
9 |
10 | name
11 | mkdir
12 | scope
13 | source.js.node
14 | tabTrigger
15 | rmdir
16 | uuid
17 | D63101FB-D494-44CD-BE60-F26F68FF6BE3
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Snippets/rename.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | posix.rename(${1:'${2:from}'}, ${3:'${4:to}'})${5:.addCallback(function() {
7 | $0
8 | \})};
9 |
10 | name
11 | rename
12 | scope
13 | source.js.node
14 | tabTrigger
15 | ren
16 | uuid
17 | 0D22ED48-FA6C-4B12-ADE8-9A40A556DFCA
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Snippets/hashbang.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | #!/usr/local/bin/node
7 |
8 | ${1:require.paths.push(__dirname);
9 | process.chdir(__dirname);
10 | }
11 | $0
12 | name
13 | hashbang
14 | scope
15 | source.js.node
16 | tabTrigger
17 | #!
18 | uuid
19 | 1D449A2E-5814-4E34-A833-8770873E7ED4
20 |
21 |
22 |
--------------------------------------------------------------------------------
/Snippets/readdir.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | posix.readdir(${1:'${2:path}'})${5:.addCallback(function(files) {
7 | ${10:sys.p(files);}$0
8 | \})};
9 |
10 | name
11 | readdir
12 | scope
13 | source.js.node
14 | tabTrigger
15 | readdir
16 | uuid
17 | D2F95B9E-1273-477A-9018-05C91E8653B4
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Snippets/cat.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | posix.cat(${1:'${2:path}'}${3:, '${4:utf8}'})${5:.addCallback(function(content) {
7 | ${10:sys.puts(content);}$0
8 | \})};
9 |
10 | name
11 | cat
12 | scope
13 | source.js.node
14 | tabTrigger
15 | cat
16 | uuid
17 | 483223F6-814F-4836-A105-DE8F6BA56281
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Snippets/stat.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | posix.stat(${1:'${2:path}'}).addCallback(function(stats) {
7 | ${10:sys.puts("stats: " + JSON.stringify(stats));}$0
8 | });
9 |
10 | name
11 | stat
12 | scope
13 | source.js.node
14 | tabTrigger
15 | stat
16 | uuid
17 | F430F77A-4D98-4D2D-B816-87B963A61717
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Snippets/exports.tmSnippet:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | content
6 | `#!/usr/bin/env ruby
7 | if File.read(ENV['TM_FILEPATH']) =~ /^var ([\w_]*?) = exports;/m
8 | print $1
9 | else
10 | print "exports"
11 | end
12 | `.${2:name} = function(${3:arguments}) {
13 | $0
14 | };
15 | name
16 | exports
17 | scope
18 | source.js.node
19 | tabTrigger
20 | exp
21 | uuid
22 | 5997D597-577F-4521-86D8-7119B0D86D1B
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Syntaxes/JavaScript Node.tmLanguage:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | comment
6 | node.js
7 | foldingStartMarker
8 | (^.*{[^}]*$|^.*\([^\)]*$|^.*/\*(?!.*\*/).*$)
9 | foldingStopMarker
10 | (^\s*\}|^\s*\)|^(?!.*/\*).*\*/)
11 | keyEquivalent
12 | ^~N
13 | name
14 | JavaScript Node
15 | patterns
16 |
17 |
18 | match
19 | \b(exports)\b
20 | name
21 | variable.language.module.js
22 |
23 |
24 | include
25 | source.js
26 |
27 |
28 | scopeName
29 | source.js.node
30 | uuid
31 | 17076F45-FE22-4123-AD00-0C8E31BC2EB8
32 |
33 |
34 |
--------------------------------------------------------------------------------
/Commands/Run File or Spec.tmCommand:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | beforeRunningCommand
6 | saveActiveFile
7 | command
8 | #!/usr/bin/env node
9 |
10 | // NOTE: This original implementation has support for running node.js/express web application jspec test files. This will be extracted into a separate bundle + command at some stage.
11 |
12 | var sys = require("sys");
13 | if(process.ENV.TM_FILENAME.match(/(.*)spec\.js/)) {
14 | require.paths.unshift(process.ENV.TM_BUNDLE_SUPPORT + '/spec/lib');
15 | if (typeof process.ENV.TM_PROJECT_DIRECTORY != "undefined" && process.ENV.TM_PROJECT_DIRECTORY != null && process.ENV.TM_PROJECT_DIRECTORY != "") {
16 | require.paths.unshift(process.ENV.TM_PROJECT_DIRECTORY + '/lib');
17 | require.paths.unshift(process.ENV.TM_PROJECT_DIRECTORY + '/src');
18 | require.paths.unshift(process.ENV.TM_PROJECT_DIRECTORY + '/spec');
19 | }
20 | require("jspec");
21 |
22 | quit = process.exit;
23 | print = puts;
24 |
25 | readFile = function(path) {
26 | var promise = require('posix').cat(path, "utf8");
27 | var result = '';
28 | promise.addErrback(function(){ throw "failed to read file `" + path + "'"; });
29 | promise.addCallback(function(contents){
30 | result = contents;
31 | });
32 | promise.wait();
33 | return result;
34 | };
35 |
36 | GLOBAL.console = {
37 | log: sys.puts,
38 | warn: sys.puts,
39 | error: sys.puts,
40 | group: function(){},
41 | groupEnd: function(){}
42 | };
43 | JSpec.exec(process.ENV.TM_FILEPATH);
44 | JSpec.run({ formatter: JSpec.formatters.Console, failuresOnly: true });
45 | JSpec.report();
46 |
47 | } else {
48 | var script = process.createChildProcess("node", [process.ENV.TM_FILEPATH]);
49 | script.addListener("output", function(data) {
50 | if (data !== null) { sys.puts(data); }
51 | });
52 | script.addListener("error", function(data) {
53 | if (data !== null) { sys.puts("ERROR: " + data); }
54 | });
55 | }
56 |
57 | input
58 | document
59 | keyEquivalent
60 | @r
61 | name
62 | Run File or Spec
63 | output
64 | showAsTooltip
65 | scope
66 | source.js.node
67 | uuid
68 | 5ECAB6F6-77CD-4A15-A646-BE4B01B3944F
69 |
70 |
71 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Textmate Bundle for Node.JS
2 |
3 | ## Common commands and short-cuts
4 |
5 | Important: Change your current grammar to "JavaScript Node" (short cut: Shift+Ctrl+Alt+N)
6 |
7 | * Cmd+R - run current file within node
8 | * req => var sys = require('sys');
9 | * mixin => process.mixin(exports, {...});
10 | * exp => exports.func_name = function() {...};
11 | * process snippets
12 | * .lis - .addListener(...)
13 | * .cb - .addCallback(...)
14 | * .errb - .addErrback(...)
15 | * .canb - .addCancalback(...)
16 | * sys module:
17 | * puts - sys.puts('string');
18 | * p - sys.p('string');
19 | * debug - sys.debug('string');
20 | * error - sys.error('string');
21 | * exec - sys.exec('command').addCallback(...);
22 | * posix module:
23 | * cat, mkdir, readdir, rename, rmdir, stat
24 |
25 | Others:
26 |
27 | * app => if (module.id == require.main.id) { .. }
28 |
29 | ## Installation
30 |
31 | mkdir -p ~/Library/Application\ Support/TextMate/Bundles/
32 | cd ~/Library/Application\ Support/TextMate/Bundles
33 | git clone git://github.com/magnars/javascript-node.tmbundle.git "JavaScript Node.tmbundle"
34 | osascript -e 'tell app "TextMate" to reload bundles'
35 |
36 | Alternately, in TextMate, from your drop down menu, select Bundles -> Bundle Editor -> Reload Bundles.
37 |
38 | ## Credits
39 |
40 | The Node.JS TM Bundle is currently authored by Dr Nic Williams. Contributors and co-maintainers are welcome.
41 |
42 | * **Dr Nic** - Author/Main contributor
43 |
44 | ## License
45 |
46 | Copyright (c) 2009-2010 Dr Nic Williams, Mocra
47 |
48 | Permission is hereby granted, free of charge, to any person obtaining a copy
49 | of this software and associated documentation files (the "Software"), to deal
50 | in the Software without restriction, including without limitation the rights
51 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
52 | copies of the Software, and to permit persons to whom the Software is
53 | furnished to do so, subject to the following conditions:
54 |
55 | The above copyright notice and this permission notice shall be included in
56 | all copies or substantial portions of the Software.
57 |
58 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
59 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
60 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
61 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
62 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
63 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
64 | THE SOFTWARE.
65 |
--------------------------------------------------------------------------------
/info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | mainMenu
6 |
7 | items
8 |
9 | 5ECAB6F6-77CD-4A15-A646-BE4B01B3944F
10 | 59AF7588-E4A5-4BD4-8CF0-50EDB8068520
11 | 601B0CE2-907F-4C6B-B954-E8A94E657B18
12 | FECBF846-C17D-45FC-A59D-DF9D24BB999D
13 | C0C835F9-8F27-4C53-8215-8D8C983A4215
14 |
15 | submenus
16 |
17 | 601B0CE2-907F-4C6B-B954-E8A94E657B18
18 |
19 | items
20 |
21 | 180C087D-09AE-4F15-8861-2ED02DDD673F
22 | 9D08A939-64FB-42F6-BE49-774D1BFB3954
23 | 7598842A-4E1A-4744-BAC6-EFB1256D6021
24 | 9D54AD88-5150-4959-934A-307C587BB3AC
25 |
26 | name
27 | promises
28 |
29 | C0C835F9-8F27-4C53-8215-8D8C983A4215
30 |
31 | items
32 |
33 | 483223F6-814F-4836-A105-DE8F6BA56281
34 | D63101FB-D494-44CD-BE60-F26F68FF6BE3
35 | D2F95B9E-1273-477A-9018-05C91E8653B4
36 | 0D22ED48-FA6C-4B12-ADE8-9A40A556DFCA
37 | 7744B7DE-9DB0-48A2-A5F1-D15F54CEEEA1
38 | F430F77A-4D98-4D2D-B816-87B963A61717
39 |
40 | name
41 | posix
42 |
43 | FECBF846-C17D-45FC-A59D-DF9D24BB999D
44 |
45 | items
46 |
47 | B820ECC8-CA27-4EFF-B14F-BC002C4AFE0B
48 | B250F874-11E1-4C13-9E9E-EDE16DB6C1C6
49 | D95BACCA-897E-4F09-9576-76A9C528FD28
50 | 0DE90632-511B-4AE1-B8D0-494702E8748E
51 | C215A7E3-0F51-4671-99C8-D79DA19D9B02
52 |
53 | name
54 | sys
55 |
56 |
57 |
58 | name
59 | JavaScript Node
60 | ordering
61 |
62 | 17076F45-FE22-4123-AD00-0C8E31BC2EB8
63 | 5ECAB6F6-77CD-4A15-A646-BE4B01B3944F
64 | 59AF7588-E4A5-4BD4-8CF0-50EDB8068520
65 | E114B311-9CD7-422E-BBDB-DF8930F5C5CD
66 | 5997D597-577F-4521-86D8-7119B0D86D1B
67 | 180C087D-09AE-4F15-8861-2ED02DDD673F
68 | 9D08A939-64FB-42F6-BE49-774D1BFB3954
69 | 7598842A-4E1A-4744-BAC6-EFB1256D6021
70 | 9D54AD88-5150-4959-934A-307C587BB3AC
71 | B820ECC8-CA27-4EFF-B14F-BC002C4AFE0B
72 | B250F874-11E1-4C13-9E9E-EDE16DB6C1C6
73 | D95BACCA-897E-4F09-9576-76A9C528FD28
74 | 0DE90632-511B-4AE1-B8D0-494702E8748E
75 | C215A7E3-0F51-4671-99C8-D79DA19D9B02
76 | F430F77A-4D98-4D2D-B816-87B963A61717
77 | 0D22ED48-FA6C-4B12-ADE8-9A40A556DFCA
78 | 7744B7DE-9DB0-48A2-A5F1-D15F54CEEEA1
79 | D63101FB-D494-44CD-BE60-F26F68FF6BE3
80 | D2F95B9E-1273-477A-9018-05C91E8653B4
81 | 483223F6-814F-4836-A105-DE8F6BA56281
82 |
83 | uuid
84 | B4B8CCA9-FD56-471B-B7D8-A7B1A1B06E78
85 |
86 |
87 |
--------------------------------------------------------------------------------