File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ ---
2+ " @ast-grep/lang-glimmer-javascript " : patch
3+ " @ast-grep/lang-glimmer-typescript " : patch
4+ ---
5+
6+ Add Glimmer, Ember component authoring support (.gjs, .gts)
Original file line number Diff line number Diff line change 1+ # ast-grep napi language for glimmer-javascript
2+
3+ ## Installation
4+
5+ In a pnpm project, run:
6+
7+ ``` bash
8+ pnpm install @ast-grep/lang-glimmer-javascript
9+ pnpm install @ast-grep/napi
10+ # install the tree-sitter-cli if no prebuild is available
11+ pnpm install @tree-sitter/cli --save-dev
12+ ```
13+
14+ ## Usage
15+
16+ ``` js
17+ import glimmerJavascript from ' @ast-grep/lang-glimmer-javascript'
18+ import { registerDynamicLanguage , parse } from ' @ast-grep/napi'
19+
20+ registerDynamicLanguage ({ glimmerJavascript })
21+
22+ const sg = parse (' glimmerJavascript' , ` your code` )
23+ sg .root ().kind ()
24+ ```
25+
Original file line number Diff line number Diff line change 1+ type LanguageRegistration = {
2+ libraryPath : string
3+ extensions : string [ ]
4+ languageSymbol ?: string
5+ metaVarChar ?: string
6+ expandoChar ?: string
7+ }
8+
9+ declare const registration : LanguageRegistration
10+ export default registration
Original file line number Diff line number Diff line change 1+ const path = require ( 'node:path' )
2+ const fs = require ( 'node:fs' )
3+ const { resolvePrebuild } = require ( '@ast-grep/setup-lang' )
4+
5+ function getLibPath ( ) {
6+ const prebuild = resolvePrebuild ( __dirname )
7+ if ( prebuild ) {
8+ return prebuild
9+ }
10+
11+ const native = path . join ( __dirname , 'parser.so' )
12+ if ( fs . existsSync ( native ) ) {
13+ return native
14+ }
15+
16+ throw new Error ( 'No parser found. Please ensure the parser is built or a prebuild is available.' )
17+ }
18+
19+ let libPath
20+
21+ module . exports = {
22+ get libraryPath ( ) {
23+ if ( ! libPath ) {
24+ libPath = getLibPath ( )
25+ }
26+ return libPath
27+ } ,
28+ extensions : [ 'gjs' ] ,
29+ languageSymbol : 'tree_sitter_glimmer_javascript' ,
30+ expandoChar : '$' ,
31+ }
Original file line number Diff line number Diff line change 1+ const { setup } = require ( '@ast-grep/nursery' )
2+ const assert = require ( 'node:assert' )
3+ const languageRegistration = require ( './index' )
4+
5+ setup ( {
6+ dirname : __dirname ,
7+ name : 'glimmerJavascript' ,
8+ treeSitterPackage : 'tree-sitter-glimmer-javascript' ,
9+ languageRegistration,
10+ testRunner : ( parse ) => {
11+ const sg = parse ( `
12+ import Component from '@glimmer/component';
13+
14+ function isLatestVersion() {
15+ const stableRegex = /^d+.d+.d+$/;
16+ return !stableRegex.test(VERSION);
17+ }
18+
19+ export default class WelcomePageComponent extends Component {
20+ <template>
21+ <main id="ember-welcome-page-id-selector">
22+ <Hello> </Hello>
23+ </main>
24+ </template>
25+
26+ @service session;
27+
28+ get extension() {
29+ return this.args.extension ?? 'hbs';
30+ }
31+ }
32+ ` )
33+ const root = sg . root ( )
34+
35+ const getter = root . find ( {
36+ rule : {
37+ kind : 'method_definition' ,
38+ } ,
39+ } )
40+ const property = getter . find ( { rule : { kind : 'property_identifier' } } )
41+ assert . equal ( property . text ( ) , 'extension' )
42+
43+ const service = root . find ( { rule : { kind : 'field_definition > property_identifier' } } )
44+ assert . equal ( service . text ( ) , 'session' )
45+
46+ const main_tag = root . find ( { rule : { kind : 'glimmer_template > glimmer_opening_tag' } } )
47+ assert . equal ( main_tag . text ( ) , '<template>' )
48+ } ,
49+ } )
Original file line number Diff line number Diff line change 1+ {
2+ "name" : " @ast-grep/lang-glimmer-javascript" ,
3+ "version" : " 0.0.1" ,
4+ "description" : " " ,
5+ "main" : " index.js" ,
6+ "scripts" : {
7+ "build" : " tree-sitter build -o parser.so" ,
8+ "source" : " node nursery.js source" ,
9+ "prepublishOnly" : " node nursery.js source" ,
10+ "postinstall" : " node postinstall.js" ,
11+ "test" : " node nursery.js test"
12+ },
13+ "files" : [
14+ " index.js" ,
15+ " index.d.ts" ,
16+ " type.d.ts" ,
17+ " postinstall.js" ,
18+ " src" ,
19+ " prebuilds"
20+ ],
21+ "keywords" : [
22+ " ast-grep" ,
23+ " ast-grep-lang"
24+ ],
25+ "author" : " " ,
26+ "license" : " ISC" ,
27+ "dependencies" : {
28+ "@ast-grep/setup-lang" : " 0.0.6"
29+ },
30+ "peerDependencies" : {
31+ "tree-sitter-cli" : " 0.25.8"
32+ },
33+ "peerDependenciesMeta" : {
34+ "tree-sitter-cli" : {
35+ "optional" : true
36+ }
37+ },
38+ "devDependencies" : {
39+ "@ast-grep/nursery" : " 0.0.9" ,
40+ "tree-sitter-cli" : " 0.25.8" ,
41+ "tree-sitter-glimmer-javascript" : " 0.2.0"
42+ },
43+ "publishConfig" : {
44+ "access" : " public" ,
45+ "registry" : " https://registry.npmjs.org/"
46+ },
47+ "pnpm" : {
48+ "onlyBuiltDependencies" : [
49+ " @ast-grep/lang-glimmer-javascript" ,
50+ " tree-sitter-cli"
51+ ]
52+ }
53+ }
Original file line number Diff line number Diff line change 1+ const { postinstall } = require ( '@ast-grep/setup-lang' )
2+ postinstall ( {
3+ dirname : __dirname ,
4+ } )
Original file line number Diff line number Diff line change 1+ # ast-grep napi language for glimmer-typescript
2+
3+ ## Installation
4+
5+ In a pnpm project, run:
6+
7+ ``` bash
8+ pnpm install @ast-grep/lang-glimmer-typescript
9+ pnpm install @ast-grep/napi
10+ # install the tree-sitter-cli if no prebuild is available
11+ pnpm install @tree-sitter/cli --save-dev
12+ ```
13+
14+ ## Usage
15+
16+ ``` js
17+ import glimmerTypescript from ' @ast-grep/lang-glimmer-typescript'
18+ import { registerDynamicLanguage , parse } from ' @ast-grep/napi'
19+
20+ registerDynamicLanguage ({ glimmerTypescript })
21+
22+ const sg = parse (' glimmerTypescript' , ` your code` )
23+ sg .root ().kind ()
24+ ```
25+
Original file line number Diff line number Diff line change 1+ type LanguageRegistration = {
2+ libraryPath : string
3+ extensions : string [ ]
4+ languageSymbol ?: string
5+ metaVarChar ?: string
6+ expandoChar ?: string
7+ }
8+
9+ declare const registration : LanguageRegistration
10+ export default registration
Original file line number Diff line number Diff line change 1+ const path = require ( 'node:path' )
2+ const fs = require ( 'node:fs' )
3+ const { resolvePrebuild } = require ( '@ast-grep/setup-lang' )
4+
5+ function getLibPath ( ) {
6+ const prebuild = resolvePrebuild ( __dirname )
7+ if ( prebuild ) {
8+ return prebuild
9+ }
10+
11+ const native = path . join ( __dirname , 'parser.so' )
12+ if ( fs . existsSync ( native ) ) {
13+ return native
14+ }
15+
16+ throw new Error ( 'No parser found. Please ensure the parser is built or a prebuild is available.' )
17+ }
18+
19+ let libPath
20+
21+ module . exports = {
22+ get libraryPath ( ) {
23+ if ( ! libPath ) {
24+ libPath = getLibPath ( )
25+ }
26+ return libPath
27+ } ,
28+ extensions : [ 'gts' ] ,
29+ languageSymbol : 'tree_sitter_glimmer_typescript' ,
30+ expandoChar : '$' ,
31+ }
You can’t perform that action at this time.
0 commit comments