├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .github └── workflows │ ├── ci.yml │ └── codeql-analysis.yml ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .npmignore ├── .releaserc.json ├── .vscode ├── launch.json ├── settings.json ├── tasks.json └── tasks.json.old ├── CHANGELOG.md ├── DEBUGGING.md ├── LICENSE.md ├── README.md ├── SECURITY.md ├── TESTING.md ├── bin └── ember-language-server.js ├── ember-language-server.code-workspace ├── fix-worker-bundle.js ├── jest.config.js ├── package.json ├── src ├── base-project.ts ├── builtin-addons │ ├── core │ │ ├── code-actions │ │ │ ├── base.ts │ │ │ ├── template-lint-comments.ts │ │ │ ├── template-lint-fixes.ts │ │ │ └── typed-template-comments.ts │ │ ├── ember-helpers.ts │ │ ├── intl-completion-provider.ts │ │ ├── intl-definition-provider.ts │ │ ├── intl-hover-provider.ts │ │ ├── intl-utils.ts │ │ ├── script-completion-provider.ts │ │ ├── script-definition-provider.ts │ │ ├── template-completion-provider.ts │ │ ├── template-context-provider.ts │ │ └── template-definition-provider.ts │ └── doc │ │ └── autocomplete.ts ├── code-action-provider │ └── entry.ts ├── completion-provider │ ├── glimmer-script-completion-provider.ts │ ├── script-completion-provider.ts │ └── template-completion-provider.ts ├── definition-providers │ ├── entry.ts │ ├── glimmer-script.ts │ ├── script.ts │ └── template.ts ├── estree-utils.ts ├── folding-provider │ ├── entry.ts │ └── template-folding-provider.ts ├── fs-provider.ts ├── glimmer-utils.ts ├── hover-provider │ └── entry.ts ├── index.ts ├── position-utils.ts ├── project-roots.ts ├── project.ts ├── range-utils.ts ├── reference-provider │ └── entry.ts ├── server.ts ├── start-server.ts ├── start-worker-server.ts ├── symbols │ ├── document-symbol-provider.ts │ ├── hbs-document-symbol-provider.ts │ └── js-document-symbol-provider.ts ├── template-linter.ts ├── types.ts └── utils │ ├── addon-api.ts │ ├── ast-helpers.ts │ ├── builtin-addons-initializer.ts │ ├── definition-helpers.ts │ ├── diagnostic.ts │ ├── file-extension.ts │ ├── fs-utils.ts │ ├── glimmer-script.ts │ ├── glimmer-template.ts │ ├── layout-helpers.ts │ ├── logger.ts │ ├── normalizers.ts │ ├── path-matcher.ts │ ├── registry-api.ts │ ├── template-tokens-collector.ts │ ├── usages-api.ts │ ├── walk-async.ts │ └── yield-context-extractor.ts ├── test-worker-bundle.html ├── test ├── __snapshots__ │ ├── batman-fixture-based-integration-test.ts.snap │ ├── fixture-based-integration-test.ts.snap │ ├── glimmer-utils-test.ts.snap │ ├── go-to-definition-integration-test.ts.snap │ ├── integration-test.ts.snap │ └── template-imports-integration-test.ts.snap ├── batman-fixture-based-integration-test.ts ├── bultin-addons │ └── core │ │ ├── code-actions │ │ ├── template-lint-comments-test.ts │ │ ├── template-lint-fixes-test.ts │ │ └── typed-template-comments-test.ts │ │ ├── intl-providers-test.ts │ │ └── template-complation-provider-test.ts ├── completion-provider │ └── glimmer-script-completion-provider-test.ts ├── ember-helpers-test.ts ├── embroider-integration-test.ts ├── estree-utils-test.ts ├── fixture-based-integration-test.ts ├── fixtures │ ├── batman │ │ ├── .editorconfig │ │ ├── .ember-cli │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── .travis.yml │ │ ├── .watchmanconfig │ │ ├── README.md │ │ ├── app │ │ │ ├── app.js │ │ │ ├── components │ │ │ │ ├── .gitkeep │ │ │ │ ├── another-awesome-component.js │ │ │ │ └── my-awesome-component.js │ │ │ ├── controllers │ │ │ │ └── .gitkeep │ │ │ ├── helpers │ │ │ │ ├── .gitkeep │ │ │ │ └── some-helper.js │ │ │ ├── index.html │ │ │ ├── models │ │ │ │ ├── .gitkeep │ │ │ │ ├── model-a.js │ │ │ │ └── model-b.js │ │ │ ├── resolver.js │ │ │ ├── router.js │ │ │ ├── routes │ │ │ │ ├── .gitkeep │ │ │ │ ├── nested │ │ │ │ │ └── nested-route.js │ │ │ │ └── test-route.js │ │ │ ├── styles │ │ │ │ └── app.css │ │ │ ├── templates │ │ │ │ ├── angle-completion.hbs │ │ │ │ ├── application.hbs │ │ │ │ ├── batman-completion.hbs │ │ │ │ ├── batman-definition.hbs │ │ │ │ ├── components │ │ │ │ │ ├── .gitkeep │ │ │ │ │ ├── another-awesome-component.hbs │ │ │ │ │ └── nested │ │ │ │ │ │ └── nested-component.hbs │ │ │ │ ├── definition.hbs │ │ │ │ ├── same-component-name.hbs │ │ │ │ └── test-route.hbs │ │ │ └── transforms │ │ │ │ └── custom-transform.js │ │ ├── config │ │ │ ├── environment.js │ │ │ └── targets.js │ │ ├── ember-cli-build.js │ │ ├── lib │ │ │ ├── boo │ │ │ │ ├── addon │ │ │ │ │ └── templates │ │ │ │ │ │ └── components │ │ │ │ │ │ └── bar.hbs │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ └── foo │ │ │ │ ├── addon │ │ │ │ ├── components │ │ │ │ │ └── bar.js │ │ │ │ └── templates │ │ │ │ │ └── components │ │ │ │ │ └── bar.hbs │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ ├── package.json │ │ ├── project.json │ │ ├── public │ │ │ └── robots.txt │ │ ├── testem.js │ │ ├── tests │ │ │ ├── helpers │ │ │ │ └── .gitkeep │ │ │ ├── index.html │ │ │ ├── integration │ │ │ │ └── .gitkeep │ │ │ ├── test-helper.js │ │ │ └── unit │ │ │ │ ├── .gitkeep │ │ │ │ ├── models │ │ │ │ ├── model-a-test.js │ │ │ │ └── model-b-test.js │ │ │ │ ├── routes │ │ │ │ └── test-route-test.js │ │ │ │ └── transforms │ │ │ │ └── custom-transform-test.js │ │ └── vendor │ │ │ └── .gitkeep │ ├── diagnostic │ │ ├── glimmer-compiler-error.json │ │ ├── handlebars-parser-error.json │ │ └── non-translated-error.json │ ├── full-project │ │ ├── .editorconfig │ │ ├── .ember-cli │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── .travis.yml │ │ ├── .watchmanconfig │ │ ├── README.md │ │ ├── app │ │ │ ├── app.js │ │ │ ├── components │ │ │ │ ├── .gitkeep │ │ │ │ ├── another-awesome-component.js │ │ │ │ └── my-awesome-component.js │ │ │ ├── controllers │ │ │ │ └── .gitkeep │ │ │ ├── helpers │ │ │ │ ├── .gitkeep │ │ │ │ └── some-helper.js │ │ │ ├── index.html │ │ │ ├── models │ │ │ │ ├── .gitkeep │ │ │ │ ├── model-a.js │ │ │ │ └── model-b.js │ │ │ ├── resolver.js │ │ │ ├── router.js │ │ │ ├── routes │ │ │ │ ├── .gitkeep │ │ │ │ ├── nested │ │ │ │ │ └── nested-route.js │ │ │ │ └── test-route.js │ │ │ ├── styles │ │ │ │ └── app.css │ │ │ ├── templates │ │ │ │ ├── angle-completion.hbs │ │ │ │ ├── application.hbs │ │ │ │ ├── components │ │ │ │ │ ├── .gitkeep │ │ │ │ │ ├── another-awesome-component.hbs │ │ │ │ │ └── nested │ │ │ │ │ │ └── nested-component.hbs │ │ │ │ ├── definition.hbs │ │ │ │ ├── inrepo-addon-completion.hbs │ │ │ │ └── test-route.hbs │ │ │ └── transforms │ │ │ │ └── custom-transform.js │ │ ├── config │ │ │ ├── environment.js │ │ │ └── targets.js │ │ ├── ember-cli-build.js │ │ ├── hope_modules │ │ │ ├── related-to-sample-addon │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ └── sample-addon │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ ├── lib │ │ │ └── foo │ │ │ │ ├── addon │ │ │ │ └── templates │ │ │ │ │ └── components │ │ │ │ │ └── bar.hbs │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ ├── package.json │ │ ├── public │ │ │ └── robots.txt │ │ ├── testem.js │ │ ├── tests │ │ │ ├── helpers │ │ │ │ └── .gitkeep │ │ │ ├── index.html │ │ │ ├── integration │ │ │ │ └── .gitkeep │ │ │ ├── test-helper.js │ │ │ └── unit │ │ │ │ ├── .gitkeep │ │ │ │ ├── models │ │ │ │ ├── model-a-test.js │ │ │ │ └── model-b-test.js │ │ │ │ ├── routes │ │ │ │ └── test-route-test.js │ │ │ │ └── transforms │ │ │ │ └── custom-transform-test.js │ │ └── vendor │ │ │ └── .gitkeep │ ├── modules │ │ ├── all-modules │ │ │ └── app │ │ │ │ ├── adapters │ │ │ │ └── adapter.js │ │ │ │ ├── components │ │ │ │ └── component.js │ │ │ │ ├── controllers │ │ │ │ └── controller.js │ │ │ │ ├── helpers │ │ │ │ └── helper.js │ │ │ │ ├── initializers │ │ │ │ └── initializer.js │ │ │ │ ├── instance-initializers │ │ │ │ └── instance-initializer.js │ │ │ │ ├── mixins │ │ │ │ └── mixin.js │ │ │ │ ├── models │ │ │ │ └── model.js │ │ │ │ ├── routes │ │ │ │ └── route.js │ │ │ │ ├── serializers │ │ │ │ └── serializer.js │ │ │ │ ├── services │ │ │ │ └── service.js │ │ │ │ ├── templates │ │ │ │ ├── components │ │ │ │ │ └── component.hbs │ │ │ │ └── template.hbs │ │ │ │ └── transforms │ │ │ │ └── transform.js │ │ ├── nested-modules │ │ │ └── app │ │ │ │ └── components │ │ │ │ ├── component.js │ │ │ │ └── sub │ │ │ │ └── directory │ │ │ │ └── component.js │ │ ├── no-modules │ │ │ └── .gitkeep │ │ └── templates │ │ │ └── app │ │ │ └── templates │ │ │ ├── components │ │ │ └── component-template.hbs │ │ │ └── route-template.hbs │ ├── nested-projects │ │ ├── a │ │ │ └── b │ │ │ │ └── c │ │ │ │ └── ember-cli-build.js │ │ └── b │ │ │ └── ember-cli-build.js │ ├── pod-project │ │ ├── app │ │ │ └── pods │ │ │ │ └── components │ │ │ │ ├── foo-bar-js │ │ │ │ ├── component.js │ │ │ │ └── template.hbs │ │ │ │ └── foo-bar-ts │ │ │ │ └── component.ts │ │ └── config │ │ │ └── environment.js │ └── project-with-in-repo-addons │ │ ├── ember-cli-build.js │ │ ├── engines │ │ └── in-repo-engine │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── lib │ │ └── in-repo-addon │ │ │ ├── index.js │ │ │ └── package.json │ │ └── package.json ├── folding-range-provider │ ├── __snapshots__ │ │ └── folding-range-provider-test.ts.snap │ └── folding-range-provider-test.ts ├── glimmer-utils-test.ts ├── go-to-definition-integration-test.ts ├── integration-test.ts ├── position-utils-test.ts ├── range-utils-test.ts ├── template-imports-integration-test.ts ├── template-linter-test.ts ├── test_helpers │ ├── integration-helpers-test.ts │ ├── integration-helpers.ts │ └── public-integration-helpers.ts └── utils │ ├── definition-helpers-test.ts │ ├── diagnostic-test.ts │ ├── file-extension-utils-test.ts │ ├── glimmer-script-test.ts │ ├── layout-helpers-test.ts │ ├── logger-test.ts │ ├── normalizers-test.ts │ ├── path-matcher-test.ts │ ├── registry-api-test.ts │ ├── template-tokens-collector-test.ts │ ├── usages-api-test.ts │ └── yield-context-extractor-test.ts ├── tsconfig.json ├── webpack.config.js └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | 8 | [*] 9 | end_of_line = lf 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | indent_style = space 14 | indent_size = 2 15 | 16 | [*.js] 17 | indent_style = space 18 | indent_size = 2 19 | 20 | [*.hbs] 21 | insert_final_newline = false 22 | indent_style = space 23 | indent_size = 2 24 | 25 | [*.css] 26 | indent_style = space 27 | indent_size = 2 28 | 29 | [*.html] 30 | indent_style = space 31 | indent_size = 2 32 | 33 | [*.{diff,md}] 34 | trim_trailing_whitespace = false 35 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | test/fixtures/ 2 | out/ 3 | node_modules/ 4 | lib/ 5 | inst/ 6 | coverage/ 7 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | es6: true, 4 | node: true, 5 | }, 6 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'], 7 | globals: { 8 | Atomics: 'readonly', 9 | SharedArrayBuffer: 'readonly', 10 | }, 11 | parser: '@typescript-eslint/parser', 12 | parserOptions: { 13 | ecmaVersion: 2018, 14 | sourceType: 'module', 15 | }, 16 | plugins: ['@typescript-eslint', 'prettier'], 17 | rules: { 18 | 'padding-line-between-statements': [ 19 | 'error', 20 | { blankLine: 'always', prev: '*', next: 'return' }, 21 | { blankLine: 'always', prev: '*', next: 'block-like' }, 22 | { blankLine: 'always', prev: 'block-like', next: '*' }, 23 | { blankLine: 'always', prev: ['const', 'let'], next: '*' }, 24 | { blankLine: 'any', prev: ['const', 'let'], next: ['const', 'let'] }, 25 | ], 26 | '@typescript-eslint/explicit-module-boundary-types': 'off', 27 | 'linebreak-style': 'off', 28 | semi: ['error', 'always'], 29 | }, 30 | }; 31 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - master 8 | pull_request: {} 9 | 10 | jobs: 11 | test: 12 | name: Node 14.x - ubuntu 13 | runs-on: ubuntu-latest 14 | timeout-minutes: 10 15 | 16 | steps: 17 | - uses: actions/checkout@v2 18 | with: 19 | fetch-depth: 0 20 | - uses: volta-cli/action@v1 21 | 22 | - name: install dependencies 23 | run: yarn install --frozen-lockfile 24 | 25 | - run: yarn compile 26 | - run: yarn lint 27 | - run: yarn test:coverage 28 | - uses: actions/upload-artifact@v4 29 | if: failure() 30 | with: 31 | path: ./debug.*.log 32 | 33 | - name: bundle (node) 34 | run: yarn build:bundle:node 35 | 36 | - name: bundle (worker) 37 | run: yarn build:bundle:worker 38 | 39 | coverage: 40 | name: Coverage 41 | runs-on: ubuntu-latest 42 | timeout-minutes: 10 43 | continue-on-error: true 44 | needs: [test] 45 | 46 | steps: 47 | - uses: actions/checkout@v2 48 | with: 49 | fetch-depth: 0 50 | 51 | - uses: volta-cli/action@v1 52 | 53 | - name: install dependencies 54 | run: yarn install --frozen-lockfile 55 | 56 | - name: compile codebase 57 | run: yarn compile 58 | 59 | - name: check coverage 60 | run: yarn test:coverage 61 | 62 | - name: submit coverage 63 | uses: codecov/codecov-action@v1 64 | 65 | nodeX: 66 | name: Node ${{ matrix.node-version }} - ${{ matrix.os }} 67 | runs-on: ${{ matrix.os }}-latest 68 | timeout-minutes: 10 69 | 70 | needs: [test] 71 | 72 | strategy: 73 | matrix: 74 | os: [ubuntu] 75 | # os: [ubuntu, windows] @to-to finally fix CI for windows 76 | node-version: [14.x, 16.x, 18.x, 20.x] 77 | 78 | # excluded because it is the `test` job above 79 | exclude: 80 | - os: ubuntu 81 | node-version: 14.x 82 | 83 | steps: 84 | - uses: actions/checkout@v2 85 | with: 86 | fetch-depth: 0 87 | - uses: volta-cli/action@v1 88 | with: 89 | node-version: ${{ matrix.node-version }} 90 | 91 | - name: install dependencies 92 | run: yarn install --frozen-lockfile --ignore-engines 93 | 94 | - name: compile 95 | run: yarn compile 96 | 97 | - name: test 98 | run: yarn test:coverage 99 | 100 | floating-dependencies: 101 | name: Floating Dependencies 102 | runs-on: ubuntu-latest 103 | timeout-minutes: 10 104 | continue-on-error: true 105 | 106 | needs: [test] 107 | 108 | steps: 109 | - uses: actions/checkout@v2 110 | with: 111 | fetch-depth: 0 112 | - uses: volta-cli/action@v1 113 | with: 114 | node-version: 14.x 115 | 116 | - name: install dependencies 117 | run: yarn install --no-lockfile --ignore-engines 118 | 119 | - name: compile 120 | run: yarn compile 121 | 122 | - name: test 123 | run: yarn test:coverage 124 | 125 | cd: 126 | runs-on: ubuntu-latest 127 | name: cd 128 | if: github.ref == 'refs/heads/master' 129 | timeout-minutes: 10 130 | needs: [floating-dependencies] 131 | env: 132 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 133 | steps: 134 | 135 | - name: checkout repo 136 | uses: actions/checkout@v2 137 | with: 138 | persist-credentials: false 139 | 140 | - name: fetch all history and tags from all branches for gitversion 141 | run: git fetch --prune --unshallow 142 | 143 | - name: setup node 144 | uses: volta-cli/action@v1 145 | with: 146 | node-version: 14.x 147 | 148 | - name: install dependencies 149 | run: yarn install --frozen-lockfile 150 | 151 | - name: compile 152 | run: yarn compile 153 | 154 | - name: bundle for node 155 | run: yarn build:bundle:node 156 | 157 | - name: bundle for worker 158 | run: yarn build:bundle:worker 159 | 160 | - name: Release 161 | env: 162 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 163 | run: npx semantic-release@19.0.5 164 | 165 | 166 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ component-context-info-origin ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ component-context-info-origin ] 20 | schedule: 21 | - cron: '43 14 * * 3' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | permissions: 28 | actions: read 29 | contents: read 30 | security-events: write 31 | 32 | strategy: 33 | fail-fast: false 34 | matrix: 35 | language: [ 'javascript' ] 36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] 37 | # Learn more about CodeQL language support at https://git.io/codeql-language-support 38 | 39 | steps: 40 | - name: Checkout repository 41 | uses: actions/checkout@v3 42 | 43 | # Initializes the CodeQL tools for scanning. 44 | - name: Initialize CodeQL 45 | uses: github/codeql-action/init@v1 46 | with: 47 | languages: ${{ matrix.language }} 48 | # If you wish to specify custom queries, you can do so here or in a config file. 49 | # By default, queries listed here will override any specified in a config file. 50 | # Prefix the list here with "+" to use these queries and those in the config file. 51 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 52 | 53 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 54 | # If this step fails, then you should remove it and run the build manually (see below) 55 | - name: Autobuild 56 | uses: github/codeql-action/autobuild@v1 57 | 58 | # ℹ️ Command-line programs to run using the OS shell. 59 | # 📚 https://git.io/JvXDl 60 | 61 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 62 | # and modify them (or add more) to build your code if your project 63 | # uses a compiled language 64 | 65 | #- run: | 66 | # make bootstrap 67 | # make release 68 | 69 | - name: Perform CodeQL Analysis 70 | uses: github/codeql-action/analyze@v1 71 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | node_modules 3 | lib/ 4 | dist/ 5 | !test/**/ 6 | coverage 7 | inst/ 8 | .nyc_output 9 | 10 | # Debug Logging 11 | debug.log 12 | debug.*.log 13 | error.log 14 | error.*.log 15 | -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | yarn lint-staged 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | /.vscode 2 | /.github 3 | /.husky 4 | /.nyc_output 5 | /src 6 | /inst 7 | /lib/*.js.map 8 | /lib/*.ts 9 | /test 10 | /coverage 11 | /.editorconfig 12 | /.eslintrc.js 13 | /.eslintignore 14 | /.gitignore 15 | /appveyor.yml 16 | /jest.config.js 17 | /tsconfig.json 18 | /tslint.json 19 | /yarn.lock 20 | /*.tgz 21 | /webpack.config.js 22 | /jest.config.js 23 | /appveyor.yml 24 | /tsconfig.json 25 | /.releaserc.json 26 | /fix-worker-bundle.js 27 | -------------------------------------------------------------------------------- /.releaserc.json: -------------------------------------------------------------------------------- 1 | { 2 | "branches": [ 3 | "master" 4 | ], 5 | "plugins": [ 6 | "@semantic-release/commit-analyzer", 7 | "@semantic-release/release-notes-generator", 8 | "@semantic-release/changelog", 9 | "@semantic-release/npm", 10 | [ 11 | "@semantic-release/git", 12 | { 13 | "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" 14 | } 15 | ] 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.1.0", 3 | // List of configurations. Add new configurations or edit existing ones. 4 | "configurations": [ 5 | { 6 | "name": "Attach", 7 | "type": "node", 8 | "request": "attach", 9 | "port": 6004, 10 | "sourceMaps": true, 11 | "outFiles": [ 12 | "${workspaceRoot}/lib/**/*.js" 13 | ] 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "./node_modules/typescript/lib", 3 | "[typescript]": { 4 | "editor.defaultFormatter": "esbenp.prettier-vscode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "command": "npm", 4 | "args": ["run", "watch"], 5 | "isWatching": true, 6 | "problemMatcher": "$tsc-watch", 7 | "tasks": [ 8 | { 9 | "label": "npm", 10 | "type": "shell", 11 | "command": "npm", 12 | "args": [ 13 | "run", 14 | "watch" 15 | ], 16 | "isBackground": true, 17 | "problemMatcher": "$tsc-watch", 18 | "group": "build" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /.vscode/tasks.json.old: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.1.0", 3 | "command": "npm", 4 | "isShellCommand": true, 5 | "showOutput": "silent", 6 | "args": ["run", "watch"], 7 | "isWatching": true, 8 | "problemMatcher": "$tsc-watch" 9 | } -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2023 Tobias Bieniek, Thomas Sauer, Aleksandr Kanunnikov and other contributors. 2 | 3 | All rights reserved. 4 | 5 | MIT License 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 8 | 9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ember Language Server 2 | 3 | [![Greenkeeper badge](https://badges.greenkeeper.io/lifeart/ember-language-server.svg)](https://greenkeeper.io/) 4 | 5 | The Ember Language Server (ELS) implements the [Language Server Protocol](https://github.com/Microsoft/language-server-protocol) for Ember.js projects. ELS enables editors to provide features like auto complete, goto definition and diagnostics. To get these features, you have to install the plugin for your editor. 6 | 7 | ## Features 8 | 9 | All features currently only work in Ember CLI application that use the default classic structure, and are a rough first draft with a lot of room for improvements. Pods and addons are not supported yet. 10 | 11 | - Autocompletion 12 | - `*.{js/ts}`: services, models, routes, transforms 13 | - `*.hbs`: components, route names, helpers, modifiers, local paths, arguments 14 | - Namespaces support (batman syntax) 15 | 16 | - Template linting 17 | - works only if `ember-template-lint` dependency added into project. 18 | - [ember-template-lint](https://github.com/ember-template-lint/ember-template-lint) (`v2`, `v3`, `v4`) integration, including documentation links and auto fixes 19 | - template linting inside `.js` and `.ts` files (with `hbs` literal) 20 | - experimental linting inside `.gjs` and `.gts` files (with `