Compare commits

...

26 Commits

Author SHA1 Message Date
Derek Schmidt 41dca29833 Initial tree-sitter implimentation 2021-10-22 17:17:57 -07:00
theRemix 9bacfaa695 Merge pull request #34 from tong/master
Update CHANGELOG
2017-03-11 20:00:11 -10:00
theRemix 77e901fab7 Merge branch 'master' into master 2017-03-11 19:59:55 -10:00
Jon Borgonia 510965fefe Prepare 0.6.0 release 2017-03-11 19:58:59 -10:00
theRemix 65b71e0494 Merge pull request #32 from tong/dev
First line #! hashbang grammar and some minor snippet updates
2017-03-11 19:57:28 -10:00
tong b4a0bd085d Update CHANGELOG 2017-02-02 13:26:57 +01:00
Jon Borgonia 7ec41ac94b Prepare 0.5.4 release 2017-01-28 21:38:36 -10:00
theRemix 2a2fc2fd3f Merge pull request #33 from tong/haxe-3.4.0-RC1
Update hxml defines grammar to haxe 3.4.0-rc.1
2017-01-28 21:37:57 -10:00
tong 00d843fe8a Update hxml defines grammar to haxe 3.4.0-rc.1 2016-12-05 18:45:42 +01:00
tong f1c0f0ebe2 Add haxelib.json grammar extending json 2016-10-29 03:19:44 +02:00
tong 0281d182e4 Update CHANGELOG 2016-10-18 16:24:53 +02:00
tong ced3ed06a5 Grammar: recognize interpreter directives (hashbang), emac, vim mode 2016-10-18 16:18:56 +02:00
tong ec8ec0f138 Snippets: minor cleanup and additions 2016-10-18 15:43:19 +02:00
tong 09ca683171 Sniipe: fix `return snippet` 2016-10-18 15:23:44 +02:00
tong 350f2d2e75 Snippets: more keywords, documentation, std library core types 2016-10-18 15:19:31 +02:00
tong 12d4e775a9 Snippets: remove `continue` line break 2016-10-18 14:47:00 +02:00
tong 086a9dfed3 Merge branch 'master' into dev 2016-10-18 14:43:41 +02:00
Jon Borgonia 2477c22882 Prepare 0.5.3 release 2016-10-06 04:15:30 -10:00
theRemix 5a1571b1e8 Merge pull request #30 from tong/0.5.3
Snippets cleanup
2016-10-06 04:14:55 -10:00
tong 3eb5f1cb1e Snippets: fix comment line ending 2016-10-06 15:44:07 +02:00
tong 3b62a6d844 Update CHANGELOG 2016-10-06 10:45:06 +02:00
tong 97ac2f9ee4 Snippets: remove unnecessary line endings 2016-10-05 14:14:14 +02:00
tong 30e951f2ac Snippets: description urls for Array/List/Map 2016-10-05 14:00:21 +02:00
tong 5c51440547 Snippets: remove Array/List/Map parentheses 2016-10-05 13:54:06 +02:00
tong b631dd3bf8 Merge branch 'master' into dev 2016-10-05 13:49:53 +02:00
tong 20527cab89 Snippets: remove parentheses for Array/List/Map 2016-10-05 13:48:31 +02:00
10 changed files with 409 additions and 168 deletions

View File

@ -1,7 +1,20 @@
## 0.6.0
* Snippets: cast, dynamic, using
* Snippets: std library top level definitions
* Grammars: recognises interpreter directives, emacs modelines, vim modelines
## 0.5.4
* Update grammar to haxe 3.4.0-rc.1
## 0.5.3
* Snippets: remove unnecessary line endings
* Snippets: description urls for Array/List/Map
* Snippets: remove Array/List/Map parentheses
## 0.5.2
* Fix scope name
* Snippets: null
* Snippets: hxml -D <v> definitions
* Snippets: hxml -D <v> definitions
* Spec: fixes "tokenizes the #{keyword} keyword"
## 0.5.1

View File

@ -2,6 +2,25 @@
'name': 'Haxe'
'comment': 'Haxe Syntax: version 3.3.0'
'fileTypes': ['hx']
'firstLineMatch': '''(?x)
# Hashbang
^\\#!.*(?:\\s|\\/)
haxe
(?:$|\\s)
|
# Modeline
(?i:
# Emacs
-\\*-(?:\\s*(?=[^:;\\s]+\\s*-\\*-)|(?:.*?[;\\s]|(?<=-\\*-))mode\\s*:\\s*)
haxe
(?=[\\s;]|(?<![-*])-\\*-).*?-\\*-
|
# Vim
(?:(?:\\s|^)vi(?:m[<=>]?\\d+|m)?|\\sex)(?=:(?=\\s*set?\\s[^\\n:]+:)|:(?!\\s*set?\\s))(?:(?:\\s|\\s*:\\s*)\\w*(?:\\s*=(?:[^\\n\\\\\\s]|\\\\.)*)?)*[\\s:](?:filetype|ft|syntax)\\s*=
haxe
(?=\\s|:|$)
)
'''
'foldingStartMarker': '(\\{\\s*(//.*)?$|^\\s*// \\{\\{\\{|#if)'
'foldingStopMarker': '^\\s*(\\}|// \\}\\}\\}$|#end)'
'patterns': [

View File

@ -0,0 +1,6 @@
'scopeName': 'source.haxelib'
'fileTypes': ['json']
'name': 'haxelib'
'patterns': [
{ 'include': 'source.json' }
]

View File

@ -9,7 +9,7 @@
'name': 'keyword.compiler.arguments.hxml'
}
{
'match': '(absolute-path|advanced-telemetry|annotate-source|as3|check-xml-proxy|core-api|core-api-serialize|cppia|dce|dce-debug|debug|display|display-stdin|dll-export|dll-import|doc-gen|dump|dump-dependencies|dump-ignore-var-ids|dynamic-interface-closures|erase-generics|fast-cast|fdb|file-extension|flash-strict|flash-use-stage|force-lib-check|force-native-property|format-warning|gencommon-debug|haxe-boot|haxe-ver|hxcpp-api-level|include-prefix|interp|java-ver|jquery-ver|js-classic|js-es5|js-unflatten|keep-old-output|loop-unroll-max-cost|lua-jit|lua-ver|macro|macro-times|neko-source|neko-v1|net-target|net-ver|network-sandbox|no-analyzer|no-compilation|no-copt|no-debug|no-deprecation-warnings|no-flash-override|no-inline|no-macro-cache|no-opt|no-pattern-matching|no-root|no-simplify|no-swf-compress|no-traces|objc|php-prefix|real-position|replace-files|scriptable|shallow-expose|source-header|source-map-content|swc|swf-compress-level|swf-debug-password|swf-direct-blit|swf-gpu|swf-metadata|swf-preloader-frame|swf-protected|swf-script-timeout|swf-use-doabc|sys|unsafe|use-nekoc|use-rtti-doc|vcproj)'
'match': '(absolute-path|advanced-telemetry|annotate-source|as3|check-xml-proxy|core-api|core-api-serialize|cppia|dce|dce-debug|debug|display|display-stdin|dll-export|dll-import|doc-gen|dump|dump-dependencies|dump-ignore-var-ids|dynamic-interface-closures|erase-generics|fast-cast|fdb|file-extension|flash-strict|flash-use-stage|force-lib-check|force-native-property|format-warning|gencommon-debug|haxe-boot|haxe-ver|hxcpp-api-level|include-prefix|interp|java-ver|jquery-ver|js-classic|js-es|js-source-map|js-unflatten|keep-old-output|loop-unroll-max-cost|lua-jit|lua-ver|macro|macro-debug|macro-times|neko-source|neko-v1|net-target|net-ver|network-sandbox|no-analyzer|no-compilation|no-copt|no-debug|no-deprecation-warnings|no-flash-override|no-inline|no-macro-cache|no-opt|no-pattern-matching|no-root|no-swf-compress|no-traces|objc|php-prefix|real-position|replace-files|scriptable|shallow-expose|source-header|source-map-content|swc|swf-compress-level|swf-debug-password|swf-direct-blit|swf-gpu|swf-metadata|swf-preloader-frame|swf-protected|swf-script-timeout|swf-use-doabc|sys|unsafe|use-nekoc|use-rtti-doc|vcproj)'
'name': 'keyword.compiler.flags.hxml'
}
{

View File

@ -0,0 +1,63 @@
name: 'Haxe'
scopeName: 'source.haxe'
type: 'tree-sitter'
parser: 'tree-sitter-haxe'
fileTypes: ['hx']
firstLineMatch: '''(?x)
# Hashbang
^\\#!.*(?:\\s|\\/)
haxe
(?:$|\\s)
|
# Modeline
(?i:
# Emacs
-\\*-(?:\\s*(?=[^:;\\s]+\\s*-\\*-)|(?:.*?[;\\s]|(?<=-\\*-))mode\\s*:\\s*)
haxe
(?=[\\s;]|(?<![-*])-\\*-).*?-\\*-
|
# Vim
(?:(?:\\s|^)vi(?:m[<=>]?\\d+|m)?|\\sex)(?=:(?=\\s*set?\\s[^\\n:]+:)|:(?!\\s*set?\\s))(?:(?:\\s|\\s*:\\s*)\\w*(?:\\s*=(?:[^\\n\\\\\\s]|\\\\.)*)?)*[\\s:](?:filetype|ft|syntax)\\s*=
haxe
(?=\\s|:|$)
)
'''
folds: [
{ type: 'comment' }
]
comments:
start: '// '
scopes:
'module': 'source.haxe'
'comment': 'comment.line.double-slash.haxe'
'keyword': 'keyword.control'
'package_statement > keyword': 'keyword.package.haxe'
'import_statement > keyword': 'storage.import.haxe'
'import_statement > attribute > identifier': 'entity.name.type.import.haxe'
'class_declaration > keyword': 'storage.class.haxe'
'class_declaration > identifier': 'entity.name.type.class.haxe'
'class_declaration > attribute > identifier': 'entity.other.inherited-class.haxe'
'function_declaration > keyword': 'keyword.function.haxe'
'function_declaration > identifier': 'entity.name.type.function.haxe'
'variable_declaration > keyword': 'keyword.variable.haxe'
'call > attribute:nth-child(0) > identifier': [
{ match: 'super|trace', scopes: 'support.function.haxe'},
{ match: '^[A-Z]', scopes: 'support.type.contructor' },
'entity.name.function',
]
'attribute > identifier': [
{ match: '^[A-Z]', scopes: 'entity.name.type.package' },
{ match: 'this|super', scopes: 'variable.language.haxe' },
]
'type > identifier': 'support.storage.type'

21
package-lock.json generated Normal file
View File

@ -0,0 +1,21 @@
{
"name": "language-haxe",
"version": "0.6.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"nan": {
"version": "2.15.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
"integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ=="
},
"tree-sitter-haxe": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/tree-sitter-haxe/-/tree-sitter-haxe-0.1.0.tgz",
"integrity": "sha512-uhzG4GtA21mZhc38dstae3XLmiFYF0HfW82PLqIZ7E7nUZV3un208BiB0iOTv/uLHv3VyvNPOAVeEQ1eNL+ulQ==",
"requires": {
"nan": "^2.14.2"
}
}
}
}

View File

@ -1,6 +1,6 @@
{
"name": "language-haxe",
"version": "0.5.2",
"version": "0.6.0",
"description": "Haxe language support in Atom",
"keywords": [
"haxe",
@ -19,5 +19,7 @@
"atom": ">=1.5.0 <2.0.0",
"node": "*"
},
"dependencies": {}
"dependencies": {
"tree-sitter-haxe": "^0.1.0"
}
}

View File

@ -2,44 +2,44 @@
'#if':
'prefix': '#if'
'body': '#if ${1:define}\n#end\n$0'
'body': '#if ${1:<flag>}\n#end$0'
'description': 'Conditional Compilation'
'descriptionMoreURL': 'http://haxe.org/manual/lf-condition-compilation.html'
'#else':
'prefix': '#else'
'body': '#else\n$0'
'body': '#else$0'
'description': 'Conditional Compilation'
'descriptionMoreURL': 'http://haxe.org/manual/lf-condition-compilation.html'
'#elseif':
'prefix': '#elseif'
'body': '#elseif ${1:define}\n${2}$0'
'body': '#elseif ${1:<flag>}$0'
'description': 'Conditional Compilation'
'descriptionMoreURL': 'http://haxe.org/manual/lf-condition-compilation.html'
'#end':
'prefix': '#end'
'body': '#end\n$0'
'body': '#end$0'
'description': 'Conditional Compilation'
'descriptionMoreURL': 'http://haxe.org/manual/lf-condition-compilation.html'
'#else error':
'prefix': '#error'
'body': '#error "${1:define}"$0'
'body': '#error "${1:<flag>}"$0'
'description': 'Conditional Compilation'
'descriptionMoreURL': 'http://haxe.org/manual/lf-condition-compilation.html'
'trace':
'prefix': 'trace'
'body': 'trace( $1 );$0'
'description': 'Print information'
'descriptionMoreURL': 'http://haxe.org/manual/lf-trace-log.html'
'Line Comment Start':
'prefix': '//'
'body': '// ${1: }\n$0'
'body': '// ${1:}$0'
'Block Comment Start':
'prefix': '/**'
'body': '/**\n\t$1\n*/$0'
'description': 'Block comment'
'trace':
'prefix': 'trace'
'body': 'trace( $1 )$0'
'description': 'Print information'
'descriptionMoreURL': 'http://haxe.org/manual/lf-trace-log.html'
'true':
'prefix': 'true'
'body': 'true'
@ -58,12 +58,17 @@
'package':
'prefix': 'package '
'body': 'package ${1:<name>};\n\n$0'
'body': 'package ${1:<name>};$0'
'import':
'prefix': 'import'
'body': 'import ${1:<package>};\n$0'
'body': 'import ${1:<package>};$0'
'description': 'Allow omitting the package name when using a type'
'descriptionMoreURL': 'http://haxe.org/manual/type-system-import.html'
'using':
'prefix': 'using'
'body': 'using ${1:<package>};$0'
'description': 'Pseudo-extend existing types without modifying their source'
'descriptionMoreURL': 'https://haxe.org/manual/lf-static-extension.html'
'private':
'prefix': 'private'
'body': 'private '
@ -73,6 +78,8 @@
'inline':
'prefix': 'inline'
'body': 'inline '
'description': 'Allow insert function body in place'
'descriptionMoreURL': 'https://haxe.org/manual/class-field-inline.html'
'static':
'prefix': 'static'
'body': 'static '
@ -101,38 +108,44 @@
'body': 'default:\n\t${1:statement}'
'return':
'prefix': 'return'
'body': 'return $1;$0'
'body': 'return$0'
'while':
'prefix': 'while'
'body': 'while( ${1:true} ) {\n\t$2\n}$0'
'do..while':
'prefix': 'do '
'body': 'do {\n\t$1\n} while( ${2:true} );$0'
'continue':
'prefix': 'continue'
'body': 'continue;\n$0'
'body': 'continue;$0'
'break':
'prefix': 'break'
'body': 'break;'
'for i in 0...end':
'prefix': 'fori'
'body': 'for( ${1:var} in ${2:0}...${3:end} ) {\n\t${4:expr}\n}\n$0'
'body': 'for( ${1:var} in ${2:0}...${3:end} ) {\n\t${4:expr}\n}$0'
'for a in b':
'prefix': 'for'
'body': 'for( $1 in $2 ) {\n\t$3\n}\n$0'
'body': 'for( ${1:value} in ${2:iterable} ) {\n\t$3\n}\n$0'
'try':
'prefix': 'try'
'body': 'try {\n\t$1\n} catch(${2:e:Dynamic}) {\n\t${3:trace(e);}\n}\n$0'
'body': 'try {\n\t$1\n} catch(${2:e:Dynamic}) {\n\t${3:trace(e);}\n}$0'
'catch':
'prefix': 'catch'
'body': 'catch(${1:e:Dynamic}) {\n\t${2:trace(e);}\n}\n$0'
'throw':
'prefix': 'throw'
'body': 'throw ${1:expr};\n$0'
'body': 'throw ${1:expr};$0'
'cast':
'prefix': 'cast'
'body': 'cast( ${1:expr}, ${2:type} )$0'
'cast ':
'prefix': 'cast '
'body': 'cast ${1:expr}$0'
'autotyped var':
'prefix': 'v'
@ -169,9 +182,12 @@
'prefix': 'set_'
'body': 'function set_${1:name}(${2:v}:${3:Type}) : ${3:Type} \{\n\treturn $4;\n\}$0'
'dynamic':
'prefix': 'dynamic function'
'body': 'dynamic function ${1:<name>}($2) {}$0'
'function':
'prefix': 'function'
'body': 'function ${1:name}( ${2:params} )${3: : ${4:Void}} \{\n\t$5\n\}\n$0'
'body': 'function ${1:name}( ${2:params} )${3: : ${4:Void}} \{\n\t$5\n\}$0'
'method':
'prefix': 'static function'
'body': '${1:static }${2:inline }function ${3:name}($4)${5: : ${6:Void}} \{\n\t$0\n\}'
@ -226,43 +242,112 @@
'private function':
'prefix': 'prf'
'body': 'private function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}\n'
'body': 'private function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}'
'private inline function':
'prefix': 'prif'
'body': 'private inline function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}\n'
'body': 'private inline function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}'
'private static function':
'prefix': 'prsf'
'body': 'private static function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}\n'
'body': 'private static function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}'
'private static inline function':
'prefix': 'prsif'
'body': 'private static inline function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}\n'
'body': 'private static inline function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}'
'public function':
'prefix': 'pf'
'body': 'public function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}\n'
'body': 'public function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}'
'public inline function':
'prefix': 'pif'
'body': 'public inline function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}\n'
'body': 'public inline function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}'
'public static function':
'prefix': 'psf'
'body': 'public static function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}\n'
'body': 'public static function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}'
'public static inline function':
'prefix': 'psif'
'body': 'public static inline function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}\n'
'body': 'public static inline function ${1:name}($2)${3: : ${4:Void}} {\n\t$0\n}'
'Array<T>':
'prefix': 'Array'
'body': 'Array<${1:T}>()$0'
'body': 'Array<${1:T}>$0'
'description': 'Collection of elements'
'descriptionMoreURL': 'http://api.haxe.org/Array.html'
'ArrayAccess<T>':
'prefix': 'ArrayAccess<T>'
'body': 'ArrayAccess<${1:T}>$0'
'Bool':
'prefix': 'Bool'
'body': 'Bool$0'
'Class<T>':
'prefix': 'Class'
'body': 'Class<${1:T}>$0'
'Date':
'prefix': 'Date'
'body': 'Date$0'
'Dynamic':
'prefix': 'Dynamic'
'body': 'Dynamic$0'
'EReg':
'prefix': 'EReg'
'body': 'EReg( ${1:r}, ${2:opt} )$0'
'Float':
'prefix': 'Float'
'body': 'Float$0'
'Int':
'prefix': 'Int'
'body': 'Int$0'
'List<T>':
'prefix': 'List'
'body': 'List<${1:T}>()$0'
'body': 'List<${1:T}>$0'
'description': 'A linked-list of elements'
'descriptionMoreURL': 'http://api.haxe.org/List.html'
'Map<K,V>':
'prefix': 'Map'
'body': 'Map<${1:K},${2:V}>()$0'
'prefix': 'Map<K,V>'
'body': 'Map<${1:K},${2:V}>$0'
'description': 'Key to value mapping for arbitrary value types'
'descriptionMoreURL': 'http://api.haxe.org/Map.html'
'Math':
'prefix': 'Math'
'body': 'Math$0'
'Null<T>':
'prefix': 'Null<T>'
'body': 'Null<${1:T}>$0'
'Reflect':
'prefix': 'Reflect'
'body': 'Reflect.$0'
'description': 'Runtime reflection of types and fields'
'descriptionMoreURL': 'http://haxe.org/manual/std-reflection.html'
'Single':
'prefix': 'Single'
'body': 'Single$0'
'description': 'Single-precision IEEE 32bit float (4-byte)'
'Std':
'prefix': 'Std'
'body': 'Std.$0'
'description': 'Standard methods for manipulating basic types'
'String':
'prefix': 'String'
'body': 'String$0'
'StringBuf':
'prefix': 'StringBuf'
'body': 'StringBuf$0'
'StringTools':
'prefix': 'StringTools'
'body': 'StringTools$0'
'Type':
'prefix': 'Type'
'body': 'Type$0'
'UInt':
'prefix': 'UInt'
'body': 'UInt$0'
'ValueType':
'prefix': 'ValueType'
'body': 'ValueType$0'
'Void':
'prefix': 'Void'
'body': 'Void$0'
'Xml':
'prefix': 'Xml'
'body': 'Xml$0'
'XmlType':
'prefix': 'XmlType'
'body': 'XmlType$0'

View File

@ -1,530 +1,530 @@
'.source.hxml':
'hxml -cp':
'prefix': 'cp'
'body': '-cp ${1:<path>}\n$0'
'body': '-cp ${1:<path>}$0'
'description': 'Adds a class path where .hx source files or packages (sub-directories) can be found.'
'hxml -js':
'prefix': 'js'
'body': '-js ${1:<file>}.js\n$0'
'body': '-js ${1:<file>}.js$0'
'description': 'Compile code to JavaScript file'
'hxml -lua':
'prefix': 'lua'
'body': '-lua ${1:<file>}.lua\n$0'
'body': '-lua ${1:<file>}.lua$0'
'description': 'Compile code to Lua file'
'hxml -swf':
'prefix': 'swf'
'body': '-swf ${1:<file>}.swf\n$0'
'body': '-swf ${1:<file>}.swf$0'
'description': 'Compile code to Flash SWF file'
'hxml -as3':
'prefix': 'as3'
'body': '-as3 ${1:<directory>}\n$0'
'body': '-as3 ${1:<directory>}$0'
'description': 'Generate AS3 code into target directory'
'hxml -neko':
'prefix': 'neko'
'body': '-neko ${1:<file>}.n\n$0'
'body': '-neko ${1:<file>}.n$0'
'description': 'Compile code to Neko Binary'
'hxml -php':
'prefix': 'php'
'body': '-php ${1:<directory>}\n$0'
'body': '-php ${1:<directory>}$0'
'description': 'Generate PHP code into target directory'
'hxml -cpp':
'prefix': 'cpp'
'body': '-cpp ${1:<directory>}\n$0'
'body': '-cpp ${1:<directory>}$0'
'description': 'Generate C++ code into target directory'
'hxml -cppia':
'prefix': 'cppia'
'body': '-cppia ${1:<file>}\n$0'
'body': '-cppia ${1:<file>}$0'
'description': 'Generate Cppia code into target directory'
'hxml -cs':
'prefix': 'cs'
'body': '-cs ${1:<directory>}\n$0'
'body': '-cs ${1:<directory>}$0'
'description': 'Generate C# code into target directory'
'hxml -java':
'prefix': 'java'
'body': '-java ${1:<directory>}\n$0'
'body': '-java ${1:<directory>}$0'
'description': 'Generate Java code into target directory'
'hxml -python':
'prefix': 'python'
'body': '-python ${1:<file>}.py\n$0'
'body': '-python ${1:<file>}.py$0'
'description': 'Generate Python code into target directory'
'hxml -hl':
'prefix': 'hl'
'body': '-hl ${1:<file>}\n$0'
'body': '-hl ${1:<file>}$0'
'description': 'Compile HL code as target file'
'hxml -xml':
'prefix': 'xml'
'body': '-xml ${1:<file>}\n$0'
'body': '-xml ${1:<file>}$0'
'description': 'Generate XML types description'
'hxml -main':
'prefix': 'main'
'body': '-main ${1:<class>}\n$0'
'body': '-main ${1:<class>}$0'
'description': 'Sets the main class'
'hxml -lib':
'prefix': 'lib'
'body': '-lib ${1:${2:<library>}\:${3:[version]}}\n$0'
'body': '-lib ${1:${2:<library>}\:${3:[version]}}$0'
'description': 'Use a haxelib library'
'descriptionMoreURL': 'http://lib.haxe.org/'
'hxml -D':
'prefix': 'D'
'body': '-D ${1:${2:key}=${3:value}}\n$0'
'body': '-D ${1:${2:key}=${3:value}}$0'
'description': 'Define a conditional compilation flag'
'descriptionMoreURL': 'http://haxe.org/manual/lf-condition-compilation.html'
'hxml -v':
'prefix': 'v'
'body': '-v\n$0'
'body': '-v$0'
'description': 'Turn on verbose mode'
'hxml -debug':
'prefix': 'debug'
'body': '-debug\n$0'
'body': '-debug$0'
'description': 'Add debug information to the compiled code'
'hxml -dce':
'prefix': 'dce'
'body': '-dce ${1:[std|full|no]}\n$0'
'body': '-dce ${1:[std|full|no]}$0'
'description': 'Set the dead code elimination mode (default std)'
'hxml -swf-version':
'prefix': 'swf-version'
'body': '-swf-version ${1:<version>}\n$0'
'body': '-swf-version ${1:<version>}$0'
'description': 'Change the SWF version'
'hxml -swf-header':
'prefix': 'swf-header'
'body': '-swf-header ${1:width}:${2:height}:${3:fps}:${4:color}\n$0'
'body': '-swf-header ${1:width}:${2:height}:${3:fps}:${4:color}$0'
'description': 'Define SWF header (width:height:fps:color)'
'hxml -swf-lib':
'prefix': 'swf-lib'
'body': '-swf-lib ${1:<file>}\n$0'
'body': '-swf-lib ${1:<file>}$0'
'description': 'Add the SWF library to the compiled SWF'
'hxml -swf-lib-extern':
'prefix': 'swf-lib-extern'
'body': '-swf-lib-extern ${1:<file>}\n$0'
'body': '-swf-lib-extern ${1:<file>}$0'
'description': 'Use the SWF library for type checking'
'hxml -java-lib':
'prefix': 'java-lib'
'body': '-java-lib ${1:<file>}\n$0'
'body': '-java-lib ${1:<file>}$0'
'description': 'add an external JAR or class directory library'
'hxml -net-lib':
'prefix': 'net-lib'
'body': '-net-lib ${1:${2:<file>[}@${3:std]}}\n$0'
'body': '-net-lib ${1:${2:<file>[}@${3:std]}}$0'
'description': 'Add an external .NET DLL file'
'hxml -net-std':
'prefix': 'net-std'
'body': '-net-std ${1:<file>}\n$0'
'body': '-net-std ${1:<file>}$0'
'description': 'Add a root std .NET DLL search path'
'hxml -c-arg':
'prefix': 'c-arg'
'body': '-c-arg ${1:<arg>}\n$0'
'body': '-c-arg ${1:<arg>}$0'
'description': 'Pass option <arg> to the native Java/C# compiler'
'hxml -x':
'prefix': 'x'
'body': '-x ${1:<file>}\n$0'
'body': '-x ${1:<file>}$0'
'description': 'Shortcut for compiling and executing a neko file'
'hxml -resource':
'prefix': 'resource'
'body': '-resource ${1:${2:<file>[}@${3:name]}}\n$0'
'body': '-resource ${1:${2:<file>[}@${3:name]}}$0'
'description': 'Add a named resource file'
'descriptionMoreURL': 'https://haxe.org/manual/cr-resources.html'
'hxml -prompt':
'prefix': 'prompt'
'body': '-prompt\n$0'
'body': '-prompt$0'
'description': 'Prompt on error'
'hxml -cmd':
'prefix': 'cmd'
'body': '-cmd ${1:<command>}\n$0'
'body': '-cmd ${1:<command>}$0'
'description': 'Run the specified command after successful compilation'
'hxml --flash-strict':
'prefix': 'flash-strict'
'body': '--flash-strict\n$0'
'body': '--flash-strict$0'
'description': 'More type strict flash API'
'hxml --no-traces':
'prefix': 'no-traces'
'body': '--no-traces\n$0'
'body': '--no-traces$0'
'description': 'Remove trace calls in the program'
'hxml --gen-hx-classes':
'prefix': 'gen-hx-classes'
'body': '--gen-hx-classes\n$0'
'body': '--gen-hx-classes$0'
'description': 'Generate hx headers for all input classes'
'hxml --next':
'prefix': 'next'
'body': '--next\n$0'
'body': '--next$0'
'description': 'Separate several haxe compilations'
'hxml --each':
'prefix': 'each'
'body': '--each\n$0'
'body': '--each$0'
'description': 'Append preceding parameters to all haxe compilations separated by --next'
'hxml --display':
'prefix': 'display'
'body': '--display\n$0'
'body': '--display$0'
'description': 'Display code tips'
'hxml --no-output':
'prefix': 'no-output'
'body': '--no-output\n$0'
'body': '--no-output$0'
'description': 'Compiles but does not generate any file'
'hxml --times':
'prefix': 'times'
'body': '--times\n$0'
'body': '--times$0'
'description': 'Measure compilation times'
'hxml --no-inline':
'prefix': 'no-inline'
'body': '--no-inline\n$0'
'body': '--no-inline$0'
'description': 'Disable inlining'
'descriptionMoreURL': 'https://haxe.org/manual/class-field-inline.html'
'hxml --no-opt':
'prefix': 'no-opt'
'body': '--no-opt\n$0'
'body': '--no-opt$0'
'description': 'Disable code optimizations'
'hxml --php-front':
'prefix': 'php-front'
'body': '--php-front ${1:<filename>}\n$0'
'body': '--php-front ${1:<filename>}$0'
'description': 'Select the name for the php front file'
'hxml --php-lib':
'prefix': 'php-lib'
'body': '--php-lib ${1:<filename>}\n$0'
'body': '--php-lib ${1:<filename>}$0'
'description': 'Select the name for the php lib folder'
'hxml --php-prefix':
'prefix': 'php-prefix'
'body': '--php-prefix ${1:<name>}\n$0'
'body': '--php-prefix ${1:<name>}$0'
'description': 'Prefix all classes with given name'
'hxml --remap':
'prefix': 'remap'
'body': '--remap ${1:<package}:${2:target>}\n$0'
'body': '--remap ${1:<package}:${2:target>}$0'
'description': 'Remap a package to another one'
'hxml --interp':
'prefix': 'interp'
'body': '--interp\n$0'
'body': '--interp$0'
'description': 'Interpret the program using internal macro system'
'hxml --macro':
'prefix': 'macro'
'body': '--macro ${1:name}\n$0'
'body': '--macro ${1:name}$0'
'description': 'Call the given macro before typing anything else'
'descriptionMoreURL': 'https://haxe.org/manual/macro-initialization.html'
'hxml --eval':
'prefix': 'eval'
'body': '--eval ${1:arg}\n$0'
'body': '--eval ${1:arg}$0'
'description': 'Evaluates argument as Haxe module code'
'hxml --wait':
'prefix': 'wait'
'body': '--wait ${2:[127.0.0.1]:}${1:6000}\n$0'
'body': '--wait ${2:[127.0.0.1]:}${1:6000}$0'
'description': 'Wait on the given port for commands to run'
'descriptionMoreURL': 'https://haxe.org/manual/cr-completion-server.html'
'hxml --connect':
'prefix': 'connect'
'body': '--connect ${1:${3:[host}\:${2:]port}}\n$0'
'body': '--connect ${1:${3:[host}\:${2:]port}}$0'
'description': 'Connect on the given port and run commands there'
'descriptionMoreURL': 'https://haxe.org/manual/cr-completion-server.html'
'hxml --cwd':
'prefix': 'cwd'
'body': '--cwd ${1:dir}\n$0'
'body': '--cwd ${1:dir}$0'
'description': 'Set current working directory'
'hxml -version':
'prefix': 'version'
'body': '-version\n$0'
'body': '-version$0'
'description': 'Print version and exit'
'hxml -D absolute-path':
'prefix': 'D absolute-path'
'body': '-D absolute-path\n$0'
'body': '-D absolute-path$0'
'description': 'Print absolute file path in trace output'
'hxml -D advanced-telemetry':
'prefix': 'D advanced-telemetry'
'body': '-D advanced-telemetry\n$0'
'body': '-D advanced-telemetry$0'
'description': 'Allow the SWF to be measured with Monocle tool'
'hxml -D analyzer':
'prefix': 'D analyzer'
'body': '-D analyzer\n$0'
'body': '-D analyzer$0'
'description': 'Use static analyzer for optimization (experimental)'
'hxml -D as3':
'prefix': 'D as3'
'body': '-D as3\n$0'
'body': '-D as3$0'
'description': 'Defined when outputing flash9 as3 source code'
'hxml -D check-xml-proxy':
'prefix': 'D check-xml-proxy'
'body': '-D check-xml-proxy\n$0'
'body': '-D check-xml-proxy$0'
'description': 'Check the used fields of the xml proxy'
'hxml -D core-api':
'prefix': 'D core-api'
'body': '-D core-api\n$0'
'body': '-D core-api$0'
'description': 'Defined in the core api context'
'hxml -D core-api-serialize':
'prefix': 'D core-api-serialize'
'body': '-D core-api-serialize\n$0'
'body': '-D core-api-serialize$0'
'description': 'Mark some generated core api classes with the Serializable attribute on C#'
'hxml -D cppia':
'prefix': 'D cppia'
'body': '-D cppia\n$0'
'body': '-D cppia$0'
'description': 'Generate experimental cpp instruction assembly'
'hxml -D dce':
'prefix': 'D dce'
'body': '-D dce=${1:[std|full|no]}\n$0'
'body': '-D dce=${1:[std|full|no]}$0'
'description': 'Set the dead code elimination mode (default std)'
'hxml -D dce-debug':
'prefix': 'D dce-debug'
'body': '-D dce-debug\n$0'
'body': '-D dce-debug$0'
'description': 'Show dead code elimination log'
'hxml -D debug':
'prefix': 'D debug'
'body': '-D debug\n$0'
'body': '-D debug$0'
'description': 'Activated when compiling with -debug'
'hxml -D display':
'prefix': 'D display'
'body': '-D display\n$0'
'body': '-D display$0'
'description': 'Activated during completion'
'hxml -D dll-export':
'prefix': 'D dll-export'
'body': '-D dll-export\n$0'
'body': '-D dll-export$0'
'description': 'GenCPP experimental linking'
'hxml -D dll-import':
'prefix': 'D dll-import'
'body': '-D dll-import\n$0'
'body': '-D dll-import$0'
'description': 'GenCPP experimental linking'
'hxml -D doc-gen':
'prefix': 'D doc-gen'
'body': '-D doc-gen\n$0'
'body': '-D doc-gen$0'
'description': 'Do not perform any removal/change in order to correctly generate documentation'
'hxml -D dump':
'prefix': 'D dump'
'body': '-D dump\n$0'
'body': '-D dump$0'
'description': 'Dump the complete typed AST for internal debugging in a dump subdirectory - use dump=pretty for Haxe-like formatting'
'hxml -D dump-dependencies':
'prefix': 'D dump-dependencies'
'body': '-D dump-dependencies\n$0'
'body': '-D dump-dependencies$0'
'description': 'Dump the classes dependencies in a dump subdirectory'
'hxml -D dump-ignore-var-ids':
'prefix': 'D dump-ignore-var-ids'
'body': '-D dump-ignore-var-ids\n$0'
'body': '-D dump-ignore-var-ids$0'
'description': 'Remove variable IDs from non-pretty dumps (helps with diff)'
'hxml -D erase-generics':
'prefix': 'D erase-generics'
'body': '-D erase-generics\n$0'
'body': '-D erase-generics$0'
'description': 'Erase generic classes on C#'
'hxml -D fdb':
'prefix': 'D fdb'
'body': '-D fdb\n$0'
'body': '-D fdb$0'
'description': 'Enable full flash debug infos for FDB interactive debugging'
'hxml -D file-extension':
'prefix': 'D file-extension'
'body': '-D file-extension\n$0'
'body': '-D file-extension$0'
'description': 'Output filename extension for cpp source code'
'hxml -D flash-use-stage':
'prefix': 'D flash-use-stage'
'body': '-D flash-use-stage\n$0'
'body': '-D flash-use-stage$0'
'description': 'Keep the SWF library initial stage'
'hxml -D force-lib-check':
'prefix': 'D force-lib-check'
'body': '-D force-lib-check\n$0'
'body': '-D force-lib-check$0'
'description': 'Force the compiler to check -net-lib and -java-lib added classes (internal)'
'hxml -D force-native-property':
'prefix': 'D force-native-property'
'body': '-D force-native-property\n$0'
'body': '-D force-native-property$0'
'description': 'Tag all properties with :nativeProperty metadata for 3.1 compatibility'
'hxml -D format-warning':
'prefix': 'D format-warning'
'body': '-D format-warning\n$0'
'body': '-D format-warning$0'
'description': 'Print a warning for each formated string, for 2.x compatibility'
'hxml -D gencommon-debug':
'prefix': 'D gencommon-debug'
'body': '-D gencommon-debug\n$0'
'body': '-D gencommon-debug$0'
'description': 'GenCommon internal'
'hxml -D haxe-boot':
'prefix': 'D haxe-boot'
'body': '-D haxe-boot\n$0'
'body': '-D haxe-boot$0'
'description': 'Given the name `haxe` to the flash boot class instead of a generated name'
'hxml -D haxe-ver':
'prefix': 'D haxe-ver'
'body': '-D haxe-ver\n$0'
'body': '-D haxe-ver$0'
'description': 'The current Haxe version value'
'hxml -D hxcpp-api-level':
'prefix': 'D hxcpp-api-level'
'body': '-D hxcpp-api-level\n$0'
'body': '-D hxcpp-api-level$0'
'description': 'Provided to allow compatibility between hxcpp versions'
'hxml -D include-prefix':
'prefix': 'D include-prefix'
'body': '-D include-prefix\n$0'
'body': '-D include-prefix$0'
'description': 'Prepend path to generated include files'
'hxml -D interp':
'prefix': 'D interp'
'body': '-D interp\n$0'
'body': '-D interp$0'
'description': 'The code is compiled to be run with --interp'
'hxml -D java-ver':
'prefix': 'D java-ver'
'body': '-D java-ver=${1:[version:5-7]}\n$0'
'body': '-D java-ver=${1:[version:5-7]}$0'
'description': 'Sets the Java version to be targeted'
'hxml -D js-classic':
'prefix': 'D js-classic'
'body': '-D js-classic\n$0'
'body': '-D js-classic$0'
'description': 'Don`t use a function wrapper and strict mode in JS output'
'hxml -D js-es5':
'prefix': 'D js-es5'
'body': '-D js-es5\n$0'
'body': '-D js-es5$0'
'description': 'Generate JS for ES5-compliant runtimes'
'hxml -D js-unflatten':
'prefix': 'D js-unflatten'
'body': '-D js-unflatten\n$0'
'body': '-D js-unflatten$0'
'description': 'Generate nested objects for packages and types'
'hxml -D keep-old-output':
'prefix': 'D keep-old-output'
'body': '-D keep-old-output\n$0'
'body': '-D keep-old-output$0'
'description': 'Keep old source files in the output directory (for C#/Java)'
'hxml -D loop-unroll-max-cost':
'prefix': 'D loop-unroll-max-cost'
'body': '-D loop-unroll-max-cost\n$0'
'body': '-D loop-unroll-max-cost$0'
'description': 'Maximum cost (number of expressions * iterations) before loop unrolling is canceled (default 250)'
'hxml -D macro':
'prefix': 'D macro'
'body': '-D macro\n$0'
'body': '-D macro$0'
'description': 'Defined when code is compiled in the macro context'
'hxml -D macro-times':
'prefix': 'D macro-times'
'body': '-D macro-times\n$0'
'body': '-D macro-times$0'
'description': 'Display per-macro timing when used with --times'
'hxml -D net-ver':
'prefix': 'D net-ver'
'body': '-D net-ver\n$0'
'body': '-D net-ver$0'
'description': 'Sets the .NET version to be targeted'
'hxml -D net-target':
'prefix': 'D net-target'
'body': '-D net-target=${1:<name>}\n$0'
'body': '-D net-target=${1:<name>}$0'
'description': 'Sets the .NET target. Defaults to net. xbox, micro (Micro Framework, compact (Compact Framework) are some valid values'
'hxml -D neko-source':
'prefix': 'D neko-source'
'body': '-D neko-source\n$0'
'body': '-D neko-source$0'
'description': 'Output neko source instead of bytecode'
'hxml -D neko-v1':
'prefix': 'D neko-v1'
'body': '-D neko-v1\n$0'
'body': '-D neko-v1$0'
'description': 'Keep Neko 1.x compatibility'
'hxml -D network-sandbox':
'prefix': 'D network-sandbox'
'body': '-D network-sandbox\n$0'
'body': '-D network-sandbox$0'
'description': 'Use local network sandbox instead of local file access one'
'hxml -D no-compilation':
'prefix': 'D no-compilation'
'body': '-D no-compilation\n$0'
'body': '-D no-compilation$0'
'description': 'Disable CPP final compilation'
'hxml -D no-copt':
'prefix': 'D no-copt'
'body': '-D no-copt\n$0'
'body': '-D no-copt$0'
'description': 'Disable completion optimization (for debug purposes)'
'hxml -D no-debug':
'prefix': 'D no-debug'
'body': '-D no-debug\n$0'
'body': '-D no-debug$0'
'description': 'Remove all debug macros from cpp output'
'hxml -D no-deprecation-warnings':
'prefix': 'D no-deprecation-warnings'
'body': '-D no-deprecation-warnings\n$0'
'body': '-D no-deprecation-warnings$0'
'description': 'Do not warn if fields annotated with @:deprecated are used'
'hxml -D no-flash-override':
'prefix': 'D no-flash-override'
'body': '-D no-flash-override\n$0'
'body': '-D no-flash-override$0'
'description': 'Change overrides on some basic classes into HX suffixed methods flash only'
'hxml -D no-opt':
'prefix': 'D no-opt'
'body': '-D no-opt\n$0'
'body': '-D no-opt$0'
'description': 'Disable optimizations'
'hxml -D no-pattern-matching':
'prefix': 'D no-pattern-matching'
'body': '-D no-pattern-matching\n$0'
'body': '-D no-pattern-matching$0'
'description': 'Disable pattern matching'
'descriptionMoreURL': 'https://haxe.org/manual/lf-pattern-matching.html'
'hxml -D no-inline':
'prefix': 'D no-inline'
'body': '-D no-inline\n$0'
'body': '-D no-inline$0'
'description': 'Disable inlining'
'hxml -D no-root':
'prefix': 'D no-root'
'body': '-D no-root\n$0'
'body': '-D no-root$0'
'description': 'GenCS internal'
'hxml -D no-macro-cache':
'prefix': 'D no-macro-cache'
'body': '-D no-macro-cache\n$0'
'body': '-D no-macro-cache$0'
'description': 'Disable macro context caching'
'hxml -D no-simplify':
'prefix': 'D no-simplify'
'body': '-D no-simplify\n$0'
'body': '-D no-simplify$0'
'description': 'Disable simplification filter'
'hxml -D no-swf-compress':
'prefix': 'D no-swf-compress'
'body': '-D no-swf-compress\n$0'
'body': '-D no-swf-compress$0'
'description': 'Disable SWF output compression'
'hxml -D no-traces':
'prefix': 'D no-traces'
'body': '-D no-traces\n$0'
'body': '-D no-traces$0'
'description': 'Disable all trace calls'
'hxml -D php-prefix':
'prefix': 'D php-prefix'
'body': '-D php-prefix\n$0'
'body': '-D php-prefix$0'
'description': 'Compiled with --php-prefix'
'hxml -D real-position':
'prefix': 'D real-position'
'body': '-D real-position\n$0'
'body': '-D real-position$0'
'description': 'Disables haxe source mapping when targetting C#'
'hxml -D replace-files':
'prefix': 'D replace-files'
'body': '-D replace-files\n$0'
'body': '-D replace-files$0'
'description': 'GenCommon internal'
'hxml -D shallow-expose':
'prefix': 'D shallow-expose'
'body': '-D shallow-expose\n$0'
'body': '-D shallow-expose$0'
'description': 'Expose types to surrounding scope of Haxe generated closure without writing to window object'
'hxml -D source-map-content':
'prefix': 'D source-map-content'
'body': '-D source-map-content\n$0'
'body': '-D source-map-content$0'
'description': 'Include the hx sources as part of the JS source map'
'hxml -D swc':
'prefix': 'D swc'
'body': '-D swc\n$0'
'body': '-D swc$0'
'description': 'Output a SWC instead of a SWF'
'hxml -D swf-compress-level':
'prefix': 'D swf-compress-level'
'body': '-D swf-compress-level=${1:<1-9>}\n$0'
'body': '-D swf-compress-level=${1:<1-9>}$0'
'description': 'Set the amount of compression for the SWF output'
'hxml -D swf-debug-password':
'prefix': 'D swf-debug-password=${1:<yourPassword>}'
'body': '-D swf-debug-password\n$0'
'body': '-D swf-debug-password$0'
'description': 'Set a password for debugging. The password field is encrypted by using the MD5 algorithm and prevents unauthorised debugging of your swf. Without this flag -D fdb will use no password.'
'hxml -D swf-direct-blit':
'prefix': 'D swf-direct-blit'
'body': '-D swf-direct-blit\n$0'
'body': '-D swf-direct-blit$0'
'description': 'Use hardware acceleration to blit graphics'
'hxml -D swf-gpu':
'prefix': 'D swf-gpu'
'body': '-D swf-gpu\n$0'
'body': '-D swf-gpu$0'
'description': 'Use GPU compositing features when drawing graphics'
'hxml -D swf-metadata':
'prefix': 'D swf-metadata'
'body': '-D swf-metadata=${1:<file.xml>}\n$0'
'body': '-D swf-metadata=${1:<file.xml>}$0'
'description': 'Include contents of <file.xml> as metadata in the swf'
'hxml -D swf-preloader-frame':
'prefix': 'D swf-preloader-frame'
'body': '-D swf-preloader-frame\n$0'
'body': '-D swf-preloader-frame$0'
'description': 'Insert empty first frame in swf. To be used together with -D flash-use-stage and -swf-lib'
'hxml -D swf-protected':
'prefix': 'D swf-protected'
'body': '-D swf-protected\n$0'
'body': '-D swf-protected$0'
'description': 'Compile Haxe private as protected in the SWF instead of public'
'hxml -D swf-script-timeout':
'prefix': 'D swf-script-timeout'
'body': '-D swf-script-timeout\n$0'
'body': '-D swf-script-timeout$0'
'description': 'Maximum ActionScript processing time before script stuck dialog box displays (in seconds)'
'hxml -D swf-use-doabc':
'prefix': 'D swf-use-doabc'
'body': '-D swf-use-doabc\n$0'
'body': '-D swf-use-doabc$0'
'description': 'Use DoAbc swf-tag instead of DoAbcDefine'
'hxml -D sys':
'prefix': 'D sys'
'body': '-D sys\n$0'
'body': '-D sys$0'
'description': 'Defined for all system platforms'
'hxml -D unsafe':
'prefix': 'D unsafe'
'body': '-D unsafe\n$0'
'body': '-D unsafe$0'
'description': 'Allow unsafe code when targeting C#'
'hxml -D use-nekoc':
'prefix': 'D use-nekoc'
'body': '-D use-nekoc\n$0'
'body': '-D use-nekoc$0'
'description': 'Use nekoc compiler instead of internal one'
'hxml -D use-rtti-doc':
'prefix': 'D use-rtti-doc'
'body': '-D use-rtti-doc\n$0'
'body': '-D use-rtti-doc$0'
'description': 'Allows access to documentation during compilation'
'hxml -D vcproj':
'prefix': 'D vcproj'
'body': '-D vcproj\n$0'
'body': '-D vcproj$0'
'description': 'GenCPP internal'

View File

@ -81,3 +81,35 @@ describe "Haxe Grammar", ->
{tokens} = grammar.tokenizeLine('a.push(' + delim + 'x' + delim + ' + y + ' + delim + ':function()' + delim + ');')
expect(tokens[0]).toEqual value: 'a', scopes: ['source.haxe'] #,'meta.scope.field-completions.haxe']
#expect(tokens[1]).toEqual value: '.', scopes: ['source.haxe']
describe "firstLineMatch", ->
it "recognises interpreter directives", ->
valid = """
#!/usr/sbin/haxe
#!/usr/bin/haxe foo=bar/
#!/usr/sbin/haxe
#!/usr/sbin/haxe foo bar baz
#!/usr/bin/haxe perl
#!/usr/bin/haxe bin/perl
#!/usr/bin/haxe
#!/bin/haxe
#!/usr/bin/haxe --script=usr/bin
#! /usr/bin/env A=003 B=149 C=150 D=xzd E=base64 F=tar G=gz H=head I=tail haxe
#!\t/usr/bin/env --foo=bar haxe --quu=quux
#! /usr/bin/haxe
#!/usr/bin/env haxe
"""
for line in valid.split /\n/
expect( grammar.firstLineRegex.scanner.findNextMatchSync( line ) ).not.toBeNull()
invalid = """
\x20#!/usr/sbin/haxe
\t#!/usr/sbin/haxe
#!/usr/bin/env-haxe/node-env/
#!/usr/bin/env-haxe
#! /usr/binhaxe
#!\t/usr/bin/env --haxe=bar
"""
for line in invalid.split /\n/
expect( grammar.firstLineRegex.scanner.findNextMatchSync( line ) ).toBeNull()
#it "recognises Emacs modelines", ->
#it "recognises Vim modelines", ->