Compare commits

...

159 Commits

Author SHA1 Message Date
Dave Bartolomeo
4546616871 Update changelog
Some checks failed
Release / Release (push) Has been cancelled
Release / Publish to VS Code Marketplace (push) Has been cancelled
Release / Publish to Open VSX Registry (push) Has been cancelled
2024-08-07 11:00:34 -04:00
Dave Bartolomeo
b201c45e2d Merge branch 'main' into v1.14.0 2024-08-06 15:06:47 -04:00
Dave Bartolomeo
3364af5305 Merge pull request #3683 from github/dbartol/docker-fix
Fix docker command
2024-08-06 11:35:23 -04:00
Dave Bartolomeo
d6af6e7c4c Fix docker command 2024-08-06 11:11:34 -04:00
Dave Bartolomeo
f9f454509b v1.14.0 2024-08-06 10:44:42 -04:00
github-actions[bot]
9f0453a80a Bump Node version to v20.14.0 (#3680)
Co-authored-by: github-actions[bot] <github-actions@github.com>
2024-08-05 09:36:55 +02:00
Charis Kyriakou
af2a592e3d Remove support for CodeQL CLI versions older than v2.15.5 (#3681) 2024-08-05 08:36:13 +01:00
dependabot[bot]
a4fcbd093c Bump the storybook group in /extensions/ql-vscode with 13 updates (#3678)
Bumps the storybook group in /extensions/ql-vscode with 13 updates:

| Package | From | To |
| --- | --- | --- |
| [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) | `8.2.6` | `8.2.7` |
| [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/actions) | `8.2.6` | `8.2.7` |
| [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.2.6` | `8.2.7` |
| [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions) | `8.2.6` | `8.2.7` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.2.6` | `8.2.7` |
| [@storybook/blocks](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/blocks) | `8.2.6` | `8.2.7` |
| [@storybook/components](https://github.com/storybookjs/storybook/tree/HEAD/code/deprecated/components) | `8.2.6` | `8.2.7` |
| [@storybook/icons](https://github.com/storybookjs/icons) | `1.2.9` | `1.2.10` |
| [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.2.6` | `8.2.7` |
| [@storybook/react](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react) | `8.2.6` | `8.2.7` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `8.2.6` | `8.2.7` |
| [@storybook/theming](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming) | `8.2.6` | `8.2.7` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.2.6` | `8.2.7` |


Updates `@storybook/addon-a11y` from 8.2.6 to 8.2.7
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.7/code/addons/a11y)

Updates `@storybook/addon-actions` from 8.2.6 to 8.2.7
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.7/code/addons/actions)

Updates `@storybook/addon-essentials` from 8.2.6 to 8.2.7
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.7/code/addons/essentials)

Updates `@storybook/addon-interactions` from 8.2.6 to 8.2.7
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.7/code/addons/interactions)

Updates `@storybook/addon-links` from 8.2.6 to 8.2.7
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.7/code/addons/links)

Updates `@storybook/blocks` from 8.2.6 to 8.2.7
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.7/code/lib/blocks)

Updates `@storybook/components` from 8.2.6 to 8.2.7
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.7/code/deprecated/components)

Updates `@storybook/icons` from 1.2.9 to 1.2.10
- [Release notes](https://github.com/storybookjs/icons/releases)
- [Changelog](https://github.com/storybookjs/icons/blob/main/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/icons/compare/v1.2.9...v1.2.10)

Updates `@storybook/manager-api` from 8.2.6 to 8.2.7
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.7/code/lib/manager-api)

Updates `@storybook/react` from 8.2.6 to 8.2.7
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.7/code/renderers/react)

Updates `@storybook/react-vite` from 8.2.6 to 8.2.7
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.7/code/frameworks/react-vite)

Updates `@storybook/theming` from 8.2.6 to 8.2.7
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.7/code/lib/theming)

Updates `storybook` from 8.2.6 to 8.2.7
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.7/code/lib/cli)

---
updated-dependencies:
- dependency-name: "@storybook/addon-a11y"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-essentials"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-interactions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/blocks"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/components"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/icons"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/manager-api"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react-vite"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/theming"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: storybook
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-02 09:31:28 +01:00
Dave Bartolomeo
f02c007bdb Merge pull request #3677 from github/dbartol/provenance-builtin
Display non-MaD provenance in results view
2024-08-01 10:00:50 -04:00
Dave Bartolomeo
66874823aa Merge branch 'main' into dbartol/provenance-builtin 2024-08-01 09:17:15 -04:00
Koen Vlaswinkel
1a59467707 Merge pull request #3676 from github/koesie10/remove-python-ff
Remove feature flag for Python model editor
2024-08-01 11:43:24 +02:00
Dave Bartolomeo
78383e376c Display non-MaD provenance in results view 2024-07-31 12:20:47 -04:00
Koen Vlaswinkel
32cf05cb4b Update CHANGELOG 2024-07-31 10:17:29 +01:00
Koen Vlaswinkel
1ec47a4eef Remove feature flag for Python model editor 2024-07-31 09:07:23 +01:00
Dave Bartolomeo
4d2f84d599 Merge pull request #3669 from github/dbartol/provenance
Display path provenance information in results view
2024-07-30 16:37:10 -04:00
Dave Bartolomeo
a858b39f26 More PR feedback 2024-07-30 16:12:45 -04:00
Dave Bartolomeo
5d71ce41a8 DEFAULT_USER_SETTINGS 2024-07-30 16:09:27 -04:00
Dave Bartolomeo
76354c4518 Fix PR feedback 2024-07-30 16:02:49 -04:00
Dave Bartolomeo
4e310ce652 Merge remote-tracking branch 'origin/main' into dbartol/provenance 2024-07-29 17:58:46 +00:00
dependabot[bot]
68bfa00707 Bump the storybook group in /extensions/ql-vscode with 12 updates (#3673)
Bumps the storybook group in /extensions/ql-vscode with 12 updates:

| Package | From | To |
| --- | --- | --- |
| [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) | `8.2.5` | `8.2.6` |
| [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/actions) | `8.2.5` | `8.2.6` |
| [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.2.5` | `8.2.6` |
| [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions) | `8.2.5` | `8.2.6` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.2.5` | `8.2.6` |
| [@storybook/blocks](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/blocks) | `8.2.5` | `8.2.6` |
| [@storybook/components](https://github.com/storybookjs/storybook/tree/HEAD/code/deprecated/components) | `8.2.5` | `8.2.6` |
| [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.2.5` | `8.2.6` |
| [@storybook/react](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react) | `8.2.5` | `8.2.6` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `8.2.5` | `8.2.6` |
| [@storybook/theming](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming) | `8.2.5` | `8.2.6` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.2.5` | `8.2.6` |


Updates `@storybook/addon-a11y` from 8.2.5 to 8.2.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.6/code/addons/a11y)

Updates `@storybook/addon-actions` from 8.2.5 to 8.2.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.6/code/addons/actions)

Updates `@storybook/addon-essentials` from 8.2.5 to 8.2.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.6/code/addons/essentials)

Updates `@storybook/addon-interactions` from 8.2.5 to 8.2.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.6/code/addons/interactions)

Updates `@storybook/addon-links` from 8.2.5 to 8.2.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.6/code/addons/links)

Updates `@storybook/blocks` from 8.2.5 to 8.2.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.6/code/lib/blocks)

Updates `@storybook/components` from 8.2.5 to 8.2.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.6/code/deprecated/components)

Updates `@storybook/manager-api` from 8.2.5 to 8.2.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.6/code/lib/manager-api)

Updates `@storybook/react` from 8.2.5 to 8.2.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.6/code/renderers/react)

Updates `@storybook/react-vite` from 8.2.5 to 8.2.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.6/code/frameworks/react-vite)

Updates `@storybook/theming` from 8.2.5 to 8.2.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.6/code/lib/theming)

Updates `storybook` from 8.2.5 to 8.2.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.6/code/lib/cli)

---
updated-dependencies:
- dependency-name: "@storybook/addon-a11y"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-essentials"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-interactions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/blocks"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/components"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/manager-api"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react-vite"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/theming"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: storybook
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Charis Kyriakou <charisk@users.noreply.github.com>
2024-07-26 14:34:46 +01:00
dependabot[bot]
51ef674cc5 Bump the testing-library group in /extensions/ql-vscode with 2 updates (#3674)
Bumps the testing-library group in /extensions/ql-vscode with 2 updates: [@testing-library/dom](https://github.com/testing-library/dom-testing-library) and [@testing-library/jest-dom](https://github.com/testing-library/jest-dom).


Updates `@testing-library/dom` from 10.3.2 to 10.4.0
- [Release notes](https://github.com/testing-library/dom-testing-library/releases)
- [Changelog](https://github.com/testing-library/dom-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/dom-testing-library/compare/v10.3.2...v10.4.0)

Updates `@testing-library/jest-dom` from 6.4.6 to 6.4.8
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.4.6...v6.4.8)

---
updated-dependencies:
- dependency-name: "@testing-library/dom"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: testing-library
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: testing-library
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-26 09:00:38 +01:00
Koen Vlaswinkel
d2612e2dca Merge pull request #3675 from github/github-action/bump-cli
Bump CLI Version to v2.18.1 for integration tests
2024-07-26 09:44:45 +02:00
github-actions[bot]
1db3dda533 Bump CLI version from v2.18.0 to v2.18.1 for integration tests 2024-07-25 17:07:59 +00:00
Peter Stöckli
9c3b0b24c9 Display length of shortest path in MRVA UI (#3671)
* feature: display length of shortest path in MRVA UI #3659

* add entry to changelog

* replace link in changelog + remove test-id
2024-07-25 10:15:22 +01:00
dependabot[bot]
df06c75070 Bump the storybook group across 1 directory with 12 updates (#3670)
Bumps the storybook group with 11 updates in the /extensions/ql-vscode directory:

| Package | From | To |
| --- | --- | --- |
| [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) | `8.1.11` | `8.2.5` |
| [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/actions) | `8.1.11` | `8.2.5` |
| [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.1.11` | `8.2.5` |
| [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions) | `8.1.11` | `8.2.5` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.1.11` | `8.2.5` |
| [@storybook/components](https://github.com/storybookjs/storybook/tree/HEAD/code/deprecated/components) | `8.1.11` | `8.2.5` |
| [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.1.11` | `8.2.5` |
| [@storybook/react](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react) | `8.1.11` | `8.2.5` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `8.1.11` | `8.2.5` |
| [@storybook/theming](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming) | `8.1.11` | `8.2.5` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.1.11` | `8.2.5` |



Updates `@storybook/addon-a11y` from 8.1.11 to 8.2.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.5/code/addons/a11y)

Updates `@storybook/addon-actions` from 8.1.11 to 8.2.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.5/code/addons/actions)

Updates `@storybook/addon-essentials` from 8.1.11 to 8.2.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.5/code/addons/essentials)

Updates `@storybook/addon-interactions` from 8.1.11 to 8.2.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.5/code/addons/interactions)

Updates `@storybook/addon-links` from 8.1.11 to 8.2.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.5/code/addons/links)

Updates `@storybook/blocks` from 8.1.11 to 8.2.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.5/code/lib/blocks)

Updates `@storybook/components` from 8.1.11 to 8.2.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.5/code/deprecated/components)

Updates `@storybook/manager-api` from 8.1.11 to 8.2.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.5/code/lib/manager-api)

Updates `@storybook/react` from 8.1.11 to 8.2.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.5/code/renderers/react)

Updates `@storybook/react-vite` from 8.1.11 to 8.2.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.5/code/frameworks/react-vite)

Updates `@storybook/theming` from 8.1.11 to 8.2.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.5/code/lib/theming)

Updates `storybook` from 8.1.11 to 8.2.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.5/code/lib/cli)

---
updated-dependencies:
- dependency-name: "@storybook/addon-a11y"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/addon-essentials"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/addon-interactions"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/blocks"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/components"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/manager-api"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/react"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/react-vite"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/theming"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: storybook
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-23 13:51:05 +01:00
dependabot[bot]
b3c44ea317 Bump the storybook group across 1 directory with 12 updates (#3668)
* Bump the storybook group across 1 directory with 12 updates

Bumps the storybook group with 11 updates in the /extensions/ql-vscode directory:

| Package | From | To |
| --- | --- | --- |
| [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) | `8.1.11` | `8.2.4` |
| [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/actions) | `8.1.11` | `8.2.4` |
| [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.1.11` | `8.2.4` |
| [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions) | `8.1.11` | `8.2.4` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.1.11` | `8.2.4` |
| [@storybook/components](https://github.com/storybookjs/storybook/tree/HEAD/code/deprecated/components) | `8.1.11` | `8.2.4` |
| [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.1.11` | `8.2.4` |
| [@storybook/react](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react) | `8.1.11` | `8.2.4` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `8.1.11` | `8.2.4` |
| [@storybook/theming](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming) | `8.1.11` | `8.2.4` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.1.11` | `8.2.4` |



Updates `@storybook/addon-a11y` from 8.1.11 to 8.2.4
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.4/code/addons/a11y)

Updates `@storybook/addon-actions` from 8.1.11 to 8.2.4
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.4/code/addons/actions)

Updates `@storybook/addon-essentials` from 8.1.11 to 8.2.4
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.4/code/addons/essentials)

Updates `@storybook/addon-interactions` from 8.1.11 to 8.2.4
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.4/code/addons/interactions)

Updates `@storybook/addon-links` from 8.1.11 to 8.2.4
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.4/code/addons/links)

Updates `@storybook/blocks` from 8.1.11 to 8.2.4
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.4/code/lib/blocks)

Updates `@storybook/components` from 8.1.11 to 8.2.4
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.4/code/deprecated/components)

Updates `@storybook/manager-api` from 8.1.11 to 8.2.4
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.4/code/lib/manager-api)

Updates `@storybook/react` from 8.1.11 to 8.2.4
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.4/code/renderers/react)

Updates `@storybook/react-vite` from 8.1.11 to 8.2.4
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.4/code/frameworks/react-vite)

Updates `@storybook/theming` from 8.1.11 to 8.2.4
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.4/code/lib/theming)

Updates `storybook` from 8.1.11 to 8.2.4
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.2.4/code/lib/cli)

---
updated-dependencies:
- dependency-name: "@storybook/addon-a11y"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/addon-essentials"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/addon-interactions"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/blocks"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/components"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/manager-api"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/react"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/react-vite"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/theming"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: storybook
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fix import of internal storybook type

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Charis Kyriakou <charisk@users.noreply.github.com>
2024-07-23 11:23:03 +01:00
dependabot[bot]
d6673c4ede Bump eslint-plugin-react-hooks in /extensions/ql-vscode (#3666)
Bumps [eslint-plugin-react-hooks](https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks) from 4.6.0 to 4.6.2.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/HEAD/packages/eslint-plugin-react-hooks)

---
updated-dependencies:
- dependency-name: eslint-plugin-react-hooks
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Charis Kyriakou <charisk@users.noreply.github.com>
2024-07-23 09:49:01 +01:00
Dave Bartolomeo
d68e270e90 Add some basic validation when parsing SARIF
This is roughly equivalent to the validation we had before, when we were only including `runs.0.results`.
2024-07-19 16:46:03 -04:00
Dave Bartolomeo
97b9c43ae1 Display path provenance information in results view 2024-07-18 16:14:24 -04:00
dependabot[bot]
7e00e9cd2f Bump @testing-library/dom (#3665)
Bumps the testing-library group with 1 update in the /extensions/ql-vscode directory: [@testing-library/dom](https://github.com/testing-library/dom-testing-library).


Updates `@testing-library/dom` from 10.3.0 to 10.3.2
- [Release notes](https://github.com/testing-library/dom-testing-library/releases)
- [Changelog](https://github.com/testing-library/dom-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/dom-testing-library/compare/v10.3.0...v10.3.2)

---
updated-dependencies:
- dependency-name: "@testing-library/dom"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: testing-library
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-18 14:21:56 +01:00
Nick Rolfe
459d606751 Merge pull request #3658 from github/nickrolfe/summary-symbols
Allow compatible CLIs to generate summary symbols file
2024-07-12 11:43:33 +01:00
Nick Rolfe
a069ae45fb Allow compatible CLIs to generate summary symbols file
This should be much faster than generating it in the extension.
2024-07-12 10:18:56 +00:00
Dave Bartolomeo
a6225c5edf Basic table layout for path provenance 2024-07-11 12:48:01 -04:00
dependabot[bot]
64d4439815 Bump vscode-jsonrpc from 8.2.0 to 8.2.1 in /extensions/ql-vscode (#3664)
Bumps [vscode-jsonrpc](https://github.com/Microsoft/vscode-languageserver-node/tree/HEAD/jsonrpc) from 8.2.0 to 8.2.1.
- [Release notes](https://github.com/Microsoft/vscode-languageserver-node/releases)
- [Commits](https://github.com/Microsoft/vscode-languageserver-node/commits/release/jsonrpc/8.2.1/jsonrpc)

---
updated-dependencies:
- dependency-name: vscode-jsonrpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-11 15:58:11 +02:00
github-actions[bot]
b11a9e2c88 Bump CLI version from v2.17.6 to v2.18.0 for integration tests (#3661)
Co-authored-by: github-actions[bot] <github-actions@github.com>
2024-07-11 11:49:58 +02:00
Fotis Koutoulakis
75ab23bbd8 Merge pull request #3656 from github/dependabot/npm_and_yarn/extensions/ql-vscode/testing-library-86bd199b63
Bump @testing-library/dom from 10.2.0 to 10.3.0 in /extensions/ql-vscode in the testing-library group
2024-07-04 16:27:40 +01:00
dependabot[bot]
5bab2421ea Bump @testing-library/dom
Bumps the testing-library group in /extensions/ql-vscode with 1 update: [@testing-library/dom](https://github.com/testing-library/dom-testing-library).


Updates `@testing-library/dom` from 10.2.0 to 10.3.0
- [Release notes](https://github.com/testing-library/dom-testing-library/releases)
- [Changelog](https://github.com/testing-library/dom-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/dom-testing-library/compare/v10.2.0...v10.3.0)

---
updated-dependencies:
- dependency-name: "@testing-library/dom"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: testing-library
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-04 16:14:13 +01:00
Fotis Koutoulakis
d5edbca4e4 Merge pull request #3657 from github/dependabot/npm_and_yarn/extensions/ql-vscode/babel/plugin-transform-modules-commonjs-7.24.7
Bump @babel/plugin-transform-modules-commonjs from 7.24.1 to 7.24.7 in /extensions/ql-vscode
2024-07-04 16:13:47 +01:00
dependabot[bot]
1ee349d2ef Bump @babel/plugin-transform-modules-commonjs in /extensions/ql-vscode
Bumps [@babel/plugin-transform-modules-commonjs](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-modules-commonjs) from 7.24.1 to 7.24.7.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.24.7/packages/babel-plugin-transform-modules-commonjs)

---
updated-dependencies:
- dependency-name: "@babel/plugin-transform-modules-commonjs"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-04 15:49:08 +01:00
Fotis Koutoulakis
79f89c9e4b Merge pull request #3655 from github/dependabot/npm_and_yarn/extensions/ql-vscode/storybook-68ca77b8c2
Bump @storybook/csf from 0.1.9 to 0.1.11 in /extensions/ql-vscode in the storybook group
2024-07-04 15:48:26 +01:00
dependabot[bot]
2fbdefe4f0 Bump @storybook/csf in /extensions/ql-vscode in the storybook group
Bumps the storybook group in /extensions/ql-vscode with 1 update: [@storybook/csf](https://github.com/ComponentDriven/csf).


Updates `@storybook/csf` from 0.1.9 to 0.1.11
- [Release notes](https://github.com/ComponentDriven/csf/releases)
- [Changelog](https://github.com/ComponentDriven/csf/blob/v0.1.11/CHANGELOG.md)
- [Commits](https://github.com/ComponentDriven/csf/compare/v0.1.9...v0.1.11)

---
updated-dependencies:
- dependency-name: "@storybook/csf"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-04 13:51:10 +00:00
Koen Vlaswinkel
01403aeee7 Merge pull request #3654 from github/koesie10/python-type-models
Enable type models for Python in the model editor
2024-07-04 09:35:21 +02:00
Koen Vlaswinkel
9f7f34a87c Merge pull request #3653 from github/koesie10/python-use-simplified-paths-and-endpoint-kinds
Use rich type columns and endpoint kinds for Python model editor
2024-07-04 09:35:09 +02:00
Koen Vlaswinkel
987b92ab1e Enable type models for Python 2024-07-02 16:18:22 +02:00
Koen Vlaswinkel
6fd2579c9c Use simplified paths and endpoint kinds for Python model editor 2024-07-02 15:42:10 +02:00
Nora
c9e1a64d3a Merge pull request #3648 from github/dependabot/npm_and_yarn/extensions/ql-vscode/storybook-8918104ceb
Bump the storybook group in /extensions/ql-vscode with 13 updates
2024-06-28 09:53:27 +02:00
Nora
03f330da52 Add storybook testing library lock file changes 2024-06-28 07:40:31 +00:00
Nora
4f6d72a9ce Merge branch 'main' into dependabot/npm_and_yarn/extensions/ql-vscode/storybook-8918104ceb 2024-06-28 09:37:08 +02:00
Nora
b5d3a612d8 Merge pull request #3651 from github/github-action/bump-cli
Bump CLI Version to v2.17.6 for integration tests
2024-06-28 09:15:20 +02:00
github-actions[bot]
48209e7732 Bump CLI version from v2.17.5 to v2.17.6 for integration tests 2024-06-27 17:39:00 +00:00
dependabot[bot]
9934449ae9 Bump @testing-library/dom (#3649)
Bumps the testing-library group in /extensions/ql-vscode with 1 update: [@testing-library/dom](https://github.com/testing-library/dom-testing-library).


Updates `@testing-library/dom` from 10.1.0 to 10.2.0
- [Release notes](https://github.com/testing-library/dom-testing-library/releases)
- [Changelog](https://github.com/testing-library/dom-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/dom-testing-library/compare/v10.1.0...v10.2.0)

---
updated-dependencies:
- dependency-name: "@testing-library/dom"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: testing-library
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-27 17:00:03 +02:00
dependabot[bot]
fdc4d97f93 Bump @vscode/codicons from 0.0.35 to 0.0.36 in /extensions/ql-vscode (#3650)
Bumps [@vscode/codicons](https://github.com/microsoft/vscode-codicons) from 0.0.35 to 0.0.36.
- [Release notes](https://github.com/microsoft/vscode-codicons/releases)
- [Commits](https://github.com/microsoft/vscode-codicons/compare/0.0.35...0.0.36)

---
updated-dependencies:
- dependency-name: "@vscode/codicons"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-27 16:40:50 +02:00
dependabot[bot]
b1ca9418b4 Bump the storybook group in /extensions/ql-vscode with 13 updates
Bumps the storybook group in /extensions/ql-vscode with 13 updates:

| Package | From | To |
| --- | --- | --- |
| [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) | `8.1.10` | `8.1.11` |
| [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/actions) | `8.1.10` | `8.1.11` |
| [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.1.10` | `8.1.11` |
| [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions) | `8.1.10` | `8.1.11` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.1.10` | `8.1.11` |
| [@storybook/blocks](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/blocks) | `8.1.10` | `8.1.11` |
| [@storybook/components](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/components) | `8.1.10` | `8.1.11` |
| [@storybook/csf](https://github.com/ComponentDriven/csf) | `0.1.8` | `0.1.9` |
| [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.1.10` | `8.1.11` |
| [@storybook/react](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react) | `8.1.10` | `8.1.11` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `8.1.10` | `8.1.11` |
| [@storybook/theming](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming) | `8.1.10` | `8.1.11` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.1.10` | `8.1.11` |


Updates `@storybook/addon-a11y` from 8.1.10 to 8.1.11
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/addons/a11y)

Updates `@storybook/addon-actions` from 8.1.10 to 8.1.11
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/addons/actions)

Updates `@storybook/addon-essentials` from 8.1.10 to 8.1.11
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/addons/essentials)

Updates `@storybook/addon-interactions` from 8.1.10 to 8.1.11
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/addons/interactions)

Updates `@storybook/addon-links` from 8.1.10 to 8.1.11
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/addons/links)

Updates `@storybook/blocks` from 8.1.10 to 8.1.11
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/ui/blocks)

Updates `@storybook/components` from 8.1.10 to 8.1.11
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/ui/components)

Updates `@storybook/csf` from 0.1.8 to 0.1.9
- [Release notes](https://github.com/ComponentDriven/csf/releases)
- [Changelog](https://github.com/ComponentDriven/csf/blob/v0.1.9/CHANGELOG.md)
- [Commits](https://github.com/ComponentDriven/csf/compare/v0.1.8...v0.1.9)

Updates `@storybook/manager-api` from 8.1.10 to 8.1.11
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/lib/manager-api)

Updates `@storybook/react` from 8.1.10 to 8.1.11
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/renderers/react)

Updates `@storybook/react-vite` from 8.1.10 to 8.1.11
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/frameworks/react-vite)

Updates `@storybook/theming` from 8.1.10 to 8.1.11
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/lib/theming)

Updates `storybook` from 8.1.10 to 8.1.11
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/lib/cli)

---
updated-dependencies:
- dependency-name: "@storybook/addon-a11y"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-essentials"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-interactions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/blocks"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/components"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/csf"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/manager-api"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react-vite"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/theming"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: storybook
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-27 13:40:12 +00:00
Henry Mercer
7d3a350a28 Merge pull request #3634 from github/dependabot/npm_and_yarn/extensions/ql-vscode/multi-a9f852c250
Bump braces and gulp in /extensions/ql-vscode
2024-06-25 20:14:14 +01:00
Henry Mercer
ca4c511227 Build: Don't try to encode WASM as UTF-8 when copying it 2024-06-25 18:47:34 +01:00
Nora
d4df484acb Merge pull request #3645 from github/dependabot/npm_and_yarn/extensions/ql-vscode/storybook-445e2aa325
Bump the storybook group in /extensions/ql-vscode with 12 updates
2024-06-21 09:26:31 +02:00
Nora
3e1d924110 Merge pull request #3646 from github/dependabot/npm_and_yarn/extensions/ql-vscode/testing-library-f694122557
Bump @testing-library/jest-dom from 6.4.5 to 6.4.6 in /extensions/ql-vscode in the testing-library group
2024-06-21 09:26:06 +02:00
dependabot[bot]
cc4666a614 Bump @testing-library/jest-dom
Bumps the testing-library group in /extensions/ql-vscode with 1 update: [@testing-library/jest-dom](https://github.com/testing-library/jest-dom).


Updates `@testing-library/jest-dom` from 6.4.5 to 6.4.6
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.4.5...v6.4.6)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: testing-library
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-20 13:19:50 +00:00
dependabot[bot]
51906bbcee Bump the storybook group in /extensions/ql-vscode with 12 updates
Bumps the storybook group in /extensions/ql-vscode with 12 updates:

| Package | From | To |
| --- | --- | --- |
| [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) | `8.1.8` | `8.1.10` |
| [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/actions) | `8.1.8` | `8.1.10` |
| [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.1.8` | `8.1.10` |
| [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions) | `8.1.8` | `8.1.10` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.1.8` | `8.1.10` |
| [@storybook/blocks](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/blocks) | `8.1.8` | `8.1.10` |
| [@storybook/components](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/components) | `8.1.8` | `8.1.10` |
| [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.1.8` | `8.1.10` |
| [@storybook/react](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react) | `8.1.8` | `8.1.10` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `8.1.8` | `8.1.10` |
| [@storybook/theming](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming) | `8.1.8` | `8.1.10` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.1.8` | `8.1.10` |


Updates `@storybook/addon-a11y` from 8.1.8 to 8.1.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.10/code/addons/a11y)

Updates `@storybook/addon-actions` from 8.1.8 to 8.1.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.10/code/addons/actions)

Updates `@storybook/addon-essentials` from 8.1.8 to 8.1.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.10/code/addons/essentials)

Updates `@storybook/addon-interactions` from 8.1.8 to 8.1.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.10/code/addons/interactions)

Updates `@storybook/addon-links` from 8.1.8 to 8.1.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.10/code/addons/links)

Updates `@storybook/blocks` from 8.1.8 to 8.1.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.10/code/ui/blocks)

Updates `@storybook/components` from 8.1.8 to 8.1.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.10/code/ui/components)

Updates `@storybook/manager-api` from 8.1.8 to 8.1.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.10/code/lib/manager-api)

Updates `@storybook/react` from 8.1.8 to 8.1.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.10/code/renderers/react)

Updates `@storybook/react-vite` from 8.1.8 to 8.1.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.10/code/frameworks/react-vite)

Updates `@storybook/theming` from 8.1.8 to 8.1.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.10/code/lib/theming)

Updates `storybook` from 8.1.8 to 8.1.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.10/code/lib/cli)

---
updated-dependencies:
- dependency-name: "@storybook/addon-a11y"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-essentials"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-interactions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/blocks"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/components"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/manager-api"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react-vite"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/theming"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: storybook
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-20 13:19:27 +00:00
Robert
fcfa6979e2 Merge pull request #3643 from github/robertbrignull/re-enable-short-paths
Re-enable windows 8.3 paths in tests
2024-06-19 10:20:24 +01:00
Andrew Eisenberg
f0783ed274 Merge pull request #3644 from github/dependabot/npm_and_yarn/extensions/ql-vscode/ws-8.17.1
Bump ws from 8.15.0 to 8.17.1 in /extensions/ql-vscode
2024-06-18 14:33:18 -07:00
dependabot[bot]
fe45e00fb3 Bump ws from 8.15.0 to 8.17.1 in /extensions/ql-vscode
Bumps [ws](https://github.com/websockets/ws) from 8.15.0 to 8.17.1.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.15.0...8.17.1)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-18 21:07:21 +00:00
Robert
4a317d33a9 Enable 8.3 paths in unit tests 2024-06-18 10:08:18 +00:00
Robert
ffc7135c1f Revert "Remove short-paths.test.ts"
This reverts commit 10f4b47019.
2024-06-18 09:31:33 +00:00
Nora
c805b48f18 Merge pull request #3640 from github/nora/update-pr-template
Update vscode-codeql PR template
2024-06-17 17:32:50 +02:00
Nora
e1b95c2f7c Merge pull request #3641 from github/nora/update-outdated-readme-links
Update outdated links in VS Code extension README
2024-06-17 16:54:07 +02:00
Nora
481d2f5404 Remove language preference
Co-authored-by: Charis Kyriakou <charisk@users.noreply.github.com>
2024-06-17 09:22:55 +02:00
Nora
15fa23acb4 Fix grammatical issue
Co-authored-by: Charis Kyriakou <charisk@users.noreply.github.com>
2024-06-17 09:22:27 +02:00
Nora
a625d9aabe Update old links 2024-06-14 15:11:47 +00:00
Nora
cd70b19bb3 Add changelog reminder to PR submit guidance 2024-06-14 14:52:58 +00:00
Nora
7a58084df9 Remove checklist but keep a note on the changelog 2024-06-14 14:50:18 +00:00
Nora
916d16126b Merge pull request #3633 from github/github-action/bump-node-version
Bump Node version to v20.9.0
2024-06-14 14:42:54 +02:00
Nora
a5eb915267 Merge pull request #3632 from github/dependabot/npm_and_yarn/extensions/ql-vscode/ts-unused-exports-10.1.0
Bump ts-unused-exports from 10.0.1 to 10.1.0 in /extensions/ql-vscode
2024-06-14 14:42:44 +02:00
dependabot[bot]
a5440ef482 Bump ts-unused-exports from 10.0.1 to 10.1.0 in /extensions/ql-vscode
Bumps [ts-unused-exports](https://github.com/pzavolinsky/ts-unused-exports) from 10.0.1 to 10.1.0.
- [Changelog](https://github.com/pzavolinsky/ts-unused-exports/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pzavolinsky/ts-unused-exports/commits)

---
updated-dependencies:
- dependency-name: ts-unused-exports
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-14 12:26:39 +00:00
Nora
fc86be7687 Merge branch 'main' into github-action/bump-node-version 2024-06-14 12:24:20 +00:00
Nora
f0909a9d67 Merge pull request #3636 from github/github-action/bump-cli
Bump CLI Version to v2.17.5 for integration tests
2024-06-14 14:23:19 +02:00
Nora
40b5b5ba7e Merge pull request #3639 from github/dependabot/npm_and_yarn/extensions/ql-vscode/storybook-f899e8f28b
Bump the storybook group in /extensions/ql-vscode with 12 updates
2024-06-13 15:50:42 +02:00
dependabot[bot]
fa85bcfad6 Bump the storybook group in /extensions/ql-vscode with 12 updates
Bumps the storybook group in /extensions/ql-vscode with 12 updates:

| Package | From | To |
| --- | --- | --- |
| [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) | `8.1.6` | `8.1.8` |
| [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/actions) | `8.1.6` | `8.1.8` |
| [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.1.6` | `8.1.8` |
| [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions) | `8.1.6` | `8.1.8` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.1.6` | `8.1.8` |
| [@storybook/blocks](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/blocks) | `8.1.6` | `8.1.8` |
| [@storybook/components](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/components) | `8.1.6` | `8.1.8` |
| [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.1.6` | `8.1.8` |
| [@storybook/react](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react) | `8.1.6` | `8.1.8` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `8.1.6` | `8.1.8` |
| [@storybook/theming](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming) | `8.1.6` | `8.1.8` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.1.6` | `8.1.8` |


Updates `@storybook/addon-a11y` from 8.1.6 to 8.1.8
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.8/code/addons/a11y)

Updates `@storybook/addon-actions` from 8.1.6 to 8.1.8
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.8/code/addons/actions)

Updates `@storybook/addon-essentials` from 8.1.6 to 8.1.8
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.8/code/addons/essentials)

Updates `@storybook/addon-interactions` from 8.1.6 to 8.1.8
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.8/code/addons/interactions)

Updates `@storybook/addon-links` from 8.1.6 to 8.1.8
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.8/code/addons/links)

Updates `@storybook/blocks` from 8.1.6 to 8.1.8
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.8/code/ui/blocks)

Updates `@storybook/components` from 8.1.6 to 8.1.8
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.8/code/ui/components)

Updates `@storybook/manager-api` from 8.1.6 to 8.1.8
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.8/code/lib/manager-api)

Updates `@storybook/react` from 8.1.6 to 8.1.8
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.8/code/renderers/react)

Updates `@storybook/react-vite` from 8.1.6 to 8.1.8
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.8/code/frameworks/react-vite)

Updates `@storybook/theming` from 8.1.6 to 8.1.8
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.8/code/lib/theming)

Updates `storybook` from 8.1.6 to 8.1.8
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.8/code/lib/cli)

---
updated-dependencies:
- dependency-name: "@storybook/addon-a11y"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-essentials"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-interactions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/blocks"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/components"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/manager-api"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react-vite"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/theming"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: storybook
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-13 13:36:58 +00:00
Chris Smowton
dd1b054f26 Merge branch 'main' into github-action/bump-cli 2024-06-13 14:33:51 +01:00
Kasper Svendsen
b96cd6c7e1 Merge pull request #3635 from github/kaspersv/clear-pkg-cache-on-dbscheme-changes
Clear query server package cache on dbscheme edits
2024-06-13 13:47:16 +02:00
Kasper Svendsen
b466d2aa36 Merge branch 'main' into kaspersv/clear-pkg-cache-on-dbscheme-changes 2024-06-13 13:34:18 +02:00
Robert
7f6c1ad7f7 Merge pull request #3637 from github/robertbrignull/remove_path_tests
Remove short-paths.test.ts
2024-06-13 12:26:39 +01:00
Robert
10f4b47019 Remove short-paths.test.ts 2024-06-13 11:03:37 +00:00
github-actions[bot]
b31a769fdd Bump CLI version from v2.17.4 to v2.17.5 for integration tests 2024-06-12 17:18:50 +00:00
github-actions[bot]
c4e2f11372 Bump Node version to v20.9.0 2024-06-12 12:25:46 +00:00
Kasper Svendsen
9494d32144 Clear query server package cache on dbscheme edits 2024-06-11 10:55:42 +00:00
dependabot[bot]
8b4f2d2009 Bump braces and gulp in /extensions/ql-vscode
Bumps [braces](https://github.com/micromatch/braces) to 3.0.3 and updates ancestor dependency [gulp](https://github.com/gulpjs/gulp). These dependencies need to be updated together.


Updates `braces` from 3.0.2 to 3.0.3
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

Updates `gulp` from 4.0.2 to 5.0.0
- [Release notes](https://github.com/gulpjs/gulp/releases)
- [Changelog](https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/gulpjs/gulp/compare/v4.0.2...v5.0.0)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
- dependency-name: gulp
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-11 08:48:58 +00:00
Andrew Eisenberg
12555d90c1 Merge pull request #3630 from github/dependabot/npm_and_yarn/extensions/ql-vscode/storybook-a6a5a2e80a
Bump the storybook group in /extensions/ql-vscode with 13 updates
2024-06-06 09:48:18 -07:00
dependabot[bot]
d46e03b4cc Bump the storybook group in /extensions/ql-vscode with 13 updates
Bumps the storybook group in /extensions/ql-vscode with 13 updates:

| Package | From | To |
| --- | --- | --- |
| [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) | `8.1.5` | `8.1.6` |
| [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/actions) | `8.1.5` | `8.1.6` |
| [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.1.5` | `8.1.6` |
| [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions) | `8.1.5` | `8.1.6` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.1.5` | `8.1.6` |
| [@storybook/blocks](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/blocks) | `8.1.5` | `8.1.6` |
| [@storybook/components](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/components) | `8.1.5` | `8.1.6` |
| [@storybook/csf](https://github.com/ComponentDriven/csf) | `0.1.7` | `0.1.8` |
| [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.1.5` | `8.1.6` |
| [@storybook/react](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react) | `8.1.5` | `8.1.6` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `8.1.5` | `8.1.6` |
| [@storybook/theming](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming) | `8.1.5` | `8.1.6` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.1.5` | `8.1.6` |


Updates `@storybook/addon-a11y` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.6/code/addons/a11y)

Updates `@storybook/addon-actions` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.6/code/addons/actions)

Updates `@storybook/addon-essentials` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.6/code/addons/essentials)

Updates `@storybook/addon-interactions` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.6/code/addons/interactions)

Updates `@storybook/addon-links` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.6/code/addons/links)

Updates `@storybook/blocks` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.6/code/ui/blocks)

Updates `@storybook/components` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.6/code/ui/components)

Updates `@storybook/csf` from 0.1.7 to 0.1.8
- [Release notes](https://github.com/ComponentDriven/csf/releases)
- [Changelog](https://github.com/ComponentDriven/csf/blob/v0.1.8/CHANGELOG.md)
- [Commits](https://github.com/ComponentDriven/csf/compare/v0.1.7...v0.1.8)

Updates `@storybook/manager-api` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.6/code/lib/manager-api)

Updates `@storybook/react` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.6/code/renderers/react)

Updates `@storybook/react-vite` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.6/code/frameworks/react-vite)

Updates `@storybook/theming` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.6/code/lib/theming)

Updates `storybook` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.6/code/lib/cli)

---
updated-dependencies:
- dependency-name: "@storybook/addon-a11y"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-essentials"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-interactions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/blocks"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/components"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/csf"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/manager-api"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react-vite"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/theming"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: storybook
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-06 14:20:38 +00:00
dependabot[bot]
f0e2285122 Bump @testing-library/react (#3631)
Bumps the testing-library group in /extensions/ql-vscode with 1 update: [@testing-library/react](https://github.com/testing-library/react-testing-library).


Updates `@testing-library/react` from 15.0.7 to 16.0.0
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v15.0.7...v16.0.0)

---
updated-dependencies:
- dependency-name: "@testing-library/react"
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: testing-library
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-06 15:16:43 +01:00
Koen Vlaswinkel
f4d0d23170 Merge pull request #3629 from github/github-action/bump-cli
Bump CLI Version to v2.17.4 for integration tests
2024-06-04 10:06:27 +02:00
github-actions[bot]
513fb65560 Bump CLI version from v2.17.3 to v2.17.4 for integration tests 2024-06-03 16:10:31 +00:00
Koen Vlaswinkel
7d353ced9b Merge pull request #3626 from github/dependabot/npm_and_yarn/extensions/ql-vscode/storybook-d4cb5c71ab
Bump the storybook group in /extensions/ql-vscode with 12 updates
2024-05-31 10:09:46 +02:00
dependabot[bot]
be3506d987 Bump the storybook group in /extensions/ql-vscode with 12 updates
Bumps the storybook group in /extensions/ql-vscode with 12 updates:

| Package | From | To |
| --- | --- | --- |
| [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) | `8.1.3` | `8.1.5` |
| [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/actions) | `8.1.3` | `8.1.5` |
| [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.1.3` | `8.1.5` |
| [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions) | `8.1.3` | `8.1.5` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.1.3` | `8.1.5` |
| [@storybook/blocks](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/blocks) | `8.1.3` | `8.1.5` |
| [@storybook/components](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/components) | `8.1.3` | `8.1.5` |
| [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.1.3` | `8.1.5` |
| [@storybook/react](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react) | `8.1.3` | `8.1.5` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `8.1.3` | `8.1.5` |
| [@storybook/theming](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming) | `8.1.3` | `8.1.5` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.1.3` | `8.1.5` |


Updates `@storybook/addon-a11y` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.5/code/addons/a11y)

Updates `@storybook/addon-actions` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.5/code/addons/actions)

Updates `@storybook/addon-essentials` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.5/code/addons/essentials)

Updates `@storybook/addon-interactions` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.5/code/addons/interactions)

Updates `@storybook/addon-links` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.5/code/addons/links)

Updates `@storybook/blocks` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.5/code/ui/blocks)

Updates `@storybook/components` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.5/code/ui/components)

Updates `@storybook/manager-api` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.5/code/lib/manager-api)

Updates `@storybook/react` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.5/code/renderers/react)

Updates `@storybook/react-vite` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.5/code/frameworks/react-vite)

Updates `@storybook/theming` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.5/code/lib/theming)

Updates `storybook` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.5/code/lib/cli)

---
updated-dependencies:
- dependency-name: "@storybook/addon-a11y"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-essentials"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-interactions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/blocks"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/components"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/manager-api"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react-vite"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/theming"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: storybook
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-30 14:06:20 +00:00
dependabot[bot]
3fa6304050 Bump @babel/core from 7.24.4 to 7.24.6 in /extensions/ql-vscode (#3628)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.24.4 to 7.24.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.24.6/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-30 07:03:18 -07:00
dependabot[bot]
bb40e5bcad Bump ts-jest from 29.1.2 to 29.1.4 in /extensions/ql-vscode (#3627)
Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.1.2 to 29.1.4.
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.1.2...v29.1.4)

---
updated-dependencies:
- dependency-name: ts-jest
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-30 07:02:48 -07:00
Koen Vlaswinkel
e2a8ae318b Merge pull request #3625 from github/koesie10/update-test-plan
Update test plan
2024-05-29 11:46:43 +02:00
Koen Vlaswinkel
79867e2f9d Merge pull request #3624 from github/version/bump-to-v1.13.2
Bump version to v1.13.2
2024-05-29 11:46:29 +02:00
Koen Vlaswinkel
1bc13d70ce Update test plan
This fixes the model pack query to account for the new MAD ID in the
`sinkModel` and removes the LLM section.
2024-05-29 11:22:04 +02:00
github-actions[bot]
0bd359997d Bump version to v1.13.2 2024-05-29 09:17:05 +00:00
Koen Vlaswinkel
28a7d1cf34 Merge pull request #3623 from github/v1.13.1
v1.13.1
2024-05-29 11:15:50 +02:00
Koen Vlaswinkel
1572c095ca v1.13.1
Some checks failed
Release / Release (push) Has been cancelled
Release / Publish to VS Code Marketplace (push) Has been cancelled
Release / Publish to Open VSX Registry (push) Has been cancelled
2024-05-29 10:43:56 +02:00
Nick Rolfe
83df05e731 Merge pull request #3622 from github/nickrolfe/eval-log-progress
Report progress for post-evaluation actions
2024-05-28 17:38:56 +01:00
Nick Rolfe
b43b1d4c8e Update changelog for progress reporting on post-evaluation steps 2024-05-28 11:06:00 +00:00
Nick Rolfe
79ff9e0378 Report progress for post-evaluation actions
Generating and parsing log summaries can be quite slow, so we should update the progress window with messages about what's being worked on.
2024-05-28 11:05:34 +00:00
Andrew Eisenberg
d7a82cc686 Merge pull request #3616 from github/aeisenberg/flush-cache-on-db-remove
Fix bug with reimporting test cases
2024-05-23 08:55:23 -07:00
Andrew Eisenberg
39ad5b28c7 Fix typo in comment
Co-authored-by: Koen Vlaswinkel <koesie10@users.noreply.github.com>
2024-05-23 08:43:03 -07:00
Robert
68c159f1fe Merge pull request #3619 from github/dependabot/npm_and_yarn/extensions/ql-vscode/storybook-23a9a17fad
Bump the storybook group in /extensions/ql-vscode with 12 updates
2024-05-23 15:55:29 +01:00
Robert
355a6fc552 Merge pull request #3621 from github/dependabot/npm_and_yarn/extensions/ql-vscode/markdownlint-cli2-formatter-pretty-0.0.6
Bump markdownlint-cli2-formatter-pretty from 0.0.5 to 0.0.6 in /extensions/ql-vscode
2024-05-23 14:52:49 +01:00
dependabot[bot]
6f54bebe35 Bump markdownlint-cli2-formatter-pretty in /extensions/ql-vscode
Bumps [markdownlint-cli2-formatter-pretty](https://github.com/DavidAnson/markdownlint-cli2) from 0.0.5 to 0.0.6.
- [Changelog](https://github.com/DavidAnson/markdownlint-cli2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/DavidAnson/markdownlint-cli2/compare/v0.0.5...v0.0.6)

---
updated-dependencies:
- dependency-name: markdownlint-cli2-formatter-pretty
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-23 13:40:16 +00:00
dependabot[bot]
bea108a412 Bump the storybook group in /extensions/ql-vscode with 12 updates
Bumps the storybook group in /extensions/ql-vscode with 12 updates:

| Package | From | To |
| --- | --- | --- |
| [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) | `8.1.1` | `8.1.3` |
| [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/actions) | `8.1.1` | `8.1.3` |
| [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.1.1` | `8.1.3` |
| [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions) | `8.1.1` | `8.1.3` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.1.1` | `8.1.3` |
| [@storybook/blocks](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/blocks) | `8.1.1` | `8.1.3` |
| [@storybook/components](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/components) | `8.1.1` | `8.1.3` |
| [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.1.1` | `8.1.3` |
| [@storybook/react](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react) | `8.1.1` | `8.1.3` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `8.1.1` | `8.1.3` |
| [@storybook/theming](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming) | `8.1.1` | `8.1.3` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.1.1` | `8.1.3` |


Updates `@storybook/addon-a11y` from 8.1.1 to 8.1.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.3/code/addons/a11y)

Updates `@storybook/addon-actions` from 8.1.1 to 8.1.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.3/code/addons/actions)

Updates `@storybook/addon-essentials` from 8.1.1 to 8.1.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.3/code/addons/essentials)

Updates `@storybook/addon-interactions` from 8.1.1 to 8.1.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.3/code/addons/interactions)

Updates `@storybook/addon-links` from 8.1.1 to 8.1.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.3/code/addons/links)

Updates `@storybook/blocks` from 8.1.1 to 8.1.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.3/code/ui/blocks)

Updates `@storybook/components` from 8.1.1 to 8.1.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.3/code/ui/components)

Updates `@storybook/manager-api` from 8.1.1 to 8.1.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.3/code/lib/manager-api)

Updates `@storybook/react` from 8.1.1 to 8.1.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.3/code/renderers/react)

Updates `@storybook/react-vite` from 8.1.1 to 8.1.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.3/code/frameworks/react-vite)

Updates `@storybook/theming` from 8.1.1 to 8.1.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.3/code/lib/theming)

Updates `storybook` from 8.1.1 to 8.1.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.3/code/lib/cli)

---
updated-dependencies:
- dependency-name: "@storybook/addon-a11y"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-essentials"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-interactions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/blocks"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/components"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/manager-api"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react-vite"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/theming"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: storybook
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-23 13:39:25 +00:00
Andrew Eisenberg
088d2fa91e Fix failing tests
Also:
- Address comments in PR
- Add changelog note
2024-05-22 23:05:12 +00:00
Andrew Eisenberg
6c92a5b800 Merge remote-tracking branch 'upstream/main' into aeisenberg/flush-cache-on-db-remove 2024-05-22 22:42:54 +00:00
Robert
db0d062443 Merge pull request #3618 from github/robertbrignull/delete-ghec-dr-flag
Remove the enableGhecDr flag
2024-05-22 11:47:11 +01:00
Robert
673ea13af8 Remove the enableGhecDr flag 2024-05-22 10:42:47 +01:00
Koen Vlaswinkel
2208b42485 Merge pull request #3615 from github/github-action/bump-cli
Bump CLI Version to v2.17.3 for integration tests
2024-05-21 10:47:38 +02:00
Andrew Eisenberg
376d6b75d6 Fix bug with reimporting test cases
When re-importing a test database, if the source archive for that
database is not in the workspace, then old source code will be seen when
inspected.

To reproduce:

1. Run a ql test file with a failure (I'm using a javascript DB).
2. Right click and import on the db that sticks around.
3. Change the JS source file for the test.
4. Re-run and still have a failure.
5. Re-import the database
6. Run the query under test
7. Click on a result item
8. **BUG:** The source code is old

The problem is that the source archive cache is not being flushed in
this case. I added a case to flush the source archive when the archive
was imported into the workspace as a folder, but not when the archive is
external.

The fix is to listen for database remove events in the archive
filesystem provider and flush the associated database source
archive.

There is a complication:

The database remove event didn't emit the removed database. This is
because the only place that consumed the event didn't need it.

To get around this, I changed the structure of the events. I added a
new `fullRefresh` boolean. If true, then the original database change
handler will ensure the entire tree is refreshed. If false, only the
selected database.
2024-05-17 23:10:56 +00:00
dependabot[bot]
d8a7dcd7d2 Bump react-dom and @types/react-dom in /extensions/ql-vscode (#3614)
Bumps [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) and [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom). These dependencies needed to be updated together.

Updates `react-dom` from 18.2.0 to 18.3.1
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v18.3.1/packages/react-dom)

Updates `@types/react-dom` from 18.2.18 to 18.3.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: react-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: "@types/react-dom"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-17 15:53:59 -07:00
github-actions[bot]
580257f024 Bump CLI version from v2.17.2 to v2.17.3 for integration tests 2024-05-17 17:05:04 +00:00
dependabot[bot]
233cb1cd41 Bump semver from 7.6.0 to 7.6.2 in /extensions/ql-vscode (#3613)
Bumps [semver](https://github.com/npm/node-semver) from 7.6.0 to 7.6.2.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.6.0...v7.6.2)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-16 09:34:12 -07:00
dependabot[bot]
d9fcfa0374 Bump the storybook group in /extensions/ql-vscode with 12 updates (#3612)
Bumps the storybook group in /extensions/ql-vscode with 12 updates:

| Package | From | To |
| --- | --- | --- |
| [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) | `8.0.10` | `8.1.1` |
| [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/actions) | `8.0.10` | `8.1.1` |
| [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.0.10` | `8.1.1` |
| [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions) | `8.0.10` | `8.1.1` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.0.10` | `8.1.1` |
| [@storybook/blocks](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/blocks) | `8.0.10` | `8.1.1` |
| [@storybook/components](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/components) | `8.0.10` | `8.1.1` |
| [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.0.10` | `8.1.1` |
| [@storybook/react](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react) | `8.0.10` | `8.1.1` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `8.0.10` | `8.1.1` |
| [@storybook/theming](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming) | `8.0.10` | `8.1.1` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.0.10` | `8.1.1` |


Updates `@storybook/addon-a11y` from 8.0.10 to 8.1.1
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.1/code/addons/a11y)

Updates `@storybook/addon-actions` from 8.0.10 to 8.1.1
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.1/code/addons/actions)

Updates `@storybook/addon-essentials` from 8.0.10 to 8.1.1
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.1/code/addons/essentials)

Updates `@storybook/addon-interactions` from 8.0.10 to 8.1.1
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.1/code/addons/interactions)

Updates `@storybook/addon-links` from 8.0.10 to 8.1.1
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.1/code/addons/links)

Updates `@storybook/blocks` from 8.0.10 to 8.1.1
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.1/code/ui/blocks)

Updates `@storybook/components` from 8.0.10 to 8.1.1
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.1/code/ui/components)

Updates `@storybook/manager-api` from 8.0.10 to 8.1.1
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.1/code/lib/manager-api)

Updates `@storybook/react` from 8.0.10 to 8.1.1
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.1/code/renderers/react)

Updates `@storybook/react-vite` from 8.0.10 to 8.1.1
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.1/code/frameworks/react-vite)

Updates `@storybook/theming` from 8.0.10 to 8.1.1
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.1/code/lib/theming)

Updates `storybook` from 8.0.10 to 8.1.1
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.1.1/code/lib/cli)

---
updated-dependencies:
- dependency-name: "@storybook/addon-a11y"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/addon-essentials"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/addon-interactions"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/blocks"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/components"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/manager-api"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/react"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/react-vite"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: "@storybook/theming"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
- dependency-name: storybook
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-16 09:33:50 -07:00
Ben Ahmady
1dc48b3309 Update links in VS Marketplace README (#3611) 2024-05-15 08:52:15 +00:00
Angela P Wen
2babb0b106 Handle exit and error events for query server child processes (#3610) 2024-05-14 18:48:29 -07:00
Koen Vlaswinkel
247df2e1f9 Merge pull request #3607 from github/koesie10/ghec-dr-variant-analysis
Add GHEC-DR support
2024-05-14 10:40:28 +02:00
Koen Vlaswinkel
ba9007e426 Fix typo in comment
Co-authored-by: Robert <robertbrignull@github.com>
2024-05-14 09:42:04 +02:00
Koen Vlaswinkel
616b613fbd Merge pull request #3608 from github/koesie10/fix-supported-cli-version-warning
Fix incorrect supported CLI version warning
2024-05-13 16:57:50 +02:00
Koen Vlaswinkel
47ae0fe9f5 Fix incorrect supported CLI version warning 2024-05-13 16:44:03 +02:00
Nora
9d6b4e8e5a Merge pull request #3603 from github/dependabot/npm_and_yarn/extensions/ql-vscode/storybook-7db07c6d5e
Bump the storybook group in /extensions/ql-vscode with 13 updates
2024-05-13 16:32:04 +02:00
Nora
5ae70696a8 Merge pull request #3604 from github/dependabot/npm_and_yarn/extensions/ql-vscode/testing-library-66b9683d1a
Bump the testing-library group in /extensions/ql-vscode with 2 updates
2024-05-13 16:30:18 +02:00
dependabot[bot]
712dd525ee Bump the storybook group in /extensions/ql-vscode with 13 updates
Bumps the storybook group in /extensions/ql-vscode with 13 updates:

| Package | From | To |
| --- | --- | --- |
| [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) | `8.0.9` | `8.0.10` |
| [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/actions) | `8.0.9` | `8.0.10` |
| [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials) | `8.0.9` | `8.0.10` |
| [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions) | `8.0.9` | `8.0.10` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `8.0.9` | `8.0.10` |
| [@storybook/blocks](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/blocks) | `8.0.9` | `8.0.10` |
| [@storybook/components](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/components) | `8.0.9` | `8.0.10` |
| [@storybook/csf](https://github.com/ComponentDriven/csf) | `0.1.6` | `0.1.7` |
| [@storybook/manager-api](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api) | `8.0.9` | `8.0.10` |
| [@storybook/react](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react) | `8.0.9` | `8.0.10` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `8.0.9` | `8.0.10` |
| [@storybook/theming](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming) | `8.0.9` | `8.0.10` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli) | `8.0.9` | `8.0.10` |


Updates `@storybook/addon-a11y` from 8.0.9 to 8.0.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.0.10/code/addons/a11y)

Updates `@storybook/addon-actions` from 8.0.9 to 8.0.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.0.10/code/addons/actions)

Updates `@storybook/addon-essentials` from 8.0.9 to 8.0.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.0.10/code/addons/essentials)

Updates `@storybook/addon-interactions` from 8.0.9 to 8.0.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.0.10/code/addons/interactions)

Updates `@storybook/addon-links` from 8.0.9 to 8.0.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.0.10/code/addons/links)

Updates `@storybook/blocks` from 8.0.9 to 8.0.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.0.10/code/ui/blocks)

Updates `@storybook/components` from 8.0.9 to 8.0.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.0.10/code/ui/components)

Updates `@storybook/csf` from 0.1.6 to 0.1.7
- [Release notes](https://github.com/ComponentDriven/csf/releases)
- [Changelog](https://github.com/ComponentDriven/csf/blob/v0.1.7/CHANGELOG.md)
- [Commits](https://github.com/ComponentDriven/csf/compare/v0.1.6...v0.1.7)

Updates `@storybook/manager-api` from 8.0.9 to 8.0.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.0.10/code/lib/manager-api)

Updates `@storybook/react` from 8.0.9 to 8.0.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.0.10/code/renderers/react)

Updates `@storybook/react-vite` from 8.0.9 to 8.0.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.0.10/code/frameworks/react-vite)

Updates `@storybook/theming` from 8.0.9 to 8.0.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.0.10/code/lib/theming)

Updates `storybook` from 8.0.9 to 8.0.10
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.0.10/code/lib/cli)

---
updated-dependencies:
- dependency-name: "@storybook/addon-a11y"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-essentials"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-interactions"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/blocks"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/components"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/csf"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/manager-api"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/react-vite"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: "@storybook/theming"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
- dependency-name: storybook
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-13 14:19:37 +00:00
Nora
fdc5645928 Merge pull request #3606 from github/dependabot/npm_and_yarn/extensions/ql-vscode/eslint-plugin-github-4.10.2
Bump eslint-plugin-github from 4.10.1 to 4.10.2 in /extensions/ql-vscode
2024-05-13 16:18:42 +02:00
dependabot[bot]
5c81c0e9bf Bump the testing-library group in /extensions/ql-vscode with 2 updates
Bumps the testing-library group in /extensions/ql-vscode with 2 updates: [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) and [@testing-library/react](https://github.com/testing-library/react-testing-library).


Updates `@testing-library/jest-dom` from 6.4.2 to 6.4.5
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.4.2...v6.4.5)

Updates `@testing-library/react` from 15.0.6 to 15.0.7
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v15.0.6...v15.0.7)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: testing-library
- dependency-name: "@testing-library/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: testing-library
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-13 14:17:39 +00:00
dependabot[bot]
0e07e5e3eb Bump eslint-plugin-github from 4.10.1 to 4.10.2 in /extensions/ql-vscode
Bumps [eslint-plugin-github](https://github.com/github/eslint-plugin-github) from 4.10.1 to 4.10.2.
- [Release notes](https://github.com/github/eslint-plugin-github/releases)
- [Commits](https://github.com/github/eslint-plugin-github/compare/v4.10.1...v4.10.2)

---
updated-dependencies:
- dependency-name: eslint-plugin-github
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-13 14:05:08 +00:00
Koen Vlaswinkel
c90acdb4e1 Merge pull request #3600 from github/github-action/bump-cli
Bump CLI Version to v2.17.2 for integration tests
2024-05-13 13:17:54 +02:00
Koen Vlaswinkel
dad37f202d Merge pull request #3599 from github/koesie10/upgrade-publish-vsce
Use @vscode/vsce when publishing the extension
2024-05-13 13:04:42 +02:00
Koen Vlaswinkel
1f937ad208 Do not import from config in unit tests 2024-05-13 12:15:27 +02:00
Koen Vlaswinkel
086d8e2104 Update prompts to use GHEC-DR URL 2024-05-13 11:19:31 +02:00
Koen Vlaswinkel
c2ddd680c1 Use GHEC-DR URL in Octokit instance 2024-05-13 11:19:31 +02:00
Koen Vlaswinkel
9a14896a4e Use GHE auth provider if GHEC-DR URI is set 2024-05-13 11:19:31 +02:00
Koen Vlaswinkel
871fc0b817 Use GHEC-DR URL in file blob URL 2024-05-13 11:19:31 +02:00
Koen Vlaswinkel
ca092a1623 Use GHEC-DR URL in Actions workflow run URL 2024-05-13 11:19:30 +02:00
Koen Vlaswinkel
529bbe3ffa Handle GHEC-DR repository URLs 2024-05-13 11:19:30 +02:00
Koen Vlaswinkel
31b2d24ca9 Update custom errors to use GHEC-DR URL 2024-05-13 11:19:30 +02:00
github-actions[bot]
f54cace05b Bump CLI version from v2.17.1 to v2.17.2 for integration tests 2024-05-07 11:22:36 +00:00
Koen Vlaswinkel
f773f9f675 Use @vscode/vsce when publishing the extension 2024-05-06 15:31:05 +02:00
dependabot[bot]
67aa216ea1 Bump react and @types/react in /extensions/ql-vscode (#3596)
Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) and [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react). These dependencies needed to be updated together.

Updates `react` from 18.2.0 to 18.3.1
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v18.3.1/packages/react)

Updates `@types/react` from 18.2.43 to 18.3.1
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: react
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 15:56:40 +01:00
dependabot[bot]
4b67f4dd54 Bump vite from 5.2.6 to 5.2.11 in /extensions/ql-vscode (#3597)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.2.6 to 5.2.11.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.2.11/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 15:37:22 +01:00
dependabot[bot]
572a8b7828 Bump styled-components from 6.1.8 to 6.1.9 in /extensions/ql-vscode (#3598)
Bumps [styled-components](https://github.com/styled-components/styled-components) from 6.1.8 to 6.1.9.
- [Release notes](https://github.com/styled-components/styled-components/releases)
- [Commits](https://github.com/styled-components/styled-components/compare/v6.1.8...v6.1.9)

---
updated-dependencies:
- dependency-name: styled-components
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 15:36:08 +01:00
dependabot[bot]
b7d6aeda3c Bump @testing-library/react (#3595)
Bumps the testing-library group in /extensions/ql-vscode with 1 update: [@testing-library/react](https://github.com/testing-library/react-testing-library).


Updates `@testing-library/react` from 15.0.5 to 15.0.6
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v15.0.5...v15.0.6)

---
updated-dependencies:
- dependency-name: "@testing-library/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: testing-library
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 15:35:27 +01:00
github-actions[bot]
2da77acd9e Bump CLI version from v2.17.0 to v2.17.1 for integration tests (#3577)
Co-authored-by: github-actions[bot] <github-actions@github.com>
2024-05-02 10:00:37 +00:00
Anders Starcke Henriksen
607a8380cc Merge pull request #3581 from github/dependabot/npm_and_yarn/extensions/ql-vscode/ts-json-schema-generator-2.1.1
Bump ts-json-schema-generator from 2.0.1 to 2.1.1 in /extensions/ql-vscode
2024-05-02 09:19:22 +02:00
Koen Vlaswinkel
f698ac321f Add back ts-node for Gulp 2024-05-01 14:59:02 +02:00
Koen Vlaswinkel
85abd9a1ac Switch from ts-node to vite-node
vite-node seems to have better support for mixed ESM and CJS modules and
makes the scripts work with both kinds of packages without having to
change the project configuration.
2024-05-01 14:50:12 +02:00
Anders Starcke Henriksen
329eba9536 Merge pull request #3592 from github/release-token
Update release with new PAT lifetime.
2024-05-01 14:49:03 +02:00
Anders Starcke Henriksen
733a0328d0 Merge pull request #3594 from github/version/bump-to-v1.13.1
Bump version to v1.13.1
2024-05-01 14:32:42 +02:00
dependabot[bot]
1c7f92b503 Bump ts-json-schema-generator in /extensions/ql-vscode
Bumps [ts-json-schema-generator](https://github.com/vega/ts-json-schema-generator) from 2.0.1 to 2.1.1.
- [Release notes](https://github.com/vega/ts-json-schema-generator/releases)
- [Changelog](https://github.com/vega/ts-json-schema-generator/blob/v2.1.1/CHANGELOG.md)
- [Commits](https://github.com/vega/ts-json-schema-generator/compare/v2.0.1...v2.1.1)

---
updated-dependencies:
- dependency-name: ts-json-schema-generator
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-01 12:13:48 +00:00
github-actions[bot]
884ec21e5a Bump version to v1.13.1 2024-05-01 11:44:41 +00:00
Anders Starcke Henriksen
35c533606f Merge pull request #3593 from github/v1.13.0
v1.13.0
2024-05-01 13:42:53 +02:00
Anders Starcke Henriksen
10c74d5d8c Update release with new PAT lifetime. 2024-05-01 09:54:04 +02:00
87 changed files with 3027 additions and 5514 deletions

View File

@@ -5,8 +5,4 @@
Replace this with a description of the changes your pull request makes. Replace this with a description of the changes your pull request makes.
## Checklist Remember to update the [changelog](https://github.com/github/vscode-codeql/blob/main/extensions/ql-vscode/CHANGELOG.md) if there have been user-facing changes!
- [ ] [CHANGELOG.md](https://github.com/github/vscode-codeql/blob/main/extensions/ql-vscode/CHANGELOG.md) has been updated to incorporate all user visible changes made by this pull request.
- [ ] Issues have been created for any UI or other user-facing changes made by this pull request.
- [ ] _[Maintainers only]_ If this pull request makes user-facing changes that require documentation changes, open a corresponding docs pull request in the [github/codeql](https://github.com/github/codeql/tree/main/docs/codeql/codeql-for-visual-studio-code) repo and add the `ready-for-doc-review` label there.

View File

@@ -26,7 +26,7 @@ jobs:
- name: Start containers - name: Start containers
working-directory: extensions/ql-vscode/test/e2e working-directory: extensions/ql-vscode/test/e2e
run: docker-compose -f "docker-compose.yml" up -d --build run: docker compose -f "docker-compose.yml" up -d --build
- name: Install Playwright Browsers - name: Install Playwright Browsers
working-directory: extensions/ql-vscode working-directory: extensions/ql-vscode
@@ -43,4 +43,4 @@ jobs:
- name: Stop containers - name: Stop containers
working-directory: extensions/ql-vscode/test/e2e working-directory: extensions/ql-vscode/test/e2e
if: always() if: always()
run: docker-compose -f "docker-compose.yml" down -v run: docker compose -f "docker-compose.yml" down -v

View File

@@ -144,6 +144,19 @@ jobs:
matrix: matrix:
os: [ubuntu-latest, windows-latest] os: [ubuntu-latest, windows-latest]
steps: steps:
# Enable 8.3 filename creation. This is not required to run the extension but it is required for the unit tests to pass.
# This feature is currently enabled by default in Windows 11 for the C: drive and therefore we must maintain support for it.
# This setting needs to be enabled before files are created, i.e. before we checkout the repository.
- name: Enable 8.3 filenames
shell: pwsh
if: ${{ matrix.os == 'windows-latest' }}
run: |
$shortNameEnableProcess = Start-Process -FilePath fsutil.exe -ArgumentList ('8dot3name', 'set', '0') -Wait -PassThru
$shortNameEnableExitCode = $shortNameEnableProcess.ExitCode
if ($shortNameEnableExitCode -ne 0) {
exit $shortNameEnableExitCode
}
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:

View File

@@ -134,7 +134,7 @@ jobs:
- name: Publish to Registry - name: Publish to Registry
run: | run: |
npx vsce publish -p $VSCE_TOKEN --packagePath *.vsix npx @vscode/vsce publish -p $VSCE_TOKEN --packagePath *.vsix
open-vsx-publish: open-vsx-publish:
name: Publish to Open VSX Registry name: Publish to Open VSX Registry

View File

@@ -28,6 +28,7 @@ Here are a few things you can do that will increase the likelihood of your pull
- [Integration tests that do require the VS Code API are located here](extensions/ql-vscode/src/vscode-tests). - [Integration tests that do require the VS Code API are located here](extensions/ql-vscode/src/vscode-tests).
- Keep your change as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as separate pull requests. - Keep your change as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as separate pull requests.
- Write a [good commit message](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). - Write a [good commit message](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
- Update the [changelog](https://github.com/github/vscode-codeql/blob/main/extensions/ql-vscode/CHANGELOG.md) if you are making user-facing changes.
## Setting up a local build ## Setting up a local build

View File

@@ -1,5 +1,6 @@
# Releasing (write access required) # Releasing (write access required)
1. Make sure the needed authentication keys are valid. Most likely the Azure DevOps PAT needs to be regenerated. See below.
1. Determine the new version number. We default to increasing the patch version number, but make our own judgement about whether a change is big enough to warrant a minor version bump. Common reasons for a minor bump could include: 1. Determine the new version number. We default to increasing the patch version number, but make our own judgement about whether a change is big enough to warrant a minor version bump. Common reasons for a minor bump could include:
- Making substantial new features available to all users. This can include lifting a feature flag. - Making substantial new features available to all users. This can include lifting a feature flag.
- Breakage in compatibility with recent versions of the CLI. - Breakage in compatibility with recent versions of the CLI.
@@ -60,7 +61,7 @@
## Secrets and authentication for publishing ## Secrets and authentication for publishing
Repository administrators, will need to manage the authentication keys for publishing to the VS Code marketplace and Open VSX. Each requires an authentication token. The VS Code marketplace token expires yearly. Repository administrators, will need to manage the authentication keys for publishing to the VS Code marketplace and Open VSX. Each requires an authentication token.
To regenerate the Open VSX token: To regenerate the Open VSX token:
@@ -69,4 +70,4 @@ To regenerate the Open VSX token:
1. Go to the [Access Tokens](https://open-vsx.org/user-settings/tokens) page and generate a new token. 1. Go to the [Access Tokens](https://open-vsx.org/user-settings/tokens) page and generate a new token.
1. Update the secret in the `publish-open-vsx` environment in the project settings. 1. Update the secret in the `publish-open-vsx` environment in the project settings.
To regenerate the VSCode Marketplace token, please see our internal documentation. Note that Azure DevOps PATs expire every 90 days and must be regenerated. To regenerate the VSCode Marketplace token, please see our internal documentation. Note that Azure DevOps PATs expire every 7 days and must be regenerated.

View File

@@ -179,7 +179,7 @@ Run one of the above MRVAs, but cancel it from within VS Code:
import semmle.python.frameworks.data.internal.ApiGraphModelsExtensions import semmle.python.frameworks.data.internal.ApiGraphModelsExtensions
from string path, string kind from string path, string kind
where sinkModel("vscode-codeql", path, kind) where sinkModel("vscode-codeql", path, kind, _)
select path, kind select path, kind
``` ```
@@ -210,17 +210,7 @@ Run one of the above MRVAs, but cancel it from within VS Code:
4. Open the ".model.yml" file corresponding to the library that was changed. 4. Open the ".model.yml" file corresponding to the library that was changed.
- Check that the file contains entries for the methods that were modeled. - Check that the file contains entries for the methods that were modeled.
#### Test Case 3: Model with AI #### Test Case 3: Model as dependency
Note that this test requires the feature flag: `codeQL.model.llmGeneration`
A package that the AI normally gives models for is `javax.servlet-api` from the `jhy/jsoup` repository.
1. Click "Model with AI".
- Check that rows change to "Thinking".
- Check that results come back and rows get filled out.
#### Test Case 4: Model as dependency
Note that this test requires the feature flag: `codeQL.model.flowGeneration` Note that this test requires the feature flag: `codeQL.model.flowGeneration`

View File

@@ -1 +1 @@
v18.18.2 v20.14.0

View File

@@ -1,6 +1,6 @@
import * as React from "react"; import * as React from "react";
import { addons } from "@storybook/manager-api"; import { addons } from "@storybook/manager-api";
import { Addon_TypesEnum } from "@storybook/types"; import { Addon_TypesEnum } from "storybook/internal/types";
import { ThemeSelector } from "./ThemeSelector"; import { ThemeSelector } from "./ThemeSelector";
const ADDON_ID = "vscode-theme-addon"; const ADDON_ID = "vscode-theme-addon";

View File

@@ -1,5 +1,16 @@
# CodeQL for Visual Studio Code: Changelog # CodeQL for Visual Studio Code: Changelog
## 1.14.0 - 7 August 2024
- Add Python support to the CodeQL Model Editor. [#3676](https://github.com/github/vscode-codeql/pull/3676)
- Update variant analysis view to display the length of the shortest path for path queries. [#3671](https://github.com/github/vscode-codeql/pull/3671)
- Remove support for CodeQL CLI versions older than 2.15.5. [#3681](https://github.com/github/vscode-codeql/pull/3681)
## 1.13.1 - 29 May 2024
- Fix a bug when re-importing test databases that erroneously showed old source code. [#3616](https://github.com/github/vscode-codeql/pull/3616)
- Update the progress window with details on potentially long-running post-processing steps after running a query. [#3622](https://github.com/github/vscode-codeql/pull/3622)
## 1.13.0 - 1 May 2024 ## 1.13.0 - 1 May 2024
- Add Ruby support to the CodeQL Model Editor. [#3584](https://github.com/github/vscode-codeql/pull/3584) - Add Ruby support to the CodeQL Model Editor. [#3584](https://github.com/github/vscode-codeql/pull/3584)

View File

@@ -9,10 +9,12 @@ This project is an extension for Visual Studio Code that adds rich language supp
To see what has changed in the last few versions of the extension, see the [Changelog](https://github.com/github/vscode-codeql/blob/main/extensions/ql-vscode/CHANGELOG.md). To see what has changed in the last few versions of the extension, see the [Changelog](https://github.com/github/vscode-codeql/blob/main/extensions/ql-vscode/CHANGELOG.md).
You can also read full documentation for the extension on the [GitHub documentation website](https://docs.github.com/code-security/codeql-for-vs-code/using-the-advanced-functionality-of-the-codeql-for-vs-code-extension).
## Quick start overview ## Quick start overview
The information in this `README` file describes the quickest way to start using CodeQL. The information in this `README` file describes the quickest way to start using CodeQL.
For information about other configurations, see the separate [CodeQL help](https://codeql.github.com/docs/codeql-for-visual-studio-code/). For information about other configurations, see "[Using the advanced functionality of the CodeQL for VS Code extension](https://docs.github.com/code-security/codeql-for-vs-code/using-the-advanced-functionality-of-the-codeql-for-vs-code-extension)" in the GitHub documentation.
### Quick start: Installing and configuring the extension ### Quick start: Installing and configuring the extension
@@ -42,7 +44,7 @@ The CodeQL extension requires a minimum of Visual Studio Code 1.39. Older versio
The extension uses the [CodeQL CLI](https://codeql.github.com/docs/codeql-cli/) to compile and run queries. The extension automatically manages access to the CLI for you by default (recommended). To check for updates to the CodeQL CLI, you can use the **CodeQL: Check for CLI Updates** command. The extension uses the [CodeQL CLI](https://codeql.github.com/docs/codeql-cli/) to compile and run queries. The extension automatically manages access to the CLI for you by default (recommended). To check for updates to the CodeQL CLI, you can use the **CodeQL: Check for CLI Updates** command.
If you want to override the default behavior and use a CodeQL CLI that's already on your machine, see [Configuring access to the CodeQL CLI](https://codeql.github.com/docs/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code/#configuring-access-to-the-codeql-cli). If you want to override the default behavior and use a CodeQL CLI that's already on your machine, see "[Configuring access to the CodeQL CLI](https://docs.github.com/code-security/codeql-for-vs-code/using-the-advanced-functionality-of-the-codeql-for-vs-code-extension/configuring-access-to-the-codeql-cli)" in the GitHub documentation.
If you have any difficulty with CodeQL CLI access, see the **CodeQL Extension Log** in the **Output** view for any error messages. If you have any difficulty with CodeQL CLI access, see the **CodeQL Extension Log** in the **Output** view for any error messages.
@@ -52,7 +54,7 @@ When you're working with CodeQL, you need access to the standard CodeQL librarie
Initially, we recommend that you clone and use the ready-to-use [starter workspace](https://github.com/github/vscode-codeql-starter/). Initially, we recommend that you clone and use the ready-to-use [starter workspace](https://github.com/github/vscode-codeql-starter/).
This includes libraries and queries for the main supported languages, with folders set up ready for your custom queries. After cloning the workspace (use `git clone --recursive`), you can use it in the same way as any other VS Code workspace—with the added advantage that you can easily update the CodeQL libraries. This includes libraries and queries for the main supported languages, with folders set up ready for your custom queries. After cloning the workspace (use `git clone --recursive`), you can use it in the same way as any other VS Code workspace—with the added advantage that you can easily update the CodeQL libraries.
For information about configuring an existing workspace for CodeQL, [see the documentation](https://codeql.github.com/docs/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code/#updating-an-existing-workspace-for-codeql). For information about configuring an existing workspace for CodeQL, see "[Setting up a CodeQL workspace](https://docs.github.com/code-security/codeql-for-vs-code/using-the-advanced-functionality-of-the-codeql-for-vs-code-extension/setting-up-a-codeql-workspace#option-2-updating-an-existing-workspace-for-codeql-advanced)" in the GitHub documentation.
## Upgrading CodeQL standard libraries ## Upgrading CodeQL standard libraries
@@ -85,7 +87,7 @@ While you can use the [CodeQL CLI to create your own databases](https://codeql.g
1. Select the language for the database you want to download (only required if the project has databases for multiple languages). 1. Select the language for the database you want to download (only required if the project has databases for multiple languages).
1. Once the CodeQL database has been imported, it is displayed in the Databases view. 1. Once the CodeQL database has been imported, it is displayed in the Databases view.
For more information, see [Choosing a database](https://codeql.github.com/docs/codeql-for-visual-studio-code/analyzing-your-projects/#choosing-a-database) on codeql.github.com. For more information, see "[Managing CodeQL databases](https://docs.github.com/code-security/codeql-for-vs-code/getting-started-with-codeql-for-vs-code/managing-codeql-databases#choosing-a-database-to-analyze)" in the GitHub documentation.
### Running a query ### Running a query
@@ -106,12 +108,12 @@ If you wish to navigate the query results from your keyboard, you can bind short
## What next? ## What next?
For more information about the CodeQL extension, [see the documentation](https://codeql.github.com/docs/codeql-for-visual-studio-code/). Otherwise, you could: We recommend reading the [full documentation for the extension](https://docs.github.com/code-security/codeql-for-vs-code/) on the GitHub documentation website. You may also find the following resources useful:
- [Create a database for a different codebase](https://codeql.github.com/docs/codeql-cli/creating-codeql-databases/). - [Create a database for a different codebase](https://codeql.github.com/docs/codeql-cli/creating-codeql-databases/).
- [Try out variant analysis](https://help.semmle.com/QL/learn-ql/ql-training.html). - [Try out variant analysis](https://docs.github.com/code-security/codeql-for-vs-code/getting-started-with-codeql-for-vs-code/running-codeql-queries-at-scale-with-multi-repository-variant-analysis).
- [Learn more about CodeQL](https://codeql.github.com/docs/). - [Learn more about CodeQL](https://codeql.github.com/docs/).
- [Read how security researchers use CodeQL to find CVEs](https://securitylab.github.com/research). - [Read how security researchers use CodeQL to find CVEs](https://github.blog/tag/github-security-lab/).
## License ## License
@@ -119,4 +121,4 @@ The CodeQL extension for Visual Studio Code is [licensed](LICENSE.md) under the
## Data and Telemetry ## Data and Telemetry
If you specifically opt-in to permit GitHub to do so, GitHub will collect usage data and metrics for the purposes of helping the core developers to improve the CodeQL extension for VS Code. This data will not be shared with any parties outside of GitHub. IP addresses and installation IDs will be retained for a maximum of 30 days. Anonymous data will be retained for a maximum of 180 days. For more information about telemetry, [see the documentation](https://codeql.github.com/docs/codeql-for-visual-studio-code/about-telemetry-in-codeql-for-visual-studio-code). If you specifically opt-in to permit GitHub to do so, GitHub will collect usage data and metrics for the purposes of helping the core developers to improve the CodeQL extension for VS Code. This data will not be shared with any parties outside of GitHub. IP addresses and installation IDs will be retained for a maximum of 30 days. Anonymous data will be retained for a maximum of 180 days. For more information, see "[Telemetry in CodeQL for Visual Studio Code](https://docs.github.com/code-security/codeql-for-vs-code/using-the-advanced-functionality-of-the-codeql-for-vs-code-extension/telemetry-in-codeql-for-visual-studio-code)" in the GitHub documentation.

View File

@@ -77,5 +77,8 @@ export function copyWasmFiles() {
// to configure the path to the WASM file. So, source-map will always load the file from `__dirname/mappings.wasm`. // to configure the path to the WASM file. So, source-map will always load the file from `__dirname/mappings.wasm`.
// In version 0.8.0, it may be possible to do this properly by calling SourceMapConsumer.initialize by // In version 0.8.0, it may be possible to do this properly by calling SourceMapConsumer.initialize by
// using the "browser" field in source-map's package.json to load the WASM file from a given file path. // using the "browser" field in source-map's package.json to load the WASM file from a given file path.
return src("node_modules/source-map/lib/mappings.wasm").pipe(dest("out")); return src("node_modules/source-map/lib/mappings.wasm", {
// WASM is a binary format, so don't try to re-encode it as text.
encoding: false,
}).pipe(dest("out"));
} }

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@
"description": "CodeQL for Visual Studio Code", "description": "CodeQL for Visual Studio Code",
"author": "GitHub", "author": "GitHub",
"private": true, "private": true,
"version": "1.13.0", "version": "1.14.0",
"publisher": "GitHub", "publisher": "GitHub",
"license": "MIT", "license": "MIT",
"icon": "media/VS-marketplace-CodeQL-icon.png", "icon": "media/VS-marketplace-CodeQL-icon.png",
@@ -14,7 +14,7 @@
}, },
"engines": { "engines": {
"vscode": "^1.82.0", "vscode": "^1.82.0",
"node": "^18.18.2", "node": "^20.14.0",
"npm": ">=7.20.6" "npm": ">=7.20.6"
}, },
"categories": [ "categories": [
@@ -1790,8 +1790,7 @@
"when": "false" "when": "false"
}, },
{ {
"command": "codeQL.trimCache", "command": "codeQL.trimCache"
"when": "codeql.supportsTrimCache"
} }
], ],
"editor/context": [ "editor/context": [
@@ -1955,14 +1954,14 @@
"format": "prettier --write **/*.{ts,tsx} && eslint . --ext .ts,.tsx --fix", "format": "prettier --write **/*.{ts,tsx} && eslint . --ext .ts,.tsx --fix",
"lint": "eslint . --ext .js,.ts,.tsx --max-warnings=0", "lint": "eslint . --ext .js,.ts,.tsx --max-warnings=0",
"lint:markdown": "markdownlint-cli2 \"../../**/*.{md,mdx}\" \"!**/node_modules/**\" \"!**/.vscode-test/**\" \"!**/build/cli/v*/**\"", "lint:markdown": "markdownlint-cli2 \"../../**/*.{md,mdx}\" \"!**/node_modules/**\" \"!**/.vscode-test/**\" \"!**/build/cli/v*/**\"",
"find-deadcode": "ts-node scripts/find-deadcode.ts", "find-deadcode": "vite-node scripts/find-deadcode.ts",
"format-staged": "lint-staged", "format-staged": "lint-staged",
"storybook": "storybook dev -p 6006", "storybook": "storybook dev -p 6006",
"build-storybook": "storybook build", "build-storybook": "storybook build",
"lint:scenarios": "ts-node scripts/lint-scenarios.ts", "lint:scenarios": "vite-node scripts/lint-scenarios.ts",
"generate": "npm-run-all -p generate:*", "generate": "npm-run-all -p generate:*",
"generate:schemas": "ts-node scripts/generate-schemas.ts", "generate:schemas": "vite-node scripts/generate-schemas.ts",
"generate:chromium-version": "ts-node scripts/generate-chromium-version.ts", "generate:chromium-version": "vite-node scripts/generate-chromium-version.ts",
"check-types": "find . -type f -name \"tsconfig.json\" -not -path \"./node_modules/*\" | sed -r 's|/[^/]+$||' | sort | uniq | xargs -I {} sh -c \"echo Checking types in {} && cd {} && npx tsc --noEmit\"", "check-types": "find . -type f -name \"tsconfig.json\" -not -path \"./node_modules/*\" | sed -r 's|/[^/]+$||' | sort | uniq | xargs -I {} sh -c \"echo Checking types in {} && cd {} && npx tsc --noEmit\"",
"postinstall": "patch-package", "postinstall": "patch-package",
"prepare": "cd ../.. && husky install" "prepare": "cd ../.. && husky install"
@@ -1972,7 +1971,7 @@
"@octokit/plugin-retry": "^6.0.1", "@octokit/plugin-retry": "^6.0.1",
"@octokit/plugin-throttling": "^8.0.0", "@octokit/plugin-throttling": "^8.0.0",
"@octokit/rest": "^20.0.2", "@octokit/rest": "^20.0.2",
"@vscode/codicons": "^0.0.35", "@vscode/codicons": "^0.0.36",
"@vscode/debugadapter": "^1.59.0", "@vscode/debugadapter": "^1.59.0",
"@vscode/debugprotocol": "^1.65.0", "@vscode/debugprotocol": "^1.65.0",
"@vscode/webview-ui-toolkit": "^1.0.1", "@vscode/webview-ui-toolkit": "^1.0.1",
@@ -1987,47 +1986,47 @@
"nanoid": "^5.0.7", "nanoid": "^5.0.7",
"node-fetch": "^2.6.7", "node-fetch": "^2.6.7",
"p-queue": "^8.0.1", "p-queue": "^8.0.1",
"react": "^18.2.0", "react": "^18.3.1",
"react-dom": "^18.2.0", "react-dom": "^18.3.1",
"semver": "^7.6.0", "semver": "^7.6.2",
"source-map": "^0.7.4", "source-map": "^0.7.4",
"source-map-support": "^0.5.21", "source-map-support": "^0.5.21",
"stream-json": "^1.7.3", "stream-json": "^1.7.3",
"styled-components": "^6.1.8", "styled-components": "^6.1.9",
"tmp": "^0.2.1", "tmp": "^0.2.1",
"tmp-promise": "^3.0.2", "tmp-promise": "^3.0.2",
"tree-kill": "^1.2.2", "tree-kill": "^1.2.2",
"vscode-extension-telemetry": "^0.1.6", "vscode-extension-telemetry": "^0.1.6",
"vscode-jsonrpc": "^8.0.2", "vscode-jsonrpc": "^8.2.1",
"vscode-languageclient": "^8.0.2", "vscode-languageclient": "^8.0.2",
"yauzl": "^2.10.0", "yauzl": "^2.10.0",
"zip-a-folder": "^3.1.6" "zip-a-folder": "^3.1.6"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.24.4", "@babel/core": "^7.24.6",
"@babel/plugin-transform-modules-commonjs": "^7.18.6", "@babel/plugin-transform-modules-commonjs": "^7.24.7",
"@babel/preset-env": "^7.24.4", "@babel/preset-env": "^7.24.4",
"@babel/preset-react": "^7.24.1", "@babel/preset-react": "^7.24.1",
"@babel/preset-typescript": "^7.21.4", "@babel/preset-typescript": "^7.21.4",
"@faker-js/faker": "^8.4.1", "@faker-js/faker": "^8.4.1",
"@github/markdownlint-github": "^0.6.2", "@github/markdownlint-github": "^0.6.2",
"@playwright/test": "^1.40.1", "@playwright/test": "^1.40.1",
"@storybook/addon-a11y": "^8.0.9", "@storybook/addon-a11y": "^8.2.7",
"@storybook/addon-actions": "^8.0.9", "@storybook/addon-actions": "^8.2.7",
"@storybook/addon-essentials": "^8.0.9", "@storybook/addon-essentials": "^8.2.7",
"@storybook/addon-interactions": "^8.0.9", "@storybook/addon-interactions": "^8.2.7",
"@storybook/addon-links": "^8.0.9", "@storybook/addon-links": "^8.2.7",
"@storybook/blocks": "^8.0.2", "@storybook/blocks": "^8.0.2",
"@storybook/components": "^8.0.2", "@storybook/components": "^8.2.7",
"@storybook/csf": "^0.1.6", "@storybook/csf": "^0.1.11",
"@storybook/icons": "^1.2.9", "@storybook/icons": "^1.2.10",
"@storybook/manager-api": "^8.0.9", "@storybook/manager-api": "^8.2.7",
"@storybook/react": "^8.0.9", "@storybook/react": "^8.2.7",
"@storybook/react-vite": "^8.0.9", "@storybook/react-vite": "^8.2.7",
"@storybook/theming": "^8.0.9", "@storybook/theming": "^8.2.4",
"@testing-library/dom": "^10.1.0", "@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^6.4.2", "@testing-library/jest-dom": "^6.4.8",
"@testing-library/react": "^15.0.5", "@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.5.2", "@testing-library/user-event": "^14.5.2",
"@types/child-process-promise": "^2.2.1", "@types/child-process-promise": "^2.2.1",
"@types/d3": "^7.4.0", "@types/d3": "^7.4.0",
@@ -2039,10 +2038,10 @@
"@types/jest": "^29.5.12", "@types/jest": "^29.5.12",
"@types/js-yaml": "^4.0.6", "@types/js-yaml": "^4.0.6",
"@types/nanoid": "^3.0.0", "@types/nanoid": "^3.0.0",
"@types/node": "18.18.*", "@types/node": "20.14.*",
"@types/node-fetch": "^2.5.2", "@types/node-fetch": "^2.5.2",
"@types/react": "^18.0.28", "@types/react": "^18.3.1",
"@types/react-dom": "^18.2.18", "@types/react-dom": "^18.3.0",
"@types/sarif": "^2.1.2", "@types/sarif": "^2.1.2",
"@types/semver": "^7.5.8", "@types/semver": "^7.5.8",
"@types/stream-json": "^1.7.1", "@types/stream-json": "^1.7.1",
@@ -2066,15 +2065,15 @@
"eslint-import-resolver-typescript": "^3.6.1", "eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-deprecation": "^2.0.0", "eslint-plugin-deprecation": "^2.0.0",
"eslint-plugin-etc": "^2.0.2", "eslint-plugin-etc": "^2.0.2",
"eslint-plugin-github": "^4.4.1", "eslint-plugin-github": "^4.10.2",
"eslint-plugin-import": "^2.29.1", "eslint-plugin-import": "^2.29.1",
"eslint-plugin-jest-dom": "^5.2.0", "eslint-plugin-jest-dom": "^5.2.0",
"eslint-plugin-prettier": "^5.1.3", "eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-react": "^7.34.1", "eslint-plugin-react": "^7.34.1",
"eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-storybook": "^0.8.0", "eslint-plugin-storybook": "^0.8.0",
"glob": "^10.0.0", "glob": "^10.0.0",
"gulp": "^4.0.2", "gulp": "^5.0.0",
"gulp-esbuild": "^0.12.0", "gulp-esbuild": "^0.12.0",
"gulp-replace": "^1.1.3", "gulp-replace": "^1.1.3",
"gulp-typescript": "^5.0.1", "gulp-typescript": "^5.0.1",
@@ -2084,19 +2083,20 @@
"jest-runner-vscode": "^3.0.1", "jest-runner-vscode": "^3.0.1",
"lint-staged": "^15.2.2", "lint-staged": "^15.2.2",
"markdownlint-cli2": "^0.13.0", "markdownlint-cli2": "^0.13.0",
"markdownlint-cli2-formatter-pretty": "^0.0.5", "markdownlint-cli2-formatter-pretty": "^0.0.6",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"patch-package": "^8.0.0", "patch-package": "^8.0.0",
"prettier": "^3.2.5", "prettier": "^3.2.5",
"storybook": "^8.0.9", "storybook": "^8.2.7",
"tar-stream": "^3.1.7", "tar-stream": "^3.1.7",
"through2": "^4.0.2", "through2": "^4.0.2",
"ts-jest": "^29.1.2", "ts-jest": "^29.1.4",
"ts-json-schema-generator": "^2.0.1", "ts-json-schema-generator": "^2.1.1",
"ts-node": "^10.7.0", "ts-node": "^10.9.2",
"ts-unused-exports": "^10.0.0", "ts-unused-exports": "^10.1.0",
"typescript": "^5.0.2", "typescript": "^5.0.2",
"vite": "^5.2.6" "vite": "^5.2.11",
"vite-node": "^1.5.3"
}, },
"lint-staged": { "lint-staged": {
"./**/*.{json,css,scss}": [ "./**/*.{json,css,scss}": [

View File

@@ -12,6 +12,7 @@ interface VersionResult {
export interface CliFeatures { export interface CliFeatures {
featuresInVersionResult?: boolean; featuresInVersionResult?: boolean;
mrvaPackCreate?: boolean; mrvaPackCreate?: boolean;
generateSummarySymbolMap?: boolean;
} }
export interface VersionAndFeatures { export interface VersionAndFeatures {

View File

@@ -1211,10 +1211,15 @@ export class CodeQLCliServer implements Disposable {
outputPath: string, outputPath: string,
endSummaryPath: string, endSummaryPath: string,
): Promise<string> { ): Promise<string> {
const supportsGenerateSummarySymbolMap =
await this.cliConstraints.supportsGenerateSummarySymbolMap();
const subcommandArgs = [ const subcommandArgs = [
"--format=text", "--format=text",
`--end-summary=${endSummaryPath}`, `--end-summary=${endSummaryPath}`,
"--sourcemap", "--sourcemap",
...(supportsGenerateSummarySymbolMap
? ["--summary-symbol-map", "--minify-output"]
: []),
inputPath, inputPath,
outputPath, outputPath,
]; ];
@@ -1750,14 +1755,6 @@ export class CodeQLCliServer implements Disposable {
this._versionChangedListeners.forEach((listener) => this._versionChangedListeners.forEach((listener) =>
listener(newVersionAndFeatures), listener(newVersionAndFeatures),
); );
// this._version is only undefined upon config change, so we reset CLI-based context key only when necessary.
await this.app.commands.execute(
"setContext",
"codeql.supportsTrimCache",
newVersionAndFeatures.version.compare(
CliVersionConstraint.CLI_VERSION_WITH_TRIM_CACHE,
) >= 0,
);
} catch (e) { } catch (e) {
this._versionChangedListeners.forEach((listener) => this._versionChangedListeners.forEach((listener) =>
listener(undefined), listener(undefined),
@@ -1912,13 +1909,7 @@ function shouldDebugCliServer() {
export class CliVersionConstraint { export class CliVersionConstraint {
// The oldest version of the CLI that we support. This is used to determine // The oldest version of the CLI that we support. This is used to determine
// whether to show a warning about the CLI being too old on startup. // whether to show a warning about the CLI being too old on startup.
public static OLDEST_SUPPORTED_CLI_VERSION = new SemVer("2.14.6"); public static OLDEST_SUPPORTED_CLI_VERSION = new SemVer("v2.15.5");
/**
* CLI version where the query server supports the `evaluation/trimCache` method
* with `codeql database cleanup --mode=trim` semantics.
*/
public static CLI_VERSION_WITH_TRIM_CACHE = new SemVer("2.15.1");
public static CLI_VERSION_WITHOUT_MRVA_EXTENSIBLE_PREDICATE_HACK = new SemVer( public static CLI_VERSION_WITHOUT_MRVA_EXTENSIBLE_PREDICATE_HACK = new SemVer(
"2.16.1", "2.16.1",
@@ -1953,4 +1944,8 @@ export class CliVersionConstraint {
async supportsMrvaPackCreate(): Promise<boolean> { async supportsMrvaPackCreate(): Promise<boolean> {
return (await this.cli.getFeatures()).mrvaPackCreate === true; return (await this.cli.getFeatures()).mrvaPackCreate === true;
} }
async supportsGenerateSummarySymbolMap(): Promise<boolean> {
return (await this.cli.getFeatures()).generateSummarySymbolMap === true;
}
} }

View File

@@ -31,4 +31,9 @@ export interface Credentials {
* @returns An OAuth access token, or undefined. * @returns An OAuth access token, or undefined.
*/ */
getExistingAccessToken(): Promise<string | undefined>; getExistingAccessToken(): Promise<string | undefined>;
/**
* Returns the ID of the authentication provider to use.
*/
authProviderId: string;
} }

View File

@@ -29,37 +29,45 @@ function validGitHubNwoOrOwner(
/** /**
* Extracts an NWO from a GitHub URL. * Extracts an NWO from a GitHub URL.
* @param githubUrl The GitHub repository URL * @param repositoryUrl The GitHub repository URL
* @param githubUrl The URL of the GitHub instance
* @return The corresponding NWO, or undefined if the URL is not valid * @return The corresponding NWO, or undefined if the URL is not valid
*/ */
export function getNwoFromGitHubUrl(githubUrl: string): string | undefined { export function getNwoFromGitHubUrl(
return getNwoOrOwnerFromGitHubUrl(githubUrl, "nwo"); repositoryUrl: string,
githubUrl: URL,
): string | undefined {
return getNwoOrOwnerFromGitHubUrl(repositoryUrl, githubUrl, "nwo");
} }
/** /**
* Extracts an owner from a GitHub URL. * Extracts an owner from a GitHub URL.
* @param githubUrl The GitHub repository URL * @param repositoryUrl The GitHub repository URL
* @param githubUrl The URL of the GitHub instance
* @return The corresponding Owner, or undefined if the URL is not valid * @return The corresponding Owner, or undefined if the URL is not valid
*/ */
export function getOwnerFromGitHubUrl(githubUrl: string): string | undefined { export function getOwnerFromGitHubUrl(
return getNwoOrOwnerFromGitHubUrl(githubUrl, "owner"); repositoryUrl: string,
githubUrl: URL,
): string | undefined {
return getNwoOrOwnerFromGitHubUrl(repositoryUrl, githubUrl, "owner");
} }
function getNwoOrOwnerFromGitHubUrl( function getNwoOrOwnerFromGitHubUrl(
githubUrl: string, repositoryUrl: string,
githubUrl: URL,
kind: "owner" | "nwo", kind: "owner" | "nwo",
): string | undefined { ): string | undefined {
const validHostnames = [githubUrl.hostname, `www.${githubUrl.hostname}`];
try { try {
let paths: string[]; let paths: string[];
const urlElements = githubUrl.split("/"); const urlElements = repositoryUrl.split("/");
if ( if (validHostnames.includes(urlElements[0])) {
urlElements[0] === "github.com" || paths = repositoryUrl.split("/").slice(1);
urlElements[0] === "www.github.com"
) {
paths = githubUrl.split("/").slice(1);
} else { } else {
const uri = new URL(githubUrl); const uri = new URL(repositoryUrl);
if (uri.hostname !== "github.com" && uri.hostname !== "www.github.com") { if (!validHostnames.includes(uri.hostname)) {
return; return;
} }
paths = uri.pathname.split("/").filter((segment: string) => segment); paths = uri.pathname.split("/").filter((segment: string) => segment);

View File

@@ -147,6 +147,21 @@ interface SetStateMsg {
parsedResultSets: ParsedResultSets; parsedResultSets: ParsedResultSets;
} }
export interface UserSettings {
/** Whether to display links to the dataflow models that generated particular nodes in a flow path. */
shouldShowProvenance: boolean;
}
export const DEFAULT_USER_SETTINGS: UserSettings = {
shouldShowProvenance: false,
};
/** Message indicating that the user's configuration settings have changed. */
interface SetUserSettingsMsg {
t: "setUserSettings";
userSettings: UserSettings;
}
/** /**
* Message indicating that the results view should display interpreted * Message indicating that the results view should display interpreted
* results. * results.
@@ -191,6 +206,7 @@ interface UntoggleShowProblemsMsg {
export type IntoResultsViewMsg = export type IntoResultsViewMsg =
| ResultsUpdatingMsg | ResultsUpdatingMsg
| SetStateMsg | SetStateMsg
| SetUserSettingsMsg
| ShowInterpretedPageMsg | ShowInterpretedPageMsg
| NavigateMsg | NavigateMsg
| UntoggleShowProblemsMsg; | UntoggleShowProblemsMsg;
@@ -208,13 +224,15 @@ export type FromResultsViewMsg =
| OpenFileMsg; | OpenFileMsg;
/** /**
* Message from the results view to open a database source * Message from the results view to open a source
* file at the provided location. * file at the provided location.
*/ */
interface ViewSourceFileMsg { interface ViewSourceFileMsg {
t: "viewSourceFile"; t: "viewSourceFile";
loc: UrlValueResolvable; loc: UrlValueResolvable;
databaseUri: string; /** URI of the database whose source archive contains the file, or `undefined` to open a file from
* the local disk. The latter case is used for opening links to data extension model files. */
databaseUri: string | undefined;
} }
/** /**
@@ -341,7 +359,8 @@ interface ChangeCompareMessage {
export type ToCompareViewMessage = export type ToCompareViewMessage =
| SetComparisonQueryInfoMessage | SetComparisonQueryInfoMessage
| SetComparisonsMessage; | SetComparisonsMessage
| SetUserSettingsMsg;
/** /**
* Message to the compare view that sets the metadata of the compared queries. * Message to the compare view that sets the metadata of the compared queries.

View File

@@ -1,18 +1,20 @@
import type { Log, Tool } from "sarif"; import type { Log } from "sarif";
import { createReadStream } from "fs-extra"; import { createReadStream } from "fs-extra";
import { connectTo } from "stream-json/Assembler"; import { connectTo } from "stream-json/Assembler";
import { getErrorMessage } from "./helpers-pure"; import { getErrorMessage } from "./helpers-pure";
import { withParser } from "stream-json/filters/Pick"; import { withParser } from "stream-json/filters/Ignore";
const DUMMY_TOOL: Tool = { driver: { name: "" } };
export async function sarifParser( export async function sarifParser(
interpretedResultsPath: string, interpretedResultsPath: string,
): Promise<Log> { ): Promise<Log> {
try { try {
// Parse the SARIF file into token streams, filtering out only the results array. // Parse the SARIF file into token streams, filtering out some of the larger subtrees that we
// don't need.
const pipeline = createReadStream(interpretedResultsPath).pipe( const pipeline = createReadStream(interpretedResultsPath).pipe(
withParser({ filter: "runs.0.results" }), withParser({
// We don't need to run's `artifacts` property, nor the driver's `notifications` property.
filter: /^runs\.\d+\.(artifacts|tool\.driver\.notifications)/,
}),
); );
// Creates JavaScript objects from the token stream // Creates JavaScript objects from the token stream
@@ -38,15 +40,17 @@ export async function sarifParser(
}); });
asm.on("done", (asm) => { asm.on("done", (asm) => {
const log: Log = { const log = asm.current;
version: "2.1.0",
runs: [ // Do some trivial validation. This isn't a full validation of the SARIF file, but it's at
{ // least enough to ensure that we're not trying to parse complete garbage later.
tool: DUMMY_TOOL, if (log.runs === undefined || log.runs.length < 1) {
results: asm.current ?? [], reject(
}, new Error(
], "Invalid SARIF file: expecting at least one run with result.",
}; ),
);
}
resolve(log); resolve(log);
alreadyDone = true; alreadyDone = true;

View File

@@ -26,6 +26,8 @@ import {
// All path operations in this file must be on paths *within* the zip // All path operations in this file must be on paths *within* the zip
// archive. // archive.
import { posix } from "path"; import { posix } from "path";
import { DatabaseEventKind } from "../../databases/local-databases/database-events";
import type { DatabaseManager } from "../../databases/local-databases/database-manager";
const path = posix; const path = posix;
@@ -242,15 +244,8 @@ export class ArchiveFileSystemProvider implements FileSystemProvider {
root = new Directory(""); root = new Directory("");
constructor() { flushCache(zipPath: string) {
// When a file system archive is removed from the workspace, we should this.archives.delete(zipPath);
// also remove it from our cache.
workspace.onDidChangeWorkspaceFolders((event) => {
for (const removed of event.removed) {
const zipPath = removed.uri.fsPath;
this.archives.delete(zipPath);
}
});
} }
// metadata // metadata
@@ -366,15 +361,35 @@ export class ArchiveFileSystemProvider implements FileSystemProvider {
*/ */
export const zipArchiveScheme = "codeql-zip-archive"; export const zipArchiveScheme = "codeql-zip-archive";
export function activate(ctx: ExtensionContext) { export function activate(ctx: ExtensionContext, dbm?: DatabaseManager) {
const afsp = new ArchiveFileSystemProvider();
if (dbm) {
ctx.subscriptions.push(
dbm.onDidChangeDatabaseItem(async ({ kind, item: db }) => {
if (kind === DatabaseEventKind.Remove) {
if (db?.sourceArchive) {
afsp.flushCache(db.sourceArchive.fsPath);
}
}
}),
);
}
ctx.subscriptions.push( ctx.subscriptions.push(
workspace.registerFileSystemProvider( // When a file system archive is removed from the workspace, we should
zipArchiveScheme, // also remove it from our cache.
new ArchiveFileSystemProvider(), workspace.onDidChangeWorkspaceFolders((event) => {
{ for (const removed of event.removed) {
isCaseSensitive: true, const zipPath = removed.uri.fsPath;
isReadonly: true, afsp.flushCache(zipPath);
}, }
), }),
);
ctx.subscriptions.push(
workspace.registerFileSystemProvider(zipArchiveScheme, afsp, {
isCaseSensitive: true,
isReadonly: true,
}),
); );
} }

View File

@@ -2,8 +2,8 @@ import { authentication } from "vscode";
import type { Octokit } from "@octokit/rest"; import type { Octokit } from "@octokit/rest";
import type { Credentials } from "../authentication"; import type { Credentials } from "../authentication";
import { AppOctokit } from "../octokit"; import { AppOctokit } from "../octokit";
import { hasGhecDrUri } from "../../config";
export const GITHUB_AUTH_PROVIDER_ID = "github"; import { getOctokitBaseUrl } from "./octokit";
// We need 'repo' scope for triggering workflows, 'gist' scope for exporting results to Gist, // We need 'repo' scope for triggering workflows, 'gist' scope for exporting results to Gist,
// and 'read:packages' for reading private CodeQL packages. // and 'read:packages' for reading private CodeQL packages.
@@ -16,30 +16,24 @@ const SCOPES = ["repo", "gist", "read:packages"];
*/ */
export class VSCodeCredentials implements Credentials { export class VSCodeCredentials implements Credentials {
/** /**
* A specific octokit to return, otherwise a new authenticated octokit will be created when needed. * Creates or returns an instance of Octokit. The returned instance should
*/ * not be stored and reused, as it may become out-of-date with the current
private octokit: Octokit | undefined; * authentication session.
/**
* Creates or returns an instance of Octokit.
* *
* @returns An instance of Octokit. * @returns An instance of Octokit.
*/ */
async getOctokit(): Promise<Octokit> { async getOctokit(): Promise<Octokit> {
if (this.octokit) {
return this.octokit;
}
const accessToken = await this.getAccessToken(); const accessToken = await this.getAccessToken();
return new AppOctokit({ return new AppOctokit({
auth: accessToken, auth: accessToken,
baseUrl: getOctokitBaseUrl(),
}); });
} }
async getAccessToken(): Promise<string> { async getAccessToken(): Promise<string> {
const session = await authentication.getSession( const session = await authentication.getSession(
GITHUB_AUTH_PROVIDER_ID, this.authProviderId,
SCOPES, SCOPES,
{ createIfNone: true }, { createIfNone: true },
); );
@@ -49,11 +43,18 @@ export class VSCodeCredentials implements Credentials {
async getExistingAccessToken(): Promise<string | undefined> { async getExistingAccessToken(): Promise<string | undefined> {
const session = await authentication.getSession( const session = await authentication.getSession(
GITHUB_AUTH_PROVIDER_ID, this.authProviderId,
SCOPES, SCOPES,
{ createIfNone: false }, { createIfNone: false },
); );
return session?.accessToken; return session?.accessToken;
} }
public get authProviderId(): string {
if (hasGhecDrUri()) {
return "github-enterprise";
}
return "github";
}
} }

View File

@@ -0,0 +1,15 @@
import { getGitHubInstanceApiUrl } from "../../config";
/**
* Returns the Octokit base URL to use based on the GitHub instance URL.
*
* This is necessary because the Octokit base URL should not have a trailing
* slash, but this is included by default in a URL.
*/
export function getOctokitBaseUrl(): string {
let apiUrl = getGitHubInstanceApiUrl().toString();
if (apiUrl.endsWith("/")) {
apiUrl = apiUrl.slice(0, -1);
}
return apiUrl;
}

View File

@@ -33,6 +33,14 @@ export interface ProgressUpdate {
message: string; message: string;
} }
export function progressUpdate(
step: number,
maxStep: number,
message: string,
): ProgressUpdate {
return { step, maxStep, message };
}
export type ProgressCallback = (p: ProgressUpdate) => void; export type ProgressCallback = (p: ProgressUpdate) => void;
// Make certain properties within a type optional // Make certain properties within a type optional

View File

@@ -33,6 +33,7 @@ import {
getResultSetNames, getResultSetNames,
} from "./result-set-names"; } from "./result-set-names";
import { compareInterpretedResults } from "./interpreted-results"; import { compareInterpretedResults } from "./interpreted-results";
import { isCanary } from "../config";
interface ComparePair { interface ComparePair {
from: CompletedLocalQueryInfo; from: CompletedLocalQueryInfo;
@@ -116,6 +117,13 @@ export class CompareView extends AbstractWebview<
panel.reveal(undefined, true); panel.reveal(undefined, true);
await this.waitForPanelLoaded(); await this.waitForPanelLoaded();
await this.postMessage({
t: "setUserSettings",
userSettings: {
shouldShowProvenance: isCanary(),
},
});
await this.postMessage({ await this.postMessage({
t: "setComparisonQueryInfo", t: "setComparisonQueryInfo",
stats: { stats: {

View File

@@ -108,12 +108,55 @@ export function hasEnterpriseUri(): boolean {
return getEnterpriseUri() !== undefined; return getEnterpriseUri() !== undefined;
} }
/**
* Does the uri look like GHEC-DR?
*/
function isGhecDrUri(uri: Uri | undefined): boolean {
return uri !== undefined && uri.authority.toLowerCase().endsWith(".ghe.com");
}
/** /**
* Is the GitHub Enterprise URI set to something that looks like GHEC-DR? * Is the GitHub Enterprise URI set to something that looks like GHEC-DR?
*/ */
export function hasGhecDrUri(): boolean { export function hasGhecDrUri(): boolean {
const uri = getEnterpriseUri(); const uri = getEnterpriseUri();
return uri !== undefined && uri.authority.toLowerCase().endsWith(".ghe.com"); return isGhecDrUri(uri);
}
/**
* The URI for GitHub.com.
*/
export const GITHUB_URL = new URL("https://github.com");
export const GITHUB_API_URL = new URL("https://api.github.com");
/**
* If the GitHub Enterprise URI is set to something that looks like GHEC-DR, return it.
*/
export function getGhecDrUri(): Uri | undefined {
const uri = getEnterpriseUri();
if (isGhecDrUri(uri)) {
return uri;
} else {
return undefined;
}
}
export function getGitHubInstanceUrl(): URL {
const ghecDrUri = getGhecDrUri();
if (ghecDrUri) {
return new URL(ghecDrUri.toString());
}
return GITHUB_URL;
}
export function getGitHubInstanceApiUrl(): URL {
const ghecDrUri = getGhecDrUri();
if (ghecDrUri) {
const url = new URL(ghecDrUri.toString());
url.hostname = `api.${url.hostname}`;
return url;
}
return GITHUB_API_URL;
} }
const ROOT_SETTING = new Setting("codeQL"); const ROOT_SETTING = new Setting("codeQL");
@@ -570,6 +613,11 @@ export async function setRemoteControllerRepo(repo: string | undefined) {
export interface VariantAnalysisConfig { export interface VariantAnalysisConfig {
controllerRepo: string | undefined; controllerRepo: string | undefined;
showSystemDefinedRepositoryLists: boolean; showSystemDefinedRepositoryLists: boolean;
/**
* This uses a URL instead of a URI because the URL class is available in
* unit tests and is fully browser-compatible.
*/
githubUrl: URL;
onDidChangeConfiguration?: Event<void>; onDidChangeConfiguration?: Event<void>;
} }
@@ -591,6 +639,10 @@ export class VariantAnalysisConfigListener
public get showSystemDefinedRepositoryLists(): boolean { public get showSystemDefinedRepositoryLists(): boolean {
return !hasEnterpriseUri(); return !hasEnterpriseUri();
} }
public get githubUrl(): URL {
return getGitHubInstanceUrl();
}
} }
const VARIANT_ANALYSIS_FILTER_RESULTS = new Setting( const VARIANT_ANALYSIS_FILTER_RESULTS = new Setting(
@@ -628,11 +680,6 @@ export function getVariantAnalysisDefaultResultsSort(): SortKey {
*/ */
const ACTION_BRANCH = new Setting("actionBranch", VARIANT_ANALYSIS_SETTING); const ACTION_BRANCH = new Setting("actionBranch", VARIANT_ANALYSIS_SETTING);
export const VARIANT_ANALYSIS_ENABLE_GHEC_DR = new Setting(
"enableGhecDr",
VARIANT_ANALYSIS_SETTING,
);
export function getActionBranch(): string { export function getActionBranch(): string {
return ACTION_BRANCH.getValue<string>() || "main"; return ACTION_BRANCH.getValue<string>() || "main";
} }
@@ -793,7 +840,6 @@ const LLM_GENERATION_DEV_ENDPOINT = new Setting(
const MODEL_EVALUATION = new Setting("evaluation", MODEL_SETTING); const MODEL_EVALUATION = new Setting("evaluation", MODEL_SETTING);
const MODEL_PACK_LOCATION = new Setting("packLocation", MODEL_SETTING); const MODEL_PACK_LOCATION = new Setting("packLocation", MODEL_SETTING);
const MODEL_PACK_NAME = new Setting("packName", MODEL_SETTING); const MODEL_PACK_NAME = new Setting("packName", MODEL_SETTING);
const ENABLE_PYTHON = new Setting("enablePython", MODEL_SETTING);
export type ModelConfigPackVariables = { export type ModelConfigPackVariables = {
database: string; database: string;
@@ -810,7 +856,6 @@ export interface ModelConfig {
variables: ModelConfigPackVariables, variables: ModelConfigPackVariables,
): string; ): string;
getPackName(languageId: string, variables: ModelConfigPackVariables): string; getPackName(languageId: string, variables: ModelConfigPackVariables): string;
enablePython: boolean;
} }
export class ModelConfigListener extends ConfigListener implements ModelConfig { export class ModelConfigListener extends ConfigListener implements ModelConfig {
@@ -872,10 +917,6 @@ export class ModelConfigListener extends ConfigListener implements ModelConfig {
variables, variables,
); );
} }
public get enablePython(): boolean {
return !!ENABLE_PYTHON.getValue<boolean>();
}
} }
const GITHUB_DATABASE_SETTING = new Setting("githubDatabase", ROOT_SETTING); const GITHUB_DATABASE_SETTING = new Setting("githubDatabase", ROOT_SETTING);

View File

@@ -7,6 +7,7 @@ import { AppOctokit } from "../common/octokit";
import type { ProgressCallback } from "../common/vscode/progress"; import type { ProgressCallback } from "../common/vscode/progress";
import { UserCancellationException } from "../common/vscode/progress"; import { UserCancellationException } from "../common/vscode/progress";
import type { EndpointDefaults } from "@octokit/types"; import type { EndpointDefaults } from "@octokit/types";
import { getOctokitBaseUrl } from "../common/vscode/octokit";
export async function getCodeSearchRepositories( export async function getCodeSearchRepositories(
query: string, query: string,
@@ -54,6 +55,7 @@ async function provideOctokitWithThrottling(
const octokit = new MyOctokit({ const octokit = new MyOctokit({
auth, auth,
baseUrl: getOctokitBaseUrl(),
throttle: { throttle: {
onRateLimit: (retryAfter: number, options: EndpointDefaults): boolean => { onRateLimit: (retryAfter: number, options: EndpointDefaults): boolean => {
void logger.log( void logger.log(

View File

@@ -29,6 +29,8 @@ import {
addDatabaseSourceToWorkspace, addDatabaseSourceToWorkspace,
allowHttp, allowHttp,
downloadTimeout, downloadTimeout,
getGitHubInstanceUrl,
hasGhecDrUri,
isCanary, isCanary,
} from "../config"; } from "../config";
import { showAndLogInformationMessage } from "../common/logging"; import { showAndLogInformationMessage } from "../common/logging";
@@ -150,10 +152,11 @@ export class DatabaseFetcher {
maxStep: 2, maxStep: 2,
}); });
const instanceUrl = getGitHubInstanceUrl();
const options: InputBoxOptions = { const options: InputBoxOptions = {
title: title: `Enter a GitHub repository URL or "name with owner" (e.g. ${new URL("/github/codeql", instanceUrl).toString()} or github/codeql)`,
'Enter a GitHub repository URL or "name with owner" (e.g. https://github.com/github/codeql or github/codeql)', placeHolder: `${new URL("/", instanceUrl).toString()}<owner>/<repo> or <owner>/<repo>`,
placeHolder: "https://github.com/<owner>/<repo> or <owner>/<repo>",
ignoreFocusOut: true, ignoreFocusOut: true,
}; };
@@ -180,12 +183,14 @@ export class DatabaseFetcher {
makeSelected = true, makeSelected = true,
addSourceArchiveFolder = addDatabaseSourceToWorkspace(), addSourceArchiveFolder = addDatabaseSourceToWorkspace(),
): Promise<DatabaseItem | undefined> { ): Promise<DatabaseItem | undefined> {
const nwo = getNwoFromGitHubUrl(githubRepo) || githubRepo; const nwo =
getNwoFromGitHubUrl(githubRepo, getGitHubInstanceUrl()) || githubRepo;
if (!isValidGitHubNwo(nwo)) { if (!isValidGitHubNwo(nwo)) {
throw new Error(`Invalid GitHub repository: ${githubRepo}`); throw new Error(`Invalid GitHub repository: ${githubRepo}`);
} }
const credentials = isCanary() ? this.app.credentials : undefined; const credentials =
isCanary() || hasGhecDrUri() ? this.app.credentials : undefined;
const octokit = credentials const octokit = credentials
? await credentials.getOctokit() ? await credentials.getOctokit()

View File

@@ -3,6 +3,7 @@ import type { Octokit } from "@octokit/rest";
import type { RestEndpointMethodTypes } from "@octokit/plugin-rest-endpoint-methods"; import type { RestEndpointMethodTypes } from "@octokit/plugin-rest-endpoint-methods";
import { showNeverAskAgainDialog } from "../../common/vscode/dialog"; import { showNeverAskAgainDialog } from "../../common/vscode/dialog";
import type { GitHubDatabaseConfig } from "../../config"; import type { GitHubDatabaseConfig } from "../../config";
import { hasGhecDrUri } from "../../config";
import type { Credentials } from "../../common/authentication"; import type { Credentials } from "../../common/authentication";
import { AppOctokit } from "../../common/octokit"; import { AppOctokit } from "../../common/octokit";
import type { ProgressCallback } from "../../common/vscode/progress"; import type { ProgressCallback } from "../../common/vscode/progress";
@@ -67,7 +68,10 @@ export async function listDatabases(
credentials: Credentials, credentials: Credentials,
config: GitHubDatabaseConfig, config: GitHubDatabaseConfig,
): Promise<ListDatabasesResult | undefined> { ): Promise<ListDatabasesResult | undefined> {
const hasAccessToken = !!(await credentials.getExistingAccessToken()); // On GHEC-DR, unauthenticated requests will never work, so we should always ask
// for authentication.
const hasAccessToken =
!!(await credentials.getExistingAccessToken()) || hasGhecDrUri();
let octokit = hasAccessToken let octokit = hasAccessToken
? await credentials.getOctokit() ? await credentials.getOctokit()

View File

@@ -109,9 +109,8 @@ class DatabaseTreeDataProvider
// Note that events from the database manager are instances of DatabaseChangedEvent // Note that events from the database manager are instances of DatabaseChangedEvent
// and events fired by the UI are instances of DatabaseItem // and events fired by the UI are instances of DatabaseItem
// When event.item is undefined, then the entire tree is refreshed. // When a full refresh has occurred, then all items are refreshed by passing undefined.
// When event.item is a db item, then only that item is refreshed. this._onDidChangeTreeData.fire(event.fullRefresh ? undefined : event.item);
this._onDidChangeTreeData.fire(event.item);
} }
private handleDidChangeCurrentDatabaseItem( private handleDidChangeCurrentDatabaseItem(

View File

@@ -16,4 +16,8 @@ export enum DatabaseEventKind {
export interface DatabaseChangedEvent { export interface DatabaseChangedEvent {
kind: DatabaseEventKind; kind: DatabaseEventKind;
item: DatabaseItem | undefined; item: DatabaseItem | undefined;
// If true, event handlers should consider the database manager
// to have been fully refreshed. Any state managed by the
// event handler should be fully refreshed as well.
fullRefresh: boolean;
} }

View File

@@ -613,6 +613,7 @@ export class DatabaseManager extends DisposableObject {
this._onDidChangeCurrentDatabaseItem.fire({ this._onDidChangeCurrentDatabaseItem.fire({
item, item,
kind: DatabaseEventKind.Change, kind: DatabaseEventKind.Change,
fullRefresh: false,
}); });
} }
} }
@@ -662,8 +663,9 @@ export class DatabaseManager extends DisposableObject {
} }
// note that we use undefined as the item in order to reset the entire tree // note that we use undefined as the item in order to reset the entire tree
this._onDidChangeDatabaseItem.fire({ this._onDidChangeDatabaseItem.fire({
item: undefined, item,
kind: DatabaseEventKind.Add, kind: DatabaseEventKind.Add,
fullRefresh: true,
}); });
} }
@@ -671,9 +673,9 @@ export class DatabaseManager extends DisposableObject {
item.name = newName; item.name = newName;
await this.updatePersistedDatabaseList(); await this.updatePersistedDatabaseList();
this._onDidChangeDatabaseItem.fire({ this._onDidChangeDatabaseItem.fire({
// pass undefined so that the entire tree is rebuilt in order to re-sort item,
item: undefined,
kind: DatabaseEventKind.Rename, kind: DatabaseEventKind.Rename,
fullRefresh: true,
}); });
} }
@@ -720,10 +722,10 @@ export class DatabaseManager extends DisposableObject {
); );
} }
// note that we use undefined as the item in order to reset the entire tree
this._onDidChangeDatabaseItem.fire({ this._onDidChangeDatabaseItem.fire({
item: undefined, item,
kind: DatabaseEventKind.Remove, kind: DatabaseEventKind.Remove,
fullRefresh: true,
}); });
} }
@@ -776,6 +778,7 @@ export class DatabaseManager extends DisposableObject {
this._onDidChangeDatabaseItem.fire({ this._onDidChangeDatabaseItem.fire({
kind: DatabaseEventKind.Refresh, kind: DatabaseEventKind.Refresh,
item: databaseItem, item: databaseItem,
fullRefresh: false,
}); });
} }
} }

View File

@@ -37,11 +37,12 @@ export const shownLocationLineDecoration =
/** /**
* Resolves the specified CodeQL location to a URI into the source archive. * Resolves the specified CodeQL location to a URI into the source archive.
* @param loc CodeQL location to resolve. Must have a non-empty value for `loc.file`. * @param loc CodeQL location to resolve. Must have a non-empty value for `loc.file`.
* @param databaseItem Database in which to resolve the file location. * @param databaseItem Database in which to resolve the file location, or `undefined` to resolve
* from the local file system.
*/ */
function resolveFivePartLocation( function resolveFivePartLocation(
loc: UrlValueLineColumnLocation, loc: UrlValueLineColumnLocation,
databaseItem: DatabaseItem, databaseItem: DatabaseItem | undefined,
): Location { ): Location {
// `Range` is a half-open interval, and is zero-based. CodeQL locations are closed intervals, and // `Range` is a half-open interval, and is zero-based. CodeQL locations are closed intervals, and
// are one-based. Adjust accordingly. // are one-based. Adjust accordingly.
@@ -52,7 +53,10 @@ function resolveFivePartLocation(
Math.max(1, loc.endColumn), Math.max(1, loc.endColumn),
); );
return new Location(databaseItem.resolveSourceFile(loc.uri), range); return new Location(
databaseItem?.resolveSourceFile(loc.uri) ?? Uri.parse(loc.uri),
range,
);
} }
/** /**
@@ -62,22 +66,26 @@ function resolveFivePartLocation(
*/ */
function resolveWholeFileLocation( function resolveWholeFileLocation(
loc: UrlValueWholeFileLocation, loc: UrlValueWholeFileLocation,
databaseItem: DatabaseItem, databaseItem: DatabaseItem | undefined,
): Location { ): Location {
// A location corresponding to the start of the file. // A location corresponding to the start of the file.
const range = new Range(0, 0, 0, 0); const range = new Range(0, 0, 0, 0);
return new Location(databaseItem.resolveSourceFile(loc.uri), range); return new Location(
databaseItem?.resolveSourceFile(loc.uri) ?? Uri.parse(loc.uri),
range,
);
} }
/** /**
* Try to resolve the specified CodeQL location to a URI into the source archive. If no exact location * Try to resolve the specified CodeQL location to a URI into the source archive. If no exact location
* can be resolved, returns `undefined`. * can be resolved, returns `undefined`.
* @param loc CodeQL location to resolve * @param loc CodeQL location to resolve
* @param databaseItem Database in which to resolve the file location. * @param databaseItem Database in which to resolve the file location, or `undefined` to resolve
* from the local file system.
*/ */
export function tryResolveLocation( export function tryResolveLocation(
loc: UrlValueResolvable | undefined, loc: UrlValueResolvable | undefined,
databaseItem: DatabaseItem, databaseItem: DatabaseItem | undefined,
): Location | undefined { ): Location | undefined {
if (!loc) { if (!loc) {
return; return;
@@ -95,7 +103,7 @@ export function tryResolveLocation(
export async function showResolvableLocation( export async function showResolvableLocation(
loc: UrlValueResolvable, loc: UrlValueResolvable,
databaseItem: DatabaseItem, databaseItem: DatabaseItem | undefined,
logger: Logger, logger: Logger,
): Promise<void> { ): Promise<void> {
try { try {
@@ -151,13 +159,14 @@ export async function showLocation(location?: Location) {
} }
export async function jumpToLocation( export async function jumpToLocation(
databaseUri: string, databaseUri: string | undefined,
loc: UrlValueResolvable, loc: UrlValueResolvable,
databaseManager: DatabaseManager, databaseManager: DatabaseManager,
logger: Logger, logger: Logger,
) { ) {
const databaseItem = databaseManager.findDatabaseItem(Uri.parse(databaseUri)); const databaseItem =
if (databaseItem !== undefined) { databaseUri !== undefined
await showResolvableLocation(loc, databaseItem, logger); ? databaseManager.findDatabaseItem(Uri.parse(databaseUri))
} : undefined;
await showResolvableLocation(loc, databaseItem, logger);
} }

View File

@@ -25,6 +25,7 @@ import type { App } from "../../common/app";
import { QueryLanguage } from "../../common/query-language"; import { QueryLanguage } from "../../common/query-language";
import { getCodeSearchRepositories } from "../code-search-api"; import { getCodeSearchRepositories } from "../code-search-api";
import { showAndLogErrorMessage } from "../../common/logging"; import { showAndLogErrorMessage } from "../../common/logging";
import { getGitHubInstanceUrl } from "../../config";
export interface RemoteDatabaseQuickPickItem extends QuickPickItem { export interface RemoteDatabaseQuickPickItem extends QuickPickItem {
remoteDatabaseKind: string; remoteDatabaseKind: string;
@@ -146,16 +147,19 @@ export class DbPanel extends DisposableObject {
} }
private async addNewRemoteRepo(parentList?: string): Promise<void> { private async addNewRemoteRepo(parentList?: string): Promise<void> {
const instanceUrl = getGitHubInstanceUrl();
const repoName = await window.showInputBox({ const repoName = await window.showInputBox({
title: "Add a repository", title: "Add a repository",
prompt: "Insert a GitHub repository URL or name with owner", prompt: "Insert a GitHub repository URL or name with owner",
placeHolder: "<owner>/<repo> or https://github.com/<owner>/<repo>", placeHolder: `<owner>/<repo> or ${new URL("/", instanceUrl).toString()}<owner>/<repo>`,
}); });
if (!repoName) { if (!repoName) {
return; return;
} }
const nwo = getNwoFromGitHubUrl(repoName) || repoName; const nwo =
getNwoFromGitHubUrl(repoName, getGitHubInstanceUrl()) || repoName;
if (!isValidGitHubNwo(nwo)) { if (!isValidGitHubNwo(nwo)) {
void showAndLogErrorMessage( void showAndLogErrorMessage(
this.app.logger, this.app.logger,
@@ -176,17 +180,20 @@ export class DbPanel extends DisposableObject {
} }
private async addNewRemoteOwner(): Promise<void> { private async addNewRemoteOwner(): Promise<void> {
const instanceUrl = getGitHubInstanceUrl();
const ownerName = await window.showInputBox({ const ownerName = await window.showInputBox({
title: "Add all repositories of a GitHub org or owner", title: "Add all repositories of a GitHub org or owner",
prompt: "Insert a GitHub organization or owner name", prompt: "Insert a GitHub organization or owner name",
placeHolder: "<owner> or https://github.com/<owner>", placeHolder: `<owner> or ${new URL("/", instanceUrl).toString()}<owner>`,
}); });
if (!ownerName) { if (!ownerName) {
return; return;
} }
const owner = getOwnerFromGitHubUrl(ownerName) || ownerName; const owner =
getOwnerFromGitHubUrl(ownerName, getGitHubInstanceUrl()) || ownerName;
if (!isValidGitHubOwner(owner)) { if (!isValidGitHubOwner(owner)) {
void showAndLogErrorMessage( void showAndLogErrorMessage(
this.app.logger, this.app.logger,
@@ -411,7 +418,7 @@ export class DbPanel extends DisposableObject {
if (treeViewItem.dbItem === undefined) { if (treeViewItem.dbItem === undefined) {
throw new Error("Unable to open on GitHub. Please select a valid item."); throw new Error("Unable to open on GitHub. Please select a valid item.");
} }
const githubUrl = getGitHubUrl(treeViewItem.dbItem); const githubUrl = getGitHubUrl(treeViewItem.dbItem, getGitHubInstanceUrl());
if (!githubUrl) { if (!githubUrl) {
throw new Error( throw new Error(
"Unable to open on GitHub. Please select a variant analysis repository or owner.", "Unable to open on GitHub. Please select a variant analysis repository or owner.",

View File

@@ -62,12 +62,15 @@ function canImportCodeSearch(dbItem: DbItem): boolean {
return DbItemKind.RemoteUserDefinedList === dbItem.kind; return DbItemKind.RemoteUserDefinedList === dbItem.kind;
} }
export function getGitHubUrl(dbItem: DbItem): string | undefined { export function getGitHubUrl(
dbItem: DbItem,
githubUrl: URL,
): string | undefined {
switch (dbItem.kind) { switch (dbItem.kind) {
case DbItemKind.RemoteOwner: case DbItemKind.RemoteOwner:
return `https://github.com/${dbItem.ownerName}`; return new URL(`/${dbItem.ownerName}`, githubUrl).toString();
case DbItemKind.RemoteRepo: case DbItemKind.RemoteRepo:
return `https://github.com/${dbItem.repoFullName}`; return new URL(`/${dbItem.repoFullName}`, githubUrl).toString();
default: default:
return undefined; return undefined;
} }

View File

@@ -135,7 +135,7 @@ class QLDebugAdapterTracker
): Promise<void> { ): Promise<void> {
if (this.localQueryRun !== undefined) { if (this.localQueryRun !== undefined) {
const results: CoreQueryResults = body; const results: CoreQueryResults = body;
await this.localQueryRun.complete(results); await this.localQueryRun.complete(results, (_) => {});
this.localQueryRun = undefined; this.localQueryRun = undefined;
} }
} }

View File

@@ -31,6 +31,7 @@ import {
joinOrderWarningThreshold, joinOrderWarningThreshold,
QueryHistoryConfigListener, QueryHistoryConfigListener,
QueryServerConfigListener, QueryServerConfigListener,
VariantAnalysisConfigListener,
} from "./config"; } from "./config";
import { import {
AstViewer, AstViewer,
@@ -446,8 +447,9 @@ export async function activate(
} }
if ( if (
CliVersionConstraint.OLDEST_SUPPORTED_CLI_VERSION.compare(ver.version) < CliVersionConstraint.OLDEST_SUPPORTED_CLI_VERSION.compare(
0 ver.version,
) <= 0
) { ) {
return; return;
} }
@@ -715,12 +717,13 @@ async function installOrUpdateThenTryActivate(
return undefined; return undefined;
} }
const PACK_GLOBS = [ const CLEAR_PACK_CACHE_ON_EDIT_GLOBS = [
"**/codeql-pack.yml", "**/codeql-pack.yml",
"**/qlpack.yml", "**/qlpack.yml",
"**/queries.xml", "**/queries.xml",
"**/codeql-pack.lock.yml", "**/codeql-pack.lock.yml",
"**/qlpack.lock.yml", "**/qlpack.lock.yml",
"**/*.dbscheme",
".codeqlmanifest.json", ".codeqlmanifest.json",
"codeql-workspace.yml", "codeql-workspace.yml",
]; ];
@@ -767,7 +770,7 @@ async function activateWithInstalledDistribution(
ctx, ctx,
); );
for (const glob of PACK_GLOBS) { for (const glob of CLEAR_PACK_CACHE_ON_EDIT_GLOBS) {
const fsWatcher = workspace.createFileSystemWatcher(glob); const fsWatcher = workspace.createFileSystemWatcher(glob);
ctx.subscriptions.push(fsWatcher); ctx.subscriptions.push(fsWatcher);
@@ -864,8 +867,10 @@ async function activateWithInstalledDistribution(
"variant-analyses", "variant-analyses",
); );
await ensureDir(variantAnalysisStorageDir); await ensureDir(variantAnalysisStorageDir);
const variantAnalysisConfig = new VariantAnalysisConfigListener();
const variantAnalysisResultsManager = new VariantAnalysisResultsManager( const variantAnalysisResultsManager = new VariantAnalysisResultsManager(
cliServer, cliServer,
variantAnalysisConfig,
extLogger, extLogger,
); );
@@ -875,6 +880,7 @@ async function activateWithInstalledDistribution(
variantAnalysisStorageDir, variantAnalysisStorageDir,
variantAnalysisResultsManager, variantAnalysisResultsManager,
dbModule.dbManager, dbModule.dbManager,
variantAnalysisConfig,
); );
ctx.subscriptions.push(variantAnalysisManager); ctx.subscriptions.push(variantAnalysisManager);
ctx.subscriptions.push(variantAnalysisResultsManager); ctx.subscriptions.push(variantAnalysisResultsManager);
@@ -942,7 +948,7 @@ async function activateWithInstalledDistribution(
ctx.subscriptions.push(compareView); ctx.subscriptions.push(compareView);
void extLogger.log("Initializing source archive filesystem provider."); void extLogger.log("Initializing source archive filesystem provider.");
archiveFilesystemProvider_activate(ctx); archiveFilesystemProvider_activate(ctx, dbm);
const qhelpTmpDir = dirSync({ const qhelpTmpDir = dirSync({
prefix: "qhelp_", prefix: "qhelp_",

View File

@@ -485,7 +485,7 @@ export class LocalQueries extends DisposableObject {
localQueryRun.logger, localQueryRun.logger,
); );
await localQueryRun.complete(results); await localQueryRun.complete(results, progress);
return results; return results;
} catch (e) { } catch (e) {

View File

@@ -26,6 +26,8 @@ import type { LocalQueries } from "./local-queries";
import { tryGetQueryMetadata } from "../codeql-cli/query-metadata"; import { tryGetQueryMetadata } from "../codeql-cli/query-metadata";
import { telemetryListener } from "../common/vscode/telemetry"; import { telemetryListener } from "../common/vscode/telemetry";
import type { Disposable } from "../common/disposable-object"; import type { Disposable } from "../common/disposable-object";
import type { ProgressCallback } from "../common/vscode/progress";
import { progressUpdate } from "../common/vscode/progress";
function formatResultMessage(result: CoreQueryResults): string { function formatResultMessage(result: CoreQueryResults): string {
switch (result.resultType) { switch (result.resultType) {
@@ -79,23 +81,31 @@ export class LocalQueryRun {
* This function must be called when the evaluation completes, whether the evaluation was * This function must be called when the evaluation completes, whether the evaluation was
* successful or not. * successful or not.
* */ * */
public async complete(results: CoreQueryResults): Promise<void> { public async complete(
results: CoreQueryResults,
progress: ProgressCallback,
): Promise<void> {
const evalLogPaths = await this.summarizeEvalLog( const evalLogPaths = await this.summarizeEvalLog(
results.resultType, results.resultType,
this.outputDir, this.outputDir,
this.logger, this.logger,
progress,
); );
if (evalLogPaths !== undefined) { if (evalLogPaths !== undefined) {
this.queryInfo.setEvaluatorLogPaths(evalLogPaths); this.queryInfo.setEvaluatorLogPaths(evalLogPaths);
} }
progress(progressUpdate(1, 4, "Getting completed query info"));
const queryWithResults = await this.getCompletedQueryInfo(results); const queryWithResults = await this.getCompletedQueryInfo(results);
progress(progressUpdate(2, 4, "Updating query history"));
this.queryHistoryManager.completeQuery(this.queryInfo, queryWithResults); this.queryHistoryManager.completeQuery(this.queryInfo, queryWithResults);
progress(progressUpdate(3, 4, "Showing results"));
await this.localQueries.showResultsForCompletedQuery( await this.localQueries.showResultsForCompletedQuery(
this.queryInfo as CompletedLocalQueryInfo, this.queryInfo as CompletedLocalQueryInfo,
WebviewReveal.Forced, WebviewReveal.Forced,
); );
// Note we must update the query history view after showing results as the // Note we must update the query history view after showing results as the
// display and sorting might depend on the number of results // display and sorting might depend on the number of results
progress(progressUpdate(4, 4, "Updating query history"));
await this.queryHistoryManager.refreshTreeView(); await this.queryHistoryManager.refreshTreeView();
this.logger.dispose(); this.logger.dispose();
@@ -109,6 +119,7 @@ export class LocalQueryRun {
QueryResultType.OTHER_ERROR, QueryResultType.OTHER_ERROR,
this.outputDir, this.outputDir,
this.logger, this.logger,
(_) => {},
); );
if (evalLogPaths !== undefined) { if (evalLogPaths !== undefined) {
this.queryInfo.setEvaluatorLogPaths(evalLogPaths); this.queryInfo.setEvaluatorLogPaths(evalLogPaths);
@@ -128,10 +139,12 @@ export class LocalQueryRun {
resultType: QueryResultType, resultType: QueryResultType,
outputDir: QueryOutputDir, outputDir: QueryOutputDir,
logger: BaseLogger, logger: BaseLogger,
progress: ProgressCallback,
): Promise<EvaluatorLogPaths | undefined> { ): Promise<EvaluatorLogPaths | undefined> {
const evalLogPaths = await generateEvalLogSummaries( const evalLogPaths = await generateEvalLogSummaries(
this.cliServer, this.cliServer,
outputDir, outputDir,
progress,
); );
if (evalLogPaths !== undefined) { if (evalLogPaths !== undefined) {
if (evalLogPaths.endSummary !== undefined) { if (evalLogPaths.endSummary !== undefined) {

View File

@@ -537,6 +537,14 @@ export class ResultsView extends AbstractWebview<
resultSetNames, resultSetNames,
}; };
await this.postMessage({
t: "setUserSettings",
userSettings: {
// Only show provenance info in canary mode for now.
shouldShowProvenance: isCanary(),
},
});
await this.postMessage({ await this.postMessage({
t: "setState", t: "setState",
interpretation: interpretationPage, interpretation: interpretationPage,

View File

@@ -33,6 +33,7 @@ export function decodeBqrsToMethods(
let libraryVersion: string | undefined; let libraryVersion: string | undefined;
let type: ModeledMethodType; let type: ModeledMethodType;
let classification: CallClassification; let classification: CallClassification;
let endpointKindColumn: string | BqrsEntityValue | undefined;
let endpointType: EndpointType | undefined = undefined; let endpointType: EndpointType | undefined = undefined;
if (mode === Mode.Application) { if (mode === Mode.Application) {
@@ -47,6 +48,7 @@ export function decodeBqrsToMethods(
libraryVersion, libraryVersion,
type, type,
classification, classification,
endpointKindColumn,
] = tuple as ApplicationModeTuple; ] = tuple as ApplicationModeTuple;
} else { } else {
[ [
@@ -58,6 +60,7 @@ export function decodeBqrsToMethods(
supported, supported,
library, library,
type, type,
endpointKindColumn,
] = tuple as FrameworkModeTuple; ] = tuple as FrameworkModeTuple;
classification = CallClassification.Unknown; classification = CallClassification.Unknown;
@@ -68,13 +71,18 @@ export function decodeBqrsToMethods(
} }
if (definition.endpointTypeForEndpoint) { if (definition.endpointTypeForEndpoint) {
endpointType = definition.endpointTypeForEndpoint({ endpointType = definition.endpointTypeForEndpoint(
endpointType, {
packageName, endpointType,
typeName, packageName,
methodName, typeName,
methodParameters, methodName,
}); methodParameters,
},
typeof endpointKindColumn === "object"
? endpointKindColumn.label
: endpointKindColumn,
);
} }
if (endpointType === undefined) { if (endpointType === undefined) {

View File

@@ -174,11 +174,14 @@ export type ModelsAsDataLanguage = {
* be determined by heuristics. * be determined by heuristics.
* @param method The method to get the endpoint type for. The endpoint type can be undefined if the * @param method The method to get the endpoint type for. The endpoint type can be undefined if the
* query does not return an endpoint type. * query does not return an endpoint type.
* @param endpointKind An optional column that may be provided by the query to help determine the
* endpoint type.
*/ */
endpointTypeForEndpoint?: ( endpointTypeForEndpoint?: (
method: Omit<MethodDefinition, "endpointType"> & { method: Omit<MethodDefinition, "endpointType"> & {
endpointType: EndpointType | undefined; endpointType: EndpointType | undefined;
}, },
endpointKind: string | undefined,
) => EndpointType | undefined; ) => EndpointType | undefined;
predicates: ModelsAsDataLanguagePredicates; predicates: ModelsAsDataLanguagePredicates;
modelGeneration?: ModelsAsDataLanguageModelGeneration; modelGeneration?: ModelsAsDataLanguageModelGeneration;

View File

@@ -4,7 +4,26 @@ import { EndpointType } from "../../method";
const memberTokenRegex = /^Member\[(.+)]$/; const memberTokenRegex = /^Member\[(.+)]$/;
export function parsePythonAccessPath(path: string): { // In Python, the type can contain both the package name and the type name.
export function parsePythonType(type: string) {
// The first part is always the package name. All remaining parts are the type
// name.
const parts = type.split(".");
const packageName = parts.shift() ?? "";
return {
packageName,
typeName: parts.join("."),
};
}
// The type name can also be specified in the type, so this will combine
// the already parsed type name and the type name from the access path.
export function parsePythonAccessPath(
path: string,
shortTypeName: string,
): {
typeName: string; typeName: string;
methodName: string; methodName: string;
endpointType: EndpointType; endpointType: EndpointType;
@@ -13,8 +32,12 @@ export function parsePythonAccessPath(path: string): {
const tokens = parseAccessPathTokens(path); const tokens = parseAccessPathTokens(path);
if (tokens.length === 0) { if (tokens.length === 0) {
const typeName = shortTypeName.endsWith("!")
? shortTypeName.slice(0, -1)
: shortTypeName;
return { return {
typeName: "", typeName,
methodName: "", methodName: "",
endpointType: EndpointType.Method, endpointType: EndpointType.Method,
path: "", path: "",
@@ -23,6 +46,10 @@ export function parsePythonAccessPath(path: string): {
const typeParts = []; const typeParts = [];
let endpointType = EndpointType.Function; let endpointType = EndpointType.Function;
// If a short type name was given and it doesn't end in a `!`, then this refers to a method.
if (shortTypeName !== "" && !shortTypeName.endsWith("!")) {
endpointType = EndpointType.Method;
}
let remainingTokens: typeof tokens = []; let remainingTokens: typeof tokens = [];
@@ -32,6 +59,7 @@ export function parsePythonAccessPath(path: string): {
if (memberMatch) { if (memberMatch) {
typeParts.push(memberMatch[1]); typeParts.push(memberMatch[1]);
} else if (token.text === "Instance") { } else if (token.text === "Instance") {
// Alternative way of specifying that this refers to a method.
endpointType = EndpointType.Method; endpointType = EndpointType.Method;
} else { } else {
remainingTokens = tokens.slice(i); remainingTokens = tokens.slice(i);
@@ -40,9 +68,22 @@ export function parsePythonAccessPath(path: string): {
} }
const methodName = typeParts.pop() ?? ""; const methodName = typeParts.pop() ?? "";
const typeName = typeParts.join("."); let typeName = typeParts.join(".");
const remainingPath = remainingTokens.map((token) => token.text).join("."); const remainingPath = remainingTokens.map((token) => token.text).join(".");
if (shortTypeName !== "") {
if (shortTypeName.endsWith("!")) {
// The actual type name is the name without the `!`.
shortTypeName = shortTypeName.slice(0, -1);
}
if (typeName !== "") {
typeName = `${shortTypeName}.${typeName}`;
} else {
typeName = shortTypeName;
}
}
return { return {
methodName, methodName,
typeName, typeName,
@@ -51,53 +92,59 @@ export function parsePythonAccessPath(path: string): {
}; };
} }
export function parsePythonTypeAndPath(
type: string,
path: string,
): {
packageName: string;
typeName: string;
methodName: string;
endpointType: EndpointType;
path: string;
} {
const { packageName, typeName: shortTypeName } = parsePythonType(type);
const {
typeName,
methodName,
endpointType,
path: remainingPath,
} = parsePythonAccessPath(path, shortTypeName);
return {
packageName,
typeName,
methodName,
endpointType,
path: remainingPath,
};
}
export function pythonMethodSignature(typeName: string, methodName: string) { export function pythonMethodSignature(typeName: string, methodName: string) {
return `${typeName}#${methodName}`; return `${typeName}#${methodName}`;
} }
function pythonTypePath(typeName: string) { export function pythonType(
if (typeName === "") { packageName: string,
typeName: string,
endpointType: EndpointType,
) {
if (typeName !== "" && packageName !== "") {
return `${packageName}.${typeName}${endpointType === EndpointType.Function ? "!" : ""}`;
}
return `${packageName}${typeName}`;
}
export function pythonMethodPath(methodName: string) {
if (methodName === "") {
return ""; return "";
} }
return typeName return `Member[${methodName}]`;
.split(".")
.map((part) => `Member[${part}]`)
.join(".");
} }
export function pythonMethodPath( export function pythonPath(methodName: string, path: string) {
typeName: string, const methodPath = pythonMethodPath(methodName);
methodName: string,
endpointType: EndpointType,
) {
if (methodName === "") {
return pythonTypePath(typeName);
}
const typePath = pythonTypePath(typeName);
let result = typePath;
if (typePath !== "" && endpointType === EndpointType.Method) {
result += ".Instance";
}
if (result !== "") {
result += ".";
}
result += `Member[${methodName}]`;
return result;
}
export function pythonPath(
typeName: string,
methodName: string,
endpointType: EndpointType,
path: string,
) {
const methodPath = pythonMethodPath(typeName, methodName, endpointType);
if (methodPath === "") { if (methodPath === "") {
return path; return path;
} }
@@ -111,7 +158,24 @@ export function pythonPath(
export function pythonEndpointType( export function pythonEndpointType(
method: Omit<MethodDefinition, "endpointType">, method: Omit<MethodDefinition, "endpointType">,
endpointKind: string | undefined,
): EndpointType { ): EndpointType {
switch (endpointKind) {
case "Function":
return EndpointType.Function;
case "InstanceMethod":
return EndpointType.Method;
case "ClassMethod":
return EndpointType.ClassMethod;
case "StaticMethod":
return EndpointType.StaticMethod;
case "InitMethod":
return EndpointType.Constructor;
case "Class":
return EndpointType.Class;
}
// Legacy behavior for when the kind column is missing.
if ( if (
method.methodParameters.startsWith("(self,") || method.methodParameters.startsWith("(self,") ||
method.methodParameters === "(self)" method.methodParameters === "(self)"
@@ -120,3 +184,12 @@ export function pythonEndpointType(
} }
return EndpointType.Function; return EndpointType.Function;
} }
export function hasPythonSelfArgument(endpointType: EndpointType): boolean {
// Instance methods and class methods both use `Argument[self]` for the first parameter. The first
// parameter after self is called `Argument[0]`.
return (
endpointType === EndpointType.Method ||
endpointType === EndpointType.ClassMethod
);
}

View File

@@ -4,44 +4,48 @@ import { Mode } from "../../shared/mode";
import type { MethodArgument } from "../../method"; import type { MethodArgument } from "../../method";
import { EndpointType, getArgumentsList } from "../../method"; import { EndpointType, getArgumentsList } from "../../method";
import { import {
parsePythonAccessPath, hasPythonSelfArgument,
parsePythonTypeAndPath,
pythonEndpointType, pythonEndpointType,
pythonMethodPath, pythonMethodPath,
pythonMethodSignature, pythonMethodSignature,
pythonPath, pythonPath,
pythonType,
} from "./access-paths"; } from "./access-paths";
export const python: ModelsAsDataLanguage = { export const python: ModelsAsDataLanguage = {
availableModes: [Mode.Framework], availableModes: [Mode.Framework],
createMethodSignature: ({ typeName, methodName }) => createMethodSignature: ({ typeName, methodName }) =>
`${typeName}#${methodName}`, `${typeName}#${methodName}`,
endpointTypeForEndpoint: (method) => pythonEndpointType(method), endpointTypeForEndpoint: (method, endpointKind) =>
pythonEndpointType(method, endpointKind),
predicates: { predicates: {
source: { source: {
extensiblePredicate: sharedExtensiblePredicates.source, extensiblePredicate: sharedExtensiblePredicates.source,
supportedKinds: sharedKinds.source, supportedKinds: sharedKinds.source,
supportedEndpointTypes: [EndpointType.Method, EndpointType.Function], supportedEndpointTypes: [
EndpointType.Method,
EndpointType.Function,
EndpointType.Constructor,
EndpointType.ClassMethod,
EndpointType.StaticMethod,
],
// extensible predicate sourceModel( // extensible predicate sourceModel(
// string type, string path, string kind // string type, string path, string kind
// ); // );
generateMethodDefinition: (method) => [ generateMethodDefinition: (method) => [
method.packageName, pythonType(method.packageName, method.typeName, method.endpointType),
pythonPath( pythonPath(method.methodName, method.output),
method.typeName,
method.methodName,
method.endpointType,
method.output,
),
method.kind, method.kind,
], ],
readModeledMethod: (row) => { readModeledMethod: (row) => {
const packageName = row[0] as string;
const { const {
packageName,
typeName, typeName,
methodName, methodName,
endpointType, endpointType,
path: output, path: output,
} = parsePythonAccessPath(row[1] as string); } = parsePythonTypeAndPath(row[0] as string, row[1] as string);
return { return {
type: "source", type: "source",
output, output,
@@ -59,30 +63,31 @@ export const python: ModelsAsDataLanguage = {
sink: { sink: {
extensiblePredicate: sharedExtensiblePredicates.sink, extensiblePredicate: sharedExtensiblePredicates.sink,
supportedKinds: sharedKinds.sink, supportedKinds: sharedKinds.sink,
supportedEndpointTypes: [EndpointType.Method, EndpointType.Function], supportedEndpointTypes: [
EndpointType.Method,
EndpointType.Function,
EndpointType.Constructor,
EndpointType.ClassMethod,
EndpointType.StaticMethod,
],
// extensible predicate sinkModel( // extensible predicate sinkModel(
// string type, string path, string kind // string type, string path, string kind
// ); // );
generateMethodDefinition: (method) => { generateMethodDefinition: (method) => {
return [ return [
method.packageName, pythonType(method.packageName, method.typeName, method.endpointType),
pythonPath( pythonPath(method.methodName, method.input),
method.typeName,
method.methodName,
method.endpointType,
method.input,
),
method.kind, method.kind,
]; ];
}, },
readModeledMethod: (row) => { readModeledMethod: (row) => {
const packageName = row[0] as string;
const { const {
packageName,
typeName, typeName,
methodName, methodName,
endpointType, endpointType,
path: input, path: input,
} = parsePythonAccessPath(row[1] as string); } = parsePythonTypeAndPath(row[0] as string, row[1] as string);
return { return {
type: "sink", type: "sink",
input, input,
@@ -100,25 +105,26 @@ export const python: ModelsAsDataLanguage = {
summary: { summary: {
extensiblePredicate: sharedExtensiblePredicates.summary, extensiblePredicate: sharedExtensiblePredicates.summary,
supportedKinds: sharedKinds.summary, supportedKinds: sharedKinds.summary,
supportedEndpointTypes: [EndpointType.Method, EndpointType.Function], supportedEndpointTypes: [
EndpointType.Method,
EndpointType.Function,
EndpointType.Constructor,
EndpointType.ClassMethod,
EndpointType.StaticMethod,
],
// extensible predicate summaryModel( // extensible predicate summaryModel(
// string type, string path, string input, string output, string kind // string type, string path, string input, string output, string kind
// ); // );
generateMethodDefinition: (method) => [ generateMethodDefinition: (method) => [
method.packageName, pythonType(method.packageName, method.typeName, method.endpointType),
pythonMethodPath( pythonMethodPath(method.methodName),
method.typeName,
method.methodName,
method.endpointType,
),
method.input, method.input,
method.output, method.output,
method.kind, method.kind,
], ],
readModeledMethod: (row) => { readModeledMethod: (row) => {
const packageName = row[0] as string; const { packageName, typeName, methodName, endpointType, path } =
const { typeName, methodName, endpointType, path } = parsePythonTypeAndPath(row[0] as string, row[1] as string);
parsePythonAccessPath(row[1] as string);
if (path !== "") { if (path !== "") {
throw new Error("Summary path must be a method"); throw new Error("Summary path must be a method");
} }
@@ -144,18 +150,13 @@ export const python: ModelsAsDataLanguage = {
// string type, string path, string kind // string type, string path, string kind
// ); // );
generateMethodDefinition: (method) => [ generateMethodDefinition: (method) => [
method.packageName, pythonType(method.packageName, method.typeName, method.endpointType),
pythonMethodPath( pythonMethodPath(method.methodName),
method.typeName,
method.methodName,
method.endpointType,
),
method.kind, method.kind,
], ],
readModeledMethod: (row) => { readModeledMethod: (row) => {
const packageName = row[0] as string; const { packageName, typeName, methodName, endpointType, path } =
const { typeName, methodName, endpointType, path } = parsePythonTypeAndPath(row[0] as string, row[1] as string);
parsePythonAccessPath(row[1] as string);
if (path !== "") { if (path !== "") {
throw new Error("Neutral path must be a method"); throw new Error("Neutral path must be a method");
} }
@@ -172,25 +173,46 @@ export const python: ModelsAsDataLanguage = {
}; };
}, },
}, },
type: {
extensiblePredicate: "typeModel",
// extensible predicate typeModel(string type1, string type2, string path);
generateMethodDefinition: (method) => [
method.relatedTypeName,
pythonType(method.packageName, method.typeName, method.endpointType),
pythonPath(method.methodName, method.path),
],
readModeledMethod: (row) => {
const { packageName, typeName, methodName, endpointType, path } =
parsePythonTypeAndPath(row[1] as string, row[2] as string);
return {
type: "type",
relatedTypeName: row[0] as string,
path,
signature: pythonMethodSignature(typeName, methodName),
endpointType,
packageName,
typeName,
methodName,
methodParameters: "",
};
},
},
}, },
getArgumentOptions: (method) => { getArgumentOptions: (method) => {
// Argument and Parameter are equivalent in Python, but we'll use Argument in the model editor // Argument and Parameter are equivalent in Python, but we'll use Argument in the model editor
const argumentsList = getArgumentsList(method.methodParameters).map( const argumentsList = getArgumentsList(method.methodParameters).map(
(argument, index): MethodArgument => { (argument, index): MethodArgument => {
if ( if (hasPythonSelfArgument(method.endpointType) && index === 0) {
method.endpointType === EndpointType.Method &&
argument === "self" &&
index === 0
) {
return { return {
path: "Argument[self]", path: "Argument[self]",
label: "Argument[self]: self", label: `Argument[self]: ${argument}`,
}; };
} }
// If this is a method, self does not count as an argument index, so we // If this endpoint has a self argument, self does not count as an argument index so we
// should start at 0 for the second argument // should start at 0 for the second argument
if (method.endpointType === EndpointType.Method) { if (hasPythonSelfArgument(method.endpointType)) {
index -= 1; index -= 1;
} }

View File

@@ -29,6 +29,8 @@ export enum EndpointType {
Method = "method", Method = "method",
Constructor = "constructor", Constructor = "constructor",
Function = "function", Function = "function",
StaticMethod = "staticMethod",
ClassMethod = "classMethod",
} }
export interface MethodDefinition { export interface MethodDefinition {

View File

@@ -17,6 +17,7 @@ export type Query = {
* - libraryVersion: the version of the library that contains the external API. This is a string and can be empty if the version cannot be determined. * - libraryVersion: the version of the library that contains the external API. This is a string and can be empty if the version cannot be determined.
* - type: the modeled kind of the method, either "sink", "source", "summary", or "neutral" * - type: the modeled kind of the method, either "sink", "source", "summary", or "neutral"
* - classification: the classification of the use of the method, either "source", "test", "generated", or "unknown" * - classification: the classification of the use of the method, either "source", "test", "generated", or "unknown"
* - kind: the kind of the endpoint, language-specific, e.g. "method" or "function"
*/ */
applicationModeQuery: string; applicationModeQuery: string;
/** /**
@@ -32,6 +33,7 @@ export type Query = {
* - supported: whether this method is modeled. This should be a string representation of a boolean to satify the result pattern for a problem query. * - supported: whether this method is modeled. This should be a string representation of a boolean to satify the result pattern for a problem query.
* - libraryName: the name of the file or library that contains the method. This is a string and usually the basename of a file. * - libraryName: the name of the file or library that contains the method. This is a string and usually the basename of a file.
* - type: the modeled kind of the method, either "sink", "source", "summary", or "neutral" * - type: the modeled kind of the method, either "sink", "source", "summary", or "neutral"
* - kind: the kind of the endpoint, language-specific, e.g. "method" or "function"
*/ */
frameworkModeQuery: string; frameworkModeQuery: string;
dependencies?: { dependencies?: {
@@ -50,6 +52,7 @@ export type ApplicationModeTuple = [
string, string,
ModeledMethodType, ModeledMethodType,
CallClassification, CallClassification,
string | BqrsEntityValue | undefined,
]; ];
export type FrameworkModeTuple = [ export type FrameworkModeTuple = [
@@ -61,4 +64,5 @@ export type FrameworkModeTuple = [
boolean, boolean,
string, string,
ModeledMethodType, ModeledMethodType,
string | BqrsEntityValue | undefined,
]; ];

View File

@@ -9,20 +9,16 @@ export const SUPPORTED_LANGUAGES: QueryLanguage[] = [
QueryLanguage.Java, QueryLanguage.Java,
QueryLanguage.CSharp, QueryLanguage.CSharp,
QueryLanguage.Ruby, QueryLanguage.Ruby,
QueryLanguage.Python,
]; ];
export function isSupportedLanguage( export function isSupportedLanguage(
language: QueryLanguage, language: QueryLanguage,
modelConfig: ModelConfig, _modelConfig: ModelConfig,
) { ) {
if (SUPPORTED_LANGUAGES.includes(language)) { if (SUPPORTED_LANGUAGES.includes(language)) {
return true; return true;
} }
if (language === QueryLanguage.Python) {
// Python is only enabled when the config setting is set
return modelConfig.enablePython;
}
return false; return false;
} }

View File

@@ -7,6 +7,7 @@ import {
getActionsWorkflowRunUrl as getVariantAnalysisActionsWorkflowRunUrl, getActionsWorkflowRunUrl as getVariantAnalysisActionsWorkflowRunUrl,
} from "../variant-analysis/shared/variant-analysis"; } from "../variant-analysis/shared/variant-analysis";
import type { QueryLanguage } from "../common/query-language"; import type { QueryLanguage } from "../common/query-language";
import { getGitHubInstanceUrl } from "../config";
export type QueryHistoryInfo = LocalQueryInfo | VariantAnalysisHistoryItem; export type QueryHistoryInfo = LocalQueryInfo | VariantAnalysisHistoryItem;
@@ -79,5 +80,8 @@ export function buildRepoLabel(item: VariantAnalysisHistoryItem): string {
export function getActionsWorkflowRunUrl( export function getActionsWorkflowRunUrl(
item: VariantAnalysisHistoryItem, item: VariantAnalysisHistoryItem,
): string { ): string {
return getVariantAnalysisActionsWorkflowRunUrl(item.variantAnalysis); return getVariantAnalysisActionsWorkflowRunUrl(
item.variantAnalysis,
getGitHubInstanceUrl(),
);
} }

View File

@@ -240,8 +240,32 @@ export class QueryServerClient extends DisposableObject {
this.nextCallback = 0; this.nextCallback = 0;
this.nextProgress = 0; this.nextProgress = 0;
this.progressCallbacks = {}; this.progressCallbacks = {};
child.on("close", () => {
this.restartQueryServerOnFailure(); // 'exit' may or may not fire after 'error' event, so we want to guard against restarting the
// query server twice if both events fire.
let wasExitOrErrorHandled = false;
child.on("error", (err: Error) => {
if (!wasExitOrErrorHandled) {
void this.logger.log(`Query server terminated with error: ${err}.`);
this.restartQueryServerOnFailure();
wasExitOrErrorHandled = true;
}
});
child.on("exit", (code: number, signal: string) => {
if (!wasExitOrErrorHandled) {
if (code !== null) {
void this.logger.log(
`Query server terminated with exit code: ${code}.`,
);
}
if (signal !== null) {
void this.logger.log(
`Query server terminated due to receipt of signal: ${signal}.`,
);
}
this.restartQueryServerOnFailure();
wasExitOrErrorHandled = true;
}
}); });
} }

View File

@@ -31,6 +31,8 @@ import { generateSummarySymbolsFile } from "./log-insights/summary-parser";
import { getErrorMessage } from "./common/helpers-pure"; import { getErrorMessage } from "./common/helpers-pure";
import { createHash } from "crypto"; import { createHash } from "crypto";
import { QueryOutputDir } from "./local-queries/query-output-dir"; import { QueryOutputDir } from "./local-queries/query-output-dir";
import { progressUpdate } from "./common/vscode/progress";
import type { ProgressCallback } from "./common/vscode/progress";
/** /**
* run-queries.ts * run-queries.ts
@@ -519,6 +521,7 @@ export async function createInitialQueryInfo(
export async function generateEvalLogSummaries( export async function generateEvalLogSummaries(
cliServer: CodeQLCliServer, cliServer: CodeQLCliServer,
outputDir: QueryOutputDir, outputDir: QueryOutputDir,
progress: ProgressCallback,
): Promise<EvaluatorLogPaths | undefined> { ): Promise<EvaluatorLogPaths | undefined> {
const log = outputDir.evalLogPath; const log = outputDir.evalLogPath;
if (!(await pathExists(log))) { if (!(await pathExists(log))) {
@@ -527,6 +530,7 @@ export async function generateEvalLogSummaries(
} }
let humanReadableSummary: string | undefined = undefined; let humanReadableSummary: string | undefined = undefined;
let endSummary: string | undefined = undefined; let endSummary: string | undefined = undefined;
progress(progressUpdate(1, 3, "Generating evaluator log summary"));
if (await generateHumanReadableLogSummary(cliServer, outputDir)) { if (await generateHumanReadableLogSummary(cliServer, outputDir)) {
humanReadableSummary = outputDir.evalLogSummaryPath; humanReadableSummary = outputDir.evalLogSummaryPath;
endSummary = outputDir.evalLogEndSummaryPath; endSummary = outputDir.evalLogEndSummaryPath;
@@ -535,12 +539,21 @@ export async function generateEvalLogSummaries(
let summarySymbols: string | undefined = undefined; let summarySymbols: string | undefined = undefined;
if (isCanary()) { if (isCanary()) {
// Generate JSON summary for viewer. // Generate JSON summary for viewer.
progress(progressUpdate(2, 3, "Generating JSON log summary"));
jsonSummary = outputDir.jsonEvalLogSummaryPath; jsonSummary = outputDir.jsonEvalLogSummaryPath;
await cliServer.generateJsonLogSummary(log, jsonSummary); await cliServer.generateJsonLogSummary(log, jsonSummary);
if (humanReadableSummary !== undefined) { if (humanReadableSummary !== undefined) {
summarySymbols = outputDir.evalLogSummarySymbolsPath; summarySymbols = outputDir.evalLogSummarySymbolsPath;
await generateSummarySymbolsFile(humanReadableSummary, summarySymbols); if (
!(await cliServer.cliConstraints.supportsGenerateSummarySymbolMap())
) {
// We're using an old CLI that cannot generate the summary symbols file while generating the
// human-readable log summary. As a fallback, create it by parsing the human-readable
// summary.
progress(progressUpdate(3, 3, "Generating summary symbols file"));
await generateSummarySymbolsFile(humanReadableSummary, summarySymbols);
}
} }
} }

View File

@@ -15,6 +15,7 @@ type ErrorResponse = {
export function handleRequestError( export function handleRequestError(
e: RequestError, e: RequestError,
githubUrl: URL,
logger: NotificationLogger, logger: NotificationLogger,
): boolean { ): boolean {
if (e.status !== 422) { if (e.status !== 422) {
@@ -60,9 +61,12 @@ export function handleRequestError(
return false; return false;
} }
const createBranchURL = `https://github.com/${ const createBranchURL = new URL(
missingDefaultBranchError.repository `/${
}/new/${encodeURIComponent(missingDefaultBranchError.default_branch)}`; missingDefaultBranchError.repository
}/new/${encodeURIComponent(missingDefaultBranchError.default_branch)}`,
githubUrl,
).toString();
void showAndLogErrorMessage( void showAndLogErrorMessage(
logger, logger,

View File

@@ -1,18 +1,10 @@
import { import { hasEnterpriseUri, hasGhecDrUri } from "../config";
VARIANT_ANALYSIS_ENABLE_GHEC_DR,
hasEnterpriseUri,
hasGhecDrUri,
} from "../config";
/** /**
* Determines whether MRVA should be enabled or not for the current GitHub host. * Determines whether MRVA should be enabled or not for the current GitHub host.
* MRVA is enabled on github.com and GHEC-DR.
* This is based on the `github-enterprise.uri` setting. * This is based on the `github-enterprise.uri` setting.
*/ */
export function isVariantAnalysisEnabledForGitHubHost(): boolean { export function isVariantAnalysisEnabledForGitHubHost(): boolean {
return ( return !hasEnterpriseUri() || hasGhecDrUri();
// MRVA is always enabled on github.com
!hasEnterpriseUri() ||
// MRVA can be enabled on GHEC-DR using a feature flag
(hasGhecDrUri() && !!VARIANT_ANALYSIS_ENABLE_GHEC_DR.getValue<boolean>())
);
} }

View File

@@ -295,10 +295,14 @@ export function getSkippedRepoCount(
export function getActionsWorkflowRunUrl( export function getActionsWorkflowRunUrl(
variantAnalysis: VariantAnalysis, variantAnalysis: VariantAnalysis,
githubUrl: URL,
): string { ): string {
const { const {
actionsWorkflowRunId, actionsWorkflowRunId,
controllerRepo: { fullName }, controllerRepo: { fullName },
} = variantAnalysis; } = variantAnalysis;
return `https://github.com/${fullName}/actions/runs/${actionsWorkflowRunId}`; return new URL(
`/${fullName}/actions/runs/${actionsWorkflowRunId}`,
githubUrl,
).toString();
} }

View File

@@ -78,7 +78,6 @@ import {
REPO_STATES_FILENAME, REPO_STATES_FILENAME,
writeRepoStates, writeRepoStates,
} from "./repo-states-store"; } from "./repo-states-store";
import { GITHUB_AUTH_PROVIDER_ID } from "../common/vscode/authentication";
import { FetchError } from "node-fetch"; import { FetchError } from "node-fetch";
import { import {
showAndLogExceptionWithTelemetry, showAndLogExceptionWithTelemetry,
@@ -98,6 +97,7 @@ import { findVariantAnalysisQlPackRoot } from "./ql";
import { resolveCodeScanningQueryPack } from "./code-scanning-pack"; import { resolveCodeScanningQueryPack } from "./code-scanning-pack";
import { isSarifResultsQueryKind } from "../common/query-metadata"; import { isSarifResultsQueryKind } from "../common/query-metadata";
import { isVariantAnalysisEnabledForGitHubHost } from "./ghec-dr"; import { isVariantAnalysisEnabledForGitHubHost } from "./ghec-dr";
import type { VariantAnalysisConfig } from "../config";
import { getEnterpriseUri } from "../config"; import { getEnterpriseUri } from "../config";
const maxRetryCount = 3; const maxRetryCount = 3;
@@ -158,6 +158,7 @@ export class VariantAnalysisManager
private readonly storagePath: string, private readonly storagePath: string,
private readonly variantAnalysisResultsManager: VariantAnalysisResultsManager, private readonly variantAnalysisResultsManager: VariantAnalysisResultsManager,
private readonly dbManager: DbManager, private readonly dbManager: DbManager,
private readonly config: VariantAnalysisConfig,
) { ) {
super(); super();
this.variantAnalysisMonitor = this.push( this.variantAnalysisMonitor = this.push(
@@ -426,7 +427,10 @@ export class VariantAnalysisManager
); );
} catch (e: unknown) { } catch (e: unknown) {
// If the error is handled by the handleRequestError function, we don't need to throw // If the error is handled by the handleRequestError function, we don't need to throw
if (e instanceof RequestError && handleRequestError(e, this.app.logger)) { if (
e instanceof RequestError &&
handleRequestError(e, this.config.githubUrl, this.app.logger)
) {
return undefined; return undefined;
} }
@@ -745,7 +749,7 @@ export class VariantAnalysisManager
private async onDidChangeSessions( private async onDidChangeSessions(
event: AuthenticationSessionsChangeEvent, event: AuthenticationSessionsChangeEvent,
): Promise<void> { ): Promise<void> {
if (event.provider.id !== GITHUB_AUTH_PROVIDER_ID) { if (event.provider.id !== this.app.credentials.authProviderId) {
return; return;
} }
@@ -951,7 +955,10 @@ export class VariantAnalysisManager
throw new Error(`No variant analysis with id: ${variantAnalysisId}`); throw new Error(`No variant analysis with id: ${variantAnalysisId}`);
} }
const actionsWorkflowRunUrl = getActionsWorkflowRunUrl(variantAnalysis); const actionsWorkflowRunUrl = getActionsWorkflowRunUrl(
variantAnalysis,
this.config.githubUrl,
);
await this.app.commands.execute( await this.app.commands.execute(
"vscode.open", "vscode.open",

View File

@@ -23,6 +23,7 @@ import { DisposableObject } from "../common/disposable-object";
import { EventEmitter } from "vscode"; import { EventEmitter } from "vscode";
import { unzipToDirectoryConcurrently } from "../common/unzip-concurrently"; import { unzipToDirectoryConcurrently } from "../common/unzip-concurrently";
import { readRepoTask, writeRepoTask } from "./repo-tasks-store"; import { readRepoTask, writeRepoTask } from "./repo-tasks-store";
import type { VariantAnalysisConfig } from "../config";
type CacheKey = `${number}/${string}`; type CacheKey = `${number}/${string}`;
@@ -62,6 +63,7 @@ export class VariantAnalysisResultsManager extends DisposableObject {
constructor( constructor(
private readonly cliServer: CodeQLCliServer, private readonly cliServer: CodeQLCliServer,
private readonly config: VariantAnalysisConfig,
private readonly logger: Logger, private readonly logger: Logger,
) { ) {
super(); super();
@@ -192,7 +194,7 @@ export class VariantAnalysisResultsManager extends DisposableObject {
throw new Error("Missing database commit SHA"); throw new Error("Missing database commit SHA");
} }
const fileLinkPrefix = this.createGitHubDotcomFileLinkPrefix( const fileLinkPrefix = this.createGitHubFileLinkPrefix(
repoTask.repository.fullName, repoTask.repository.fullName,
repoTask.databaseCommitSha, repoTask.databaseCommitSha,
); );
@@ -283,11 +285,11 @@ export class VariantAnalysisResultsManager extends DisposableObject {
return join(variantAnalysisStoragePath, fullName); return join(variantAnalysisStoragePath, fullName);
} }
private createGitHubDotcomFileLinkPrefix( private createGitHubFileLinkPrefix(fullName: string, sha: string): string {
fullName: string, return new URL(
sha: string, `/${fullName}/blob/${sha}`,
): string { this.config.githubUrl,
return `https://github.com/${fullName}/blob/${sha}`; ).toString();
} }
public removeAnalysisResults(variantAnalysis: VariantAnalysis) { public removeAnalysisResults(variantAnalysis: VariantAnalysis) {

View File

@@ -12,6 +12,18 @@ const ShowPathsLink = styled(VSCodeLink)`
cursor: pointer; cursor: pointer;
`; `;
const Label = styled.span`
color: var(--vscode-descriptionForeground);
margin-left: 10px;
`;
function getShortestPathLength(codeFlows: CodeFlow[]): number {
const allPathLengths = codeFlows
.map((codeFlow) => codeFlow.threadFlows.length)
.flat();
return Math.min(...allPathLengths);
}
export type CodePathsProps = { export type CodePathsProps = {
codeFlows: CodeFlow[]; codeFlows: CodeFlow[];
ruleDescription: string; ruleDescription: string;
@@ -40,6 +52,7 @@ export const CodePaths = ({
return ( return (
<> <>
<ShowPathsLink onClick={onShowPathsClick}>Show paths</ShowPathsLink> <ShowPathsLink onClick={onShowPathsClick}>Show paths</ShowPathsLink>
<Label>(Shortest: {getShortestPathLength(codeFlows)})</Label>
</> </>
); );
}; };

View File

@@ -24,6 +24,12 @@ describe(CodePaths.name, () => {
expect(screen.getByText("Show paths")).toBeInTheDocument(); expect(screen.getByText("Show paths")).toBeInTheDocument();
}); });
it("renders shortest path for code flows", () => {
render();
expect(screen.getByText("(Shortest: 1)")).toBeInTheDocument();
});
it("posts extension message when 'show paths' link clicked", async () => { it("posts extension message when 'show paths' link clicked", async () => {
render(); render();

View File

@@ -5,7 +5,9 @@ import type {
ToCompareViewMessage, ToCompareViewMessage,
SetComparisonsMessage, SetComparisonsMessage,
SetComparisonQueryInfoMessage, SetComparisonQueryInfoMessage,
UserSettings,
} from "../../common/interface-types"; } from "../../common/interface-types";
import { DEFAULT_USER_SETTINGS } from "../../common/interface-types";
import CompareSelector from "./CompareSelector"; import CompareSelector from "./CompareSelector";
import { vscode } from "../vscode-api"; import { vscode } from "../vscode-api";
import CompareTable from "./CompareTable"; import CompareTable from "./CompareTable";
@@ -31,6 +33,9 @@ export function Compare(_: Record<string, never>): React.JSX.Element {
const [comparison, setComparison] = useState<SetComparisonsMessage | null>( const [comparison, setComparison] = useState<SetComparisonsMessage | null>(
null, null,
); );
const [userSettings, setUserSettings] = useState<UserSettings>(
DEFAULT_USER_SETTINGS,
);
const message = comparison?.message || "Empty comparison"; const message = comparison?.message || "Empty comparison";
const hasRows = const hasRows =
@@ -48,6 +53,9 @@ export function Compare(_: Record<string, never>): React.JSX.Element {
case "setComparisons": case "setComparisons":
setComparison(msg); setComparison(msg);
break; break;
case "setUserSettings":
setUserSettings(msg.userSettings);
break;
default: default:
assertNever(msg); assertNever(msg);
} }
@@ -85,6 +93,7 @@ export function Compare(_: Record<string, never>): React.JSX.Element {
<CompareTable <CompareTable
queryInfo={queryInfo} queryInfo={queryInfo}
comparison={comparison} comparison={comparison}
userSettings={userSettings}
></CompareTable> ></CompareTable>
) : ( ) : (
<Message>{message}</Message> <Message>{message}</Message>

View File

@@ -1,6 +1,7 @@
import type { import type {
SetComparisonQueryInfoMessage, SetComparisonQueryInfoMessage,
SetComparisonsMessage, SetComparisonsMessage,
UserSettings,
} from "../../common/interface-types"; } from "../../common/interface-types";
import { className } from "../results/result-table-utils"; import { className } from "../results/result-table-utils";
import { vscode } from "../vscode-api"; import { vscode } from "../vscode-api";
@@ -12,6 +13,7 @@ import { InterpretedCompareResultTable } from "./InterpretedCompareResultTable";
interface Props { interface Props {
queryInfo: SetComparisonQueryInfoMessage; queryInfo: SetComparisonQueryInfoMessage;
comparison: SetComparisonsMessage; comparison: SetComparisonsMessage;
userSettings: UserSettings;
} }
const OpenButton = styled(TextButton)` const OpenButton = styled(TextButton)`
@@ -29,7 +31,11 @@ const Table = styled.table`
} }
`; `;
export default function CompareTable({ queryInfo, comparison }: Props) { export default function CompareTable({
queryInfo,
comparison,
userSettings,
}: Props) {
const result = comparison.result!; const result = comparison.result!;
async function openQuery(kind: "from" | "to") { async function openQuery(kind: "from" | "to") {
@@ -78,6 +84,7 @@ export default function CompareTable({ queryInfo, comparison }: Props) {
{result.kind === "interpreted" && ( {result.kind === "interpreted" && (
<InterpretedCompareResultTable <InterpretedCompareResultTable
results={result.from} results={result.from}
userSettings={userSettings}
databaseUri={queryInfo.databaseUri} databaseUri={queryInfo.databaseUri}
sourceLocationPrefix={result.sourceLocationPrefix} sourceLocationPrefix={result.sourceLocationPrefix}
/> />
@@ -96,6 +103,7 @@ export default function CompareTable({ queryInfo, comparison }: Props) {
{result.kind === "interpreted" && ( {result.kind === "interpreted" && (
<InterpretedCompareResultTable <InterpretedCompareResultTable
results={result.to} results={result.to}
userSettings={userSettings}
databaseUri={queryInfo.databaseUri} databaseUri={queryInfo.databaseUri}
sourceLocationPrefix={result.sourceLocationPrefix} sourceLocationPrefix={result.sourceLocationPrefix}
/> />

View File

@@ -1,27 +1,32 @@
import type { Result } from "sarif"; import type { Result, Run } from "sarif";
import { AlertTable } from "../results/AlertTable"; import { AlertTable } from "../results/AlertTable";
import type { UserSettings } from "../../common/interface-types";
type Props = { type Props = {
results: Result[]; results: Result[];
databaseUri: string; databaseUri: string;
sourceLocationPrefix: string; sourceLocationPrefix: string;
run?: Run;
userSettings: UserSettings;
}; };
export const InterpretedCompareResultTable = ({ export const InterpretedCompareResultTable = ({
results, results,
databaseUri, databaseUri,
sourceLocationPrefix, sourceLocationPrefix,
userSettings,
}: Props) => { }: Props) => {
return ( return (
<AlertTable <AlertTable
results={results} results={results}
userSettings={userSettings}
databaseUri={databaseUri} databaseUri={databaseUri}
sourceLocationPrefix={sourceLocationPrefix} sourceLocationPrefix={sourceLocationPrefix}
header={ header={
<thead> <thead>
<tr> <tr>
<th colSpan={2}></th> <th colSpan={2}></th>
<th className={`vscode-codeql__alert-message-cell`} colSpan={3}> <th className={`vscode-codeql__alert-message-cell`} colSpan={4}>
Message Message
</th> </th>
</tr> </tr>

View File

@@ -1,4 +1,4 @@
import type { Location, Result } from "sarif"; import type { Location, Result, Run } from "sarif";
import type { import type {
PathNode, PathNode,
Result as ResultKeysResult, Result as ResultKeysResult,
@@ -7,7 +7,7 @@ import type {
import { getPath, getPathNode, getResult, keyToString } from "./result-keys"; import { getPath, getPathNode, getResult, keyToString } from "./result-keys";
import { className, jumpToLocation } from "./result-table-utils"; import { className, jumpToLocation } from "./result-table-utils";
import { onNavigation } from "./navigation"; import { onNavigation } from "./navigation";
import type { NavigateMsg } from "../../common/interface-types"; import type { NavigateMsg, UserSettings } from "../../common/interface-types";
import { NavigationDirection } from "../../common/interface-types"; import { NavigationDirection } from "../../common/interface-types";
import { isNoLocation, parseSarifLocation } from "../../common/sarif-utils"; import { isNoLocation, parseSarifLocation } from "../../common/sarif-utils";
import { sendTelemetry } from "../common/telemetry"; import { sendTelemetry } from "../common/telemetry";
@@ -21,6 +21,8 @@ type Props = {
results: Result[]; results: Result[];
databaseUri: string; databaseUri: string;
sourceLocationPrefix: string; sourceLocationPrefix: string;
run?: Run;
userSettings: UserSettings;
numTruncatedResults?: number; numTruncatedResults?: number;
header: ReactNode; header: ReactNode;
@@ -31,6 +33,8 @@ export function AlertTable({
results, results,
databaseUri, databaseUri,
sourceLocationPrefix, sourceLocationPrefix,
run,
userSettings,
numTruncatedResults, numTruncatedResults,
header, header,
noResults, noResults,
@@ -202,6 +206,8 @@ export function AlertTable({
selectedItem={selectedItem} selectedItem={selectedItem}
selectedItemRef={selectedItemRef} selectedItemRef={selectedItemRef}
databaseUri={databaseUri} databaseUri={databaseUri}
run={run}
userSettings={userSettings}
sourceLocationPrefix={sourceLocationPrefix} sourceLocationPrefix={sourceLocationPrefix}
updateSelectionCallback={updateSelectionCallback} updateSelectionCallback={updateSelectionCallback}
toggleExpanded={toggle} toggleExpanded={toggle}

View File

@@ -45,7 +45,7 @@ export function AlertTableHeader({
<th colSpan={2}></th> <th colSpan={2}></th>
<th <th
className={`${sortClass()} vscode-codeql__alert-message-cell`} className={`${sortClass()} vscode-codeql__alert-message-cell`}
colSpan={3} colSpan={4}
onClick={toggleSortStateForColumn} onClick={toggleSortStateForColumn}
> >
Message Message

View File

@@ -1,4 +1,4 @@
import type { ThreadFlowLocation } from "sarif"; import type { ThreadFlowLocation, Run } from "sarif";
import type { import type {
PathNode, PathNode,
Result as ResultKeysResult, Result as ResultKeysResult,
@@ -9,6 +9,8 @@ import { SarifLocation } from "./locations/SarifLocation";
import { selectableZebraStripe } from "./result-table-utils"; import { selectableZebraStripe } from "./result-table-utils";
import { useCallback, useMemo } from "react"; import { useCallback, useMemo } from "react";
import { VerticalRule } from "../common/VerticalRule"; import { VerticalRule } from "../common/VerticalRule";
import type { UserSettings } from "../../common/interface-types";
import { TaxaLocations } from "./locations/TaxaLocations";
interface Props { interface Props {
step: ThreadFlowLocation; step: ThreadFlowLocation;
@@ -19,6 +21,8 @@ interface Props {
selectedItemRef: React.RefObject<HTMLTableRowElement>; selectedItemRef: React.RefObject<HTMLTableRowElement>;
databaseUri: string; databaseUri: string;
sourceLocationPrefix: string; sourceLocationPrefix: string;
run?: Run;
userSettings: UserSettings;
updateSelectionCallback: ( updateSelectionCallback: (
resultKey: PathNode | ResultKeysResult | undefined, resultKey: PathNode | ResultKeysResult | undefined,
) => void; ) => void;
@@ -34,6 +38,8 @@ export function AlertTablePathNodeRow(props: Props) {
selectedItemRef, selectedItemRef,
databaseUri, databaseUri,
sourceLocationPrefix, sourceLocationPrefix,
run,
userSettings,
updateSelectionCallback, updateSelectionCallback,
} = props; } = props;
@@ -86,6 +92,23 @@ export function AlertTablePathNodeRow(props: Props) {
"[no location]" "[no location]"
)} )}
</td> </td>
<td
{...selectableZebraStripe(
isSelected,
zebraIndex,
"vscode-codeql__taxa-cell",
)}
>
{userSettings.shouldShowProvenance ? (
<div className="vscode-codeql__taxa-cell-contents">
<TaxaLocations
taxa={step.taxa}
run={run}
onClick={handleSarifLocationClicked}
/>
</div>
) : null}
</td>
<td <td
{...selectableZebraStripe( {...selectableZebraStripe(
isSelected, isSelected,

View File

@@ -1,4 +1,4 @@
import type { ThreadFlow } from "sarif"; import type { Run, ThreadFlow } from "sarif";
import type { import type {
PathNode, PathNode,
Result as ResultKeysResult, Result as ResultKeysResult,
@@ -10,6 +10,7 @@ import { AlertTablePathNodeRow } from "./AlertTablePathNodeRow";
import { AlertTableDropdownIndicatorCell } from "./AlertTableDropdownIndicatorCell"; import { AlertTableDropdownIndicatorCell } from "./AlertTableDropdownIndicatorCell";
import { useCallback, useMemo } from "react"; import { useCallback, useMemo } from "react";
import { VerticalRule } from "../common/VerticalRule"; import { VerticalRule } from "../common/VerticalRule";
import type { UserSettings } from "../../common/interface-types";
interface Props { interface Props {
path: ThreadFlow; path: ThreadFlow;
@@ -20,6 +21,8 @@ interface Props {
selectedItemRef: React.RefObject<HTMLTableRowElement>; selectedItemRef: React.RefObject<HTMLTableRowElement>;
databaseUri: string; databaseUri: string;
sourceLocationPrefix: string; sourceLocationPrefix: string;
run?: Run;
userSettings: UserSettings;
updateSelectionCallback: ( updateSelectionCallback: (
resultKey: PathNode | ResultKeysResult | undefined, resultKey: PathNode | ResultKeysResult | undefined,
) => void; ) => void;
@@ -61,7 +64,7 @@ export function AlertTablePathRow(props: Props) {
expanded={currentPathExpanded} expanded={currentPathExpanded}
onClick={handleDropdownClick} onClick={handleDropdownClick}
/> />
<td className="vscode-codeql__text-center" colSpan={3}> <td className="vscode-codeql__text-center" colSpan={4}>
Path Path
</td> </td>
</tr> </tr>

View File

@@ -1,4 +1,4 @@
import type { Result } from "sarif"; import type { Result, Run } from "sarif";
import type { import type {
PathNode, PathNode,
Result as ResultKeysResult, Result as ResultKeysResult,
@@ -12,6 +12,7 @@ import { useCallback, useMemo } from "react";
import { SarifLocation } from "./locations/SarifLocation"; import { SarifLocation } from "./locations/SarifLocation";
import { SarifMessageWithLocations } from "./locations/SarifMessageWithLocations"; import { SarifMessageWithLocations } from "./locations/SarifMessageWithLocations";
import { AlertTablePathRow } from "./AlertTablePathRow"; import { AlertTablePathRow } from "./AlertTablePathRow";
import type { UserSettings } from "../../common/interface-types";
interface Props { interface Props {
result: Result; result: Result;
@@ -21,6 +22,8 @@ interface Props {
selectedItemRef: React.RefObject<HTMLTableRowElement>; selectedItemRef: React.RefObject<HTMLTableRowElement>;
databaseUri: string; databaseUri: string;
sourceLocationPrefix: string; sourceLocationPrefix: string;
run?: Run;
userSettings: UserSettings;
updateSelectionCallback: ( updateSelectionCallback: (
resultKey: PathNode | ResultKeysResult | undefined, resultKey: PathNode | ResultKeysResult | undefined,
) => void; ) => void;
@@ -90,7 +93,7 @@ export function AlertTableResultRow(props: Props) {
{result.codeFlows === undefined ? ( {result.codeFlows === undefined ? (
<> <>
<td className="vscode-codeql__icon-cell">{info}</td> <td className="vscode-codeql__icon-cell">{info}</td>
<td colSpan={3}>{msg}</td> <td colSpan={4}>{msg}</td>
</> </>
) : ( ) : (
<> <>
@@ -99,7 +102,7 @@ export function AlertTableResultRow(props: Props) {
onClick={handleDropdownClick} onClick={handleDropdownClick}
/> />
<td className="vscode-codeql__icon-cell">{listUnordered}</td> <td className="vscode-codeql__icon-cell">{listUnordered}</td>
<td colSpan={2}>{msg}</td> <td colSpan={3}>{msg}</td>
</> </>
)} )}
<td className="vscode-codeql__location-cell"> <td className="vscode-codeql__location-cell">

View File

@@ -6,7 +6,7 @@ import { AlertTableNoResults } from "./AlertTableNoResults";
import { AlertTableHeader } from "./AlertTableHeader"; import { AlertTableHeader } from "./AlertTableHeader";
export function ResultTable(props: ResultTableProps) { export function ResultTable(props: ResultTableProps) {
const { resultSet } = props; const { resultSet, userSettings } = props;
switch (resultSet.t) { switch (resultSet.t) {
case "RawResultSet": case "RawResultSet":
return <RawTable {...props} resultSet={resultSet.resultSet} />; return <RawTable {...props} resultSet={resultSet.resultSet} />;
@@ -21,6 +21,8 @@ export function ResultTable(props: ResultTableProps) {
sourceLocationPrefix={ sourceLocationPrefix={
resultSet.interpretation.sourceLocationPrefix resultSet.interpretation.sourceLocationPrefix
} }
run={data.runs[0]}
userSettings={userSettings}
numTruncatedResults={resultSet.interpretation.numTruncatedResults} numTruncatedResults={resultSet.interpretation.numTruncatedResults}
header={<AlertTableHeader sortState={data.sortState} />} header={<AlertTableHeader sortState={data.sortState} />}
noResults={ noResults={

View File

@@ -8,6 +8,7 @@ import type {
ResultSet, ResultSet,
ParsedResultSets, ParsedResultSets,
IntoResultsViewMsg, IntoResultsViewMsg,
UserSettings,
} from "../../common/interface-types"; } from "../../common/interface-types";
import { import {
ALERTS_TABLE_NAME, ALERTS_TABLE_NAME,
@@ -33,6 +34,7 @@ interface ResultTablesProps {
rawResultSets: readonly ResultSet[]; rawResultSets: readonly ResultSet[];
interpretation: Interpretation | undefined; interpretation: Interpretation | undefined;
database: DatabaseInfo; database: DatabaseInfo;
userSettings: UserSettings;
metadata?: QueryMetadata; metadata?: QueryMetadata;
resultsPath: string; resultsPath: string;
origResultsPaths: ResultsPaths; origResultsPaths: ResultsPaths;
@@ -94,6 +96,7 @@ export function ResultTables(props: ResultTablesProps) {
interpretation, interpretation,
database, database,
resultsPath, resultsPath,
userSettings,
metadata, metadata,
origResultsPaths, origResultsPaths,
isLoadingNewResults, isLoadingNewResults,
@@ -242,6 +245,7 @@ export function ResultTables(props: ResultTablesProps) {
<ResultTable <ResultTable
key={resultSetName} key={resultSetName}
resultSet={resultSet} resultSet={resultSet}
userSettings={userSettings}
databaseUri={database.databaseUri} databaseUri={database.databaseUri}
resultsPath={resultsPath} resultsPath={resultsPath}
sortState={sortStates.get(resultSetName)} sortState={sortStates.get(resultSetName)}

View File

@@ -9,9 +9,11 @@ import type {
ResultsPaths, ResultsPaths,
ParsedResultSets, ParsedResultSets,
ResultSet, ResultSet,
UserSettings,
} from "../../common/interface-types"; } from "../../common/interface-types";
import { import {
ALERTS_TABLE_NAME, ALERTS_TABLE_NAME,
DEFAULT_USER_SETTINGS,
GRAPH_TABLE_NAME, GRAPH_TABLE_NAME,
} from "../../common/interface-types"; } from "../../common/interface-types";
import { ResultTables } from "./ResultTables"; import { ResultTables } from "./ResultTables";
@@ -77,6 +79,10 @@ export function ResultsApp() {
isExpectingResultsUpdate: true, isExpectingResultsUpdate: true,
}); });
const [userSettings, setUserSettings] = useState<UserSettings>(
DEFAULT_USER_SETTINGS,
);
const updateStateWithNewResultsInfo = useCallback( const updateStateWithNewResultsInfo = useCallback(
(resultsInfo: ResultsInfo): void => { (resultsInfo: ResultsInfo): void => {
let results: Results | null = null; let results: Results | null = null;
@@ -110,6 +116,10 @@ export function ResultsApp() {
const handleMessage = useCallback( const handleMessage = useCallback(
(msg: IntoResultsViewMsg): void => { (msg: IntoResultsViewMsg): void => {
switch (msg.t) { switch (msg.t) {
case "setUserSettings":
setUserSettings(msg.userSettings);
break;
case "setState": case "setState":
updateStateWithNewResultsInfo({ updateStateWithNewResultsInfo({
resultsPath: msg.resultsPath, resultsPath: msg.resultsPath,
@@ -217,6 +227,7 @@ export function ResultsApp() {
? displayedResults.resultsInfo.interpretation ? displayedResults.resultsInfo.interpretation
: undefined : undefined
} }
userSettings={userSettings}
database={displayedResults.results.database} database={displayedResults.results.database}
origResultsPaths={displayedResults.resultsInfo.origResultsPaths} origResultsPaths={displayedResults.resultsInfo.origResultsPaths}
resultsPath={displayedResults.resultsInfo.resultsPath} resultsPath={displayedResults.resultsInfo.resultsPath}

View File

@@ -7,7 +7,7 @@ import type { UrlValueResolvable } from "../../../common/raw-result-types";
interface Props { interface Props {
loc: UrlValueResolvable; loc: UrlValueResolvable;
label: string; label: string;
databaseUri: string; databaseUri: string | undefined;
onClick?: () => void; onClick?: () => void;
} }

View File

@@ -26,17 +26,13 @@ export function Location({
const displayLabel = useMemo(() => convertNonPrintableChars(label), [label]); const displayLabel = useMemo(() => convertNonPrintableChars(label), [label]);
if (loc === undefined) { if (loc === undefined) {
return <NonClickableLocation msg={displayLabel} />; return <NonClickableLocation msg={displayLabel} locationHint={title} />;
} }
if (loc.type === "string") { if (loc.type === "string") {
return <a href={loc.value}>{loc.value}</a>; return <a href={loc.value}>{loc.value}</a>;
} }
if (databaseUri === undefined) {
return <NonClickableLocation msg={displayLabel} locationHint={title} />;
}
return ( return (
<ClickableLocation <ClickableLocation
loc={loc} loc={loc}

View File

@@ -8,7 +8,7 @@ interface Props {
text?: string; text?: string;
loc?: SarifLogLocation; loc?: SarifLogLocation;
sourceLocationPrefix: string; sourceLocationPrefix: string;
databaseUri: string; databaseUri: string | undefined;
onClick: () => void; onClick: () => void;
} }

View File

@@ -0,0 +1,199 @@
import type {
Location as SarifLogLocation,
ArtifactLocation,
PhysicalLocation,
ReportingDescriptorReference,
Run,
ToolComponent,
} from "sarif";
import { SarifLocation } from "./SarifLocation";
/** The definition of a taxon for a data extension model row. */
interface ModelTaxon {
kind: "model";
location: SarifLogLocation;
}
/** A taxon for a built-in model, such as `AdditionalFlowStep`. */
interface BuiltInTaxon {
kind: "string";
text: string;
}
type TaxonDefinition = ModelTaxon | BuiltInTaxon;
/** Resolve an `ArtifactLocation` that might contain a relative reference instead of an absolute
* URI.
*/
function resolveArtifactLocation(
location: ArtifactLocation,
baseUri: URL,
): ArtifactLocation {
if (location.uri === undefined) {
// No URI at all. Just return the original location.
return location;
}
return {
...location,
uri: new URL(location.uri, baseUri).toString(),
};
}
/** Get the URI of the pack's local root directory, if available. */
function getLocalPackUri(extension: ToolComponent): URL | undefined {
if (extension.locations === undefined) {
return undefined;
}
const localPackLocation = extension.locations.find(
(loc) =>
loc.properties !== undefined &&
loc.properties.tags !== undefined &&
loc.properties.tags.includes("CodeQL/LocalPackRoot"),
);
if (localPackLocation === undefined || localPackLocation.uri === undefined) {
return undefined;
}
return new URL(localPackLocation.uri);
}
/** Resolve a `ReportingDescriptorReference` to the built-in taxon it refers to, or `undefined` if
* it is not a built-in taxon.
*/
function resolveBuiltInTaxon(
taxonRef: ReportingDescriptorReference,
): BuiltInTaxon | undefined {
if (
taxonRef.id !== undefined &&
taxonRef.index === undefined &&
taxonRef.toolComponent === undefined
) {
return {
kind: "string",
text: taxonRef.id,
};
} else {
return undefined;
}
}
/**
* Resolve a `ReportingDescriptorReference` to the MaD taxon definition it refers to, or
* `undefined` if it does not refer to a MaD model.
*/
function resolveModelTaxon(
taxonRef: ReportingDescriptorReference,
run: Run,
): ModelTaxon | undefined {
const extensions = run.tool.extensions;
if (extensions === undefined) {
return undefined;
}
const extensionIndex = taxonRef.toolComponent?.index;
if (
extensionIndex === undefined ||
extensionIndex < 0 ||
extensionIndex >= extensions.length
) {
return undefined;
}
const extension = extensions[extensionIndex];
if (extension.taxa === undefined) {
return undefined;
}
const localPackUri = getLocalPackUri(extension);
if (localPackUri === undefined) {
return undefined;
}
const taxonIndex = taxonRef.index;
if (
taxonIndex === undefined ||
taxonIndex < 0 ||
taxonIndex >= extension.taxa.length
) {
return undefined;
}
const taxonDef = extension.taxa[taxonIndex];
if (taxonDef.properties === undefined) {
return undefined;
}
const location: PhysicalLocation =
taxonDef.properties["CodeQL/DataExtensionLocation"];
if (location === undefined || location.artifactLocation === undefined) {
return undefined;
}
return {
kind: "model",
location: {
physicalLocation: {
...location,
artifactLocation: resolveArtifactLocation(
location.artifactLocation,
localPackUri,
),
},
},
};
}
/** Resolve a `ReportingDescriptorReference` to the taxon definition it refers to. */
function resolveTaxonDefinition(
run: Run,
taxonRef: ReportingDescriptorReference,
): TaxonDefinition | undefined {
return resolveModelTaxon(taxonRef, run) ?? resolveBuiltInTaxon(taxonRef);
}
interface Props {
taxa: ReportingDescriptorReference[] | undefined;
run: Run | undefined;
onClick: () => void;
}
/** Generate the React elements for each taxon. */
export function TaxaLocations({
taxa,
run,
onClick,
}: Props): React.JSX.Element[] {
if (taxa === undefined || taxa.length === 0 || run === undefined) {
return [];
}
return taxa.flatMap((taxonRef, index) => {
if (taxonRef.properties === undefined) {
return [];
}
const role = taxonRef.properties["CodeQL/DataflowRole"];
if (typeof role !== "string") {
return [];
}
const taxonDef = resolveTaxonDefinition(run, taxonRef);
if (taxonDef === undefined) {
return [];
}
return (
<div key={index}>
{`(${role}) `}
<SarifLocation
loc={taxonDef.kind === "model" ? taxonDef.location : undefined}
databaseUri={undefined}
text={taxonDef.kind === "string" ? taxonDef.text : undefined}
sourceLocationPrefix=""
onClick={onClick}
/>
</div>
);
});
}

View File

@@ -2,6 +2,7 @@ import type {
QueryMetadata, QueryMetadata,
RawResultsSortState, RawResultsSortState,
ResultSet, ResultSet,
UserSettings,
} from "../../common/interface-types"; } from "../../common/interface-types";
import { SortDirection } from "../../common/interface-types"; import { SortDirection } from "../../common/interface-types";
import { assertNever } from "../../common/helpers-pure"; import { assertNever } from "../../common/helpers-pure";
@@ -11,6 +12,7 @@ import type { UrlValueResolvable } from "../../common/raw-result-types";
export interface ResultTableProps { export interface ResultTableProps {
resultSet: ResultSet; resultSet: ResultSet;
databaseUri: string; databaseUri: string;
userSettings: UserSettings;
metadata?: QueryMetadata; metadata?: QueryMetadata;
resultsPath: string | undefined; resultsPath: string | undefined;
sortState?: RawResultsSortState; sortState?: RawResultsSortState;
@@ -41,7 +43,7 @@ export const selectedRowClassName = "vscode-codeql__result-table-row--selected";
export function jumpToLocation( export function jumpToLocation(
loc: UrlValueResolvable, loc: UrlValueResolvable,
databaseUri: string, databaseUri: string | undefined,
): void { ): void {
vscode.postMessage({ vscode.postMessage({
t: "viewSourceFile", t: "viewSourceFile",

View File

@@ -144,3 +144,12 @@ td.vscode-codeql__path-index-cell {
.vscode-codeql__location-cell { .vscode-codeql__location-cell {
text-align: right !important; text-align: right !important;
} }
.vscode-codeql__taxa-cell {
text-align: left !important;
}
.vscode-codeql__taxa-cell-contents {
background-color: transparent;
display: grid;
}

View File

@@ -1,7 +1,7 @@
[ [
"v2.17.0", "v2.18.1",
"v2.17.6",
"v2.16.6", "v2.16.6",
"v2.15.5", "v2.15.5",
"v2.14.6",
"nightly" "nightly"
] ]

View File

@@ -15,6 +15,7 @@ function makeTestOctokit(octokit: Octokit): Credentials {
"getExistingAccessToken not supported by test credentials", "getExistingAccessToken not supported by test credentials",
); );
}, },
authProviderId: "github",
}; };
} }

View File

@@ -4,6 +4,7 @@ export function createMockVariantAnalysisConfig(): VariantAnalysisConfig {
return { return {
controllerRepo: "foo/bar", controllerRepo: "foo/bar",
showSystemDefinedRepositoryLists: true, showSystemDefinedRepositoryLists: true,
githubUrl: new URL("https://github.com"),
onDidChangeConfiguration: jest.fn(), onDidChangeConfiguration: jest.fn(),
}; };
} }

View File

@@ -6,6 +6,8 @@ import {
} from "../../../src/common/github-url-identifier-helper"; } from "../../../src/common/github-url-identifier-helper";
describe("github url identifier helper", () => { describe("github url identifier helper", () => {
const githubUrl = new URL("https://github.com");
describe("valid GitHub Nwo Or Owner method", () => { describe("valid GitHub Nwo Or Owner method", () => {
it("should return true for valid owner", () => { it("should return true for valid owner", () => {
expect(isValidGitHubOwner("github")).toBe(true); expect(isValidGitHubOwner("github")).toBe(true);
@@ -23,51 +25,96 @@ describe("github url identifier helper", () => {
describe("getNwoFromGitHubUrl method", () => { describe("getNwoFromGitHubUrl method", () => {
it("should handle invalid urls", () => { it("should handle invalid urls", () => {
expect(getNwoFromGitHubUrl("")).toBe(undefined); expect(getNwoFromGitHubUrl("", githubUrl)).toBe(undefined);
expect(getNwoFromGitHubUrl("https://ww.github.com/foo/bar")).toBe( expect(
getNwoFromGitHubUrl("https://ww.github.com/foo/bar", githubUrl),
).toBe(undefined);
expect(
getNwoFromGitHubUrl("https://tenant.ghe.com/foo/bar", githubUrl),
).toBe(undefined);
expect(getNwoFromGitHubUrl("https://www.github.com/foo", githubUrl)).toBe(
undefined, undefined,
); );
expect(getNwoFromGitHubUrl("https://www.github.com/foo")).toBe(undefined); expect(getNwoFromGitHubUrl("foo", githubUrl)).toBe(undefined);
expect(getNwoFromGitHubUrl("foo")).toBe(undefined); expect(getNwoFromGitHubUrl("foo/bar", githubUrl)).toBe(undefined);
expect(getNwoFromGitHubUrl("foo/bar")).toBe(undefined);
}); });
it("should handle valid urls", () => { it("should handle valid urls", () => {
expect(getNwoFromGitHubUrl("github.com/foo/bar")).toBe("foo/bar"); expect(getNwoFromGitHubUrl("github.com/foo/bar", githubUrl)).toBe(
expect(getNwoFromGitHubUrl("www.github.com/foo/bar")).toBe("foo/bar");
expect(getNwoFromGitHubUrl("https://github.com/foo/bar")).toBe("foo/bar");
expect(getNwoFromGitHubUrl("http://github.com/foo/bar")).toBe("foo/bar");
expect(getNwoFromGitHubUrl("https://www.github.com/foo/bar")).toBe(
"foo/bar", "foo/bar",
); );
expect(getNwoFromGitHubUrl("https://github.com/foo/bar/sub/pages")).toBe( expect(getNwoFromGitHubUrl("www.github.com/foo/bar", githubUrl)).toBe(
"foo/bar", "foo/bar",
); );
expect(getNwoFromGitHubUrl("https://github.com/foo/bar", githubUrl)).toBe(
"foo/bar",
);
expect(getNwoFromGitHubUrl("http://github.com/foo/bar", githubUrl)).toBe(
"foo/bar",
);
expect(
getNwoFromGitHubUrl("https://www.github.com/foo/bar", githubUrl),
).toBe("foo/bar");
expect(
getNwoFromGitHubUrl("https://github.com/foo/bar/sub/pages", githubUrl),
).toBe("foo/bar");
expect(
getNwoFromGitHubUrl(
"https://tenant.ghe.com/foo/bar",
new URL("https://tenant.ghe.com"),
),
).toBe("foo/bar");
}); });
}); });
describe("getOwnerFromGitHubUrl method", () => { describe("getOwnerFromGitHubUrl method", () => {
it("should handle invalid urls", () => { it("should handle invalid urls", () => {
expect(getOwnerFromGitHubUrl("")).toBe(undefined); expect(getOwnerFromGitHubUrl("", githubUrl)).toBe(undefined);
expect(getOwnerFromGitHubUrl("https://ww.github.com/foo/bar")).toBe( expect(
undefined, getOwnerFromGitHubUrl("https://ww.github.com/foo/bar", githubUrl),
); ).toBe(undefined);
expect(getOwnerFromGitHubUrl("foo")).toBe(undefined); expect(
expect(getOwnerFromGitHubUrl("foo/bar")).toBe(undefined); getOwnerFromGitHubUrl("https://tenant.ghe.com/foo/bar", githubUrl),
).toBe(undefined);
expect(getOwnerFromGitHubUrl("foo", githubUrl)).toBe(undefined);
expect(getOwnerFromGitHubUrl("foo/bar", githubUrl)).toBe(undefined);
}); });
it("should handle valid urls", () => { it("should handle valid urls", () => {
expect(getOwnerFromGitHubUrl("http://github.com/foo/bar")).toBe("foo"); expect(
expect(getOwnerFromGitHubUrl("https://github.com/foo/bar")).toBe("foo"); getOwnerFromGitHubUrl("http://github.com/foo/bar", githubUrl),
expect(getOwnerFromGitHubUrl("https://www.github.com/foo/bar")).toBe( ).toBe("foo");
expect(
getOwnerFromGitHubUrl("https://github.com/foo/bar", githubUrl),
).toBe("foo");
expect(
getOwnerFromGitHubUrl("https://www.github.com/foo/bar", githubUrl),
).toBe("foo");
expect(
getOwnerFromGitHubUrl(
"https://github.com/foo/bar/sub/pages",
githubUrl,
),
).toBe("foo");
expect(
getOwnerFromGitHubUrl("https://www.github.com/foo", githubUrl),
).toBe("foo");
expect(getOwnerFromGitHubUrl("github.com/foo", githubUrl)).toBe("foo");
expect(getOwnerFromGitHubUrl("www.github.com/foo", githubUrl)).toBe(
"foo", "foo",
); );
expect( expect(
getOwnerFromGitHubUrl("https://github.com/foo/bar/sub/pages"), getOwnerFromGitHubUrl(
"https://tenant.ghe.com/foo/bar",
new URL("https://tenant.ghe.com"),
),
).toBe("foo");
expect(
getOwnerFromGitHubUrl(
"https://tenant.ghe.com/foo",
new URL("https://tenant.ghe.com"),
),
).toBe("foo"); ).toBe("foo");
expect(getOwnerFromGitHubUrl("https://www.github.com/foo")).toBe("foo");
expect(getOwnerFromGitHubUrl("github.com/foo")).toBe("foo");
expect(getOwnerFromGitHubUrl("www.github.com/foo")).toBe("foo");
}); });
}); });
}); });

View File

@@ -92,32 +92,52 @@ describe("getDbItemActions", () => {
}); });
describe("getGitHubUrl", () => { describe("getGitHubUrl", () => {
it("should return the correct url for a remote owner", () => { const githubUrl = new URL("https://github.com");
it("should return the correct url for a remote owner with github.com", () => {
const dbItem = createRemoteOwnerDbItem(); const dbItem = createRemoteOwnerDbItem();
const actualUrl = getGitHubUrl(dbItem); const actualUrl = getGitHubUrl(dbItem, githubUrl);
const expectedUrl = `https://github.com/${dbItem.ownerName}`; const expectedUrl = `https://github.com/${dbItem.ownerName}`;
expect(actualUrl).toEqual(expectedUrl); expect(actualUrl).toEqual(expectedUrl);
}); });
it("should return the correct url for a remote repo", () => { it("should return the correct url for a remote owner with GHEC-DR", () => {
const dbItem = createRemoteOwnerDbItem();
const actualUrl = getGitHubUrl(dbItem, new URL("https://tenant.ghe.com"));
const expectedUrl = `https://tenant.ghe.com/${dbItem.ownerName}`;
expect(actualUrl).toEqual(expectedUrl);
});
it("should return the correct url for a remote repo with github.com", () => {
const dbItem = createRemoteRepoDbItem(); const dbItem = createRemoteRepoDbItem();
const actualUrl = getGitHubUrl(dbItem); const actualUrl = getGitHubUrl(dbItem, githubUrl);
const expectedUrl = `https://github.com/${dbItem.repoFullName}`; const expectedUrl = `https://github.com/${dbItem.repoFullName}`;
expect(actualUrl).toEqual(expectedUrl); expect(actualUrl).toEqual(expectedUrl);
}); });
it("should return the correct url for a remote repo with GHEC-DR", () => {
const dbItem = createRemoteRepoDbItem();
const actualUrl = getGitHubUrl(dbItem, new URL("https://tenant.ghe.com"));
const expectedUrl = `https://tenant.ghe.com/${dbItem.repoFullName}`;
expect(actualUrl).toEqual(expectedUrl);
});
it("should return undefined for other remote db items", () => { it("should return undefined for other remote db items", () => {
const dbItem0 = createRootRemoteDbItem(); const dbItem0 = createRootRemoteDbItem();
const dbItem1 = createRemoteSystemDefinedListDbItem(); const dbItem1 = createRemoteSystemDefinedListDbItem();
const dbItem2 = createRemoteUserDefinedListDbItem(); const dbItem2 = createRemoteUserDefinedListDbItem();
const actualUrl0 = getGitHubUrl(dbItem0); const actualUrl0 = getGitHubUrl(dbItem0, githubUrl);
const actualUrl1 = getGitHubUrl(dbItem1); const actualUrl1 = getGitHubUrl(dbItem1, githubUrl);
const actualUrl2 = getGitHubUrl(dbItem2); const actualUrl2 = getGitHubUrl(dbItem2, githubUrl);
expect(actualUrl0).toBeUndefined(); expect(actualUrl0).toBeUndefined();
expect(actualUrl1).toBeUndefined(); expect(actualUrl1).toBeUndefined();

View File

@@ -1,16 +1,59 @@
import { import {
parsePythonAccessPath, parsePythonAccessPath,
parsePythonType,
pythonEndpointType, pythonEndpointType,
pythonPath, pythonPath,
} from "../../../../../src/model-editor/languages/python/access-paths"; } from "../../../../../src/model-editor/languages/python/access-paths";
import { EndpointType } from "../../../../../src/model-editor/method"; import { EndpointType } from "../../../../../src/model-editor/method";
describe("parsePythonType", () => {
it("parses a type with a package", () => {
expect(parsePythonType("requests.utils")).toEqual({
packageName: "requests",
typeName: "utils",
});
});
it("parses a nested type with a package", () => {
expect(parsePythonType("requests.adapters.HTTPAdapter")).toEqual({
packageName: "requests",
typeName: "adapters.HTTPAdapter",
});
});
it("parses a package without a type", () => {
expect(parsePythonType("requests")).toEqual({
packageName: "requests",
typeName: "",
});
});
it("parses an empty string", () => {
expect(parsePythonType("")).toEqual({
packageName: "",
typeName: "",
});
});
});
const testCases: Array<{ const testCases: Array<{
path: string; path: string;
shortTypeName: string;
method: ReturnType<typeof parsePythonAccessPath>; method: ReturnType<typeof parsePythonAccessPath>;
}> = [ }> = [
{ {
path: "Member[CommonTokens].Member[Class].Instance.Member[foo]", path: "Member[CommonTokens].Member[Class].Instance.Member[foo]",
shortTypeName: "",
method: {
typeName: "CommonTokens.Class",
methodName: "foo",
endpointType: EndpointType.Method,
path: "",
},
},
{
path: "Member[foo]",
shortTypeName: "CommonTokens.Class",
method: { method: {
typeName: "CommonTokens.Class", typeName: "CommonTokens.Class",
methodName: "foo", methodName: "foo",
@@ -20,6 +63,17 @@ const testCases: Array<{
}, },
{ {
path: "Member[CommonTokens].Member[Class].Instance.Member[foo].Parameter[self]", path: "Member[CommonTokens].Member[Class].Instance.Member[foo].Parameter[self]",
shortTypeName: "",
method: {
typeName: "CommonTokens.Class",
methodName: "foo",
endpointType: EndpointType.Method,
path: "Parameter[self]",
},
},
{
path: "Member[foo].Parameter[self]",
shortTypeName: "CommonTokens.Class",
method: { method: {
typeName: "CommonTokens.Class", typeName: "CommonTokens.Class",
methodName: "foo", methodName: "foo",
@@ -29,6 +83,7 @@ const testCases: Array<{
}, },
{ {
path: "Member[getSource].ReturnValue", path: "Member[getSource].ReturnValue",
shortTypeName: "",
method: { method: {
typeName: "", typeName: "",
methodName: "getSource", methodName: "getSource",
@@ -38,6 +93,17 @@ const testCases: Array<{
}, },
{ {
path: "Member[CommonTokens].Member[makePromise].ReturnValue.Awaited", path: "Member[CommonTokens].Member[makePromise].ReturnValue.Awaited",
shortTypeName: "",
method: {
typeName: "CommonTokens",
methodName: "makePromise",
endpointType: EndpointType.Function,
path: "ReturnValue.Awaited",
},
},
{
path: "Member[makePromise].ReturnValue.Awaited",
shortTypeName: "CommonTokens!",
method: { method: {
typeName: "CommonTokens", typeName: "CommonTokens",
methodName: "makePromise", methodName: "makePromise",
@@ -47,6 +113,17 @@ const testCases: Array<{
}, },
{ {
path: "Member[ArgPos].Member[anyParam].Argument[any]", path: "Member[ArgPos].Member[anyParam].Argument[any]",
shortTypeName: "",
method: {
typeName: "ArgPos",
methodName: "anyParam",
endpointType: EndpointType.Function,
path: "Argument[any]",
},
},
{
path: "Member[anyParam].Argument[any]",
shortTypeName: "ArgPos!",
method: { method: {
typeName: "ArgPos", typeName: "ArgPos",
methodName: "anyParam", methodName: "anyParam",
@@ -56,6 +133,17 @@ const testCases: Array<{
}, },
{ {
path: "Member[ArgPos].Instance.Member[self_thing].Argument[self]", path: "Member[ArgPos].Instance.Member[self_thing].Argument[self]",
shortTypeName: "",
method: {
typeName: "ArgPos",
methodName: "self_thing",
endpointType: EndpointType.Method,
path: "Argument[self]",
},
},
{
path: "Member[self_thing].Argument[self]",
shortTypeName: "ArgPos",
method: { method: {
typeName: "ArgPos", typeName: "ArgPos",
methodName: "self_thing", methodName: "self_thing",
@@ -66,44 +154,138 @@ const testCases: Array<{
]; ];
describe("parsePythonAccessPath", () => { describe("parsePythonAccessPath", () => {
it.each(testCases)("parses $path", ({ path, method }) => { it.each(testCases)(
expect(parsePythonAccessPath(path)).toEqual(method); "parses $path with $shortTypeName",
}); ({ path, shortTypeName, method }) => {
expect(parsePythonAccessPath(path, shortTypeName)).toEqual(method);
},
);
}); });
describe("pythonPath", () => { describe("pythonPath", () => {
it.each(testCases)("constructs $path", ({ path, method }) => { it("returns empty for an empty method name", () => {
expect( expect(pythonPath("", "ReturnValue")).toEqual("ReturnValue");
pythonPath( });
method.typeName,
method.methodName, it("returns empty for an empty path", () => {
method.endpointType, expect(pythonPath("foo", "")).toEqual("Member[foo]");
method.path, });
),
).toEqual(path); it("returns correctly for a full method name and path", () => {
expect(pythonPath("foo", "ReturnValue")).toEqual("Member[foo].ReturnValue");
}); });
}); });
describe("pythonEndpointType", () => { describe("pythonEndpointType", () => {
it("returns method for a method", () => { it("returns method for a method", () => {
expect( expect(
pythonEndpointType({ pythonEndpointType(
packageName: "testlib", {
typeName: "CommonTokens", packageName: "testlib",
methodName: "foo", typeName: "CommonTokens",
methodParameters: "(self,a)", methodName: "foo",
}), methodParameters: "(self,a)",
},
"InstanceMethod",
),
).toEqual(EndpointType.Method); ).toEqual(EndpointType.Method);
}); });
it("returns class method for a class method", () => {
expect(
pythonEndpointType(
{
packageName: "testlib",
typeName: "CommonTokens",
methodName: "foo",
methodParameters: "(cls,a)",
},
"ClassMethod",
),
).toEqual(EndpointType.ClassMethod);
});
it("returns static method for a static method", () => {
expect(
pythonEndpointType(
{
packageName: "testlib",
typeName: "CommonTokens",
methodName: "foo",
methodParameters: "(a)",
},
"StaticMethod",
),
).toEqual(EndpointType.StaticMethod);
});
it("returns function for a function", () => { it("returns function for a function", () => {
expect( expect(
pythonEndpointType({ pythonEndpointType(
packageName: "testlib", {
typeName: "CommonTokens", packageName: "testlib",
methodName: "foo", typeName: "",
methodParameters: "(a)", methodName: "foo",
}), methodParameters: "(a)",
},
"Function",
),
).toEqual(EndpointType.Function);
});
it("returns constructor for an init method", () => {
expect(
pythonEndpointType(
{
packageName: "testlib",
typeName: "CommonTokens",
methodName: "foo",
methodParameters: "(a)",
},
"InitMethod",
),
).toEqual(EndpointType.Constructor);
});
it("returns class for a class", () => {
expect(
pythonEndpointType(
{
packageName: "testlib",
typeName: "CommonTokens",
methodName: "",
methodParameters: "",
},
"Class",
),
).toEqual(EndpointType.Class);
});
it("returns method for a method without endpoint kind", () => {
expect(
pythonEndpointType(
{
packageName: "testlib",
typeName: "CommonTokens",
methodName: "foo",
methodParameters: "(self,a)",
},
undefined,
),
).toEqual(EndpointType.Method);
});
it("returns function for a function without endpoint kind", () => {
expect(
pythonEndpointType(
{
packageName: "testlib",
typeName: "CommonTokens",
methodName: "foo",
methodParameters: "(a)",
},
undefined,
),
).toEqual(EndpointType.Function); ).toEqual(EndpointType.Function);
}); });
}); });

View File

@@ -151,13 +151,29 @@ describe("isVariantAnalysisComplete", () => {
}); });
describe("getActionsWorkflowRunUrl", () => { describe("getActionsWorkflowRunUrl", () => {
it("should get the run url", () => { it("should get the run url on github.com", () => {
const variantAnalysis = createMockVariantAnalysis({}); const variantAnalysis = createMockVariantAnalysis({});
const actionsWorkflowRunUrl = getActionsWorkflowRunUrl(variantAnalysis); const actionsWorkflowRunUrl = getActionsWorkflowRunUrl(
variantAnalysis,
new URL("https://github.com"),
);
expect(actionsWorkflowRunUrl).toBe( expect(actionsWorkflowRunUrl).toBe(
`https://github.com/${variantAnalysis.controllerRepo.fullName}/actions/runs/${variantAnalysis.actionsWorkflowRunId}`, `https://github.com/${variantAnalysis.controllerRepo.fullName}/actions/runs/${variantAnalysis.actionsWorkflowRunId}`,
); );
}); });
it("should get the run url on GHEC-DR", () => {
const variantAnalysis = createMockVariantAnalysis({});
const actionsWorkflowRunUrl = getActionsWorkflowRunUrl(
variantAnalysis,
new URL("https://tenant.ghe.com"),
);
expect(actionsWorkflowRunUrl).toBe(
`https://tenant.ghe.com/${variantAnalysis.controllerRepo.fullName}/actions/runs/${variantAnalysis.actionsWorkflowRunId}`,
);
});
}); });

View File

@@ -4,13 +4,14 @@ import { handleRequestError } from "../../../src/variant-analysis/custom-errors"
import { faker } from "@faker-js/faker"; import { faker } from "@faker-js/faker";
describe("handleRequestError", () => { describe("handleRequestError", () => {
const githubUrl = new URL("https://github.com");
const logger = createMockLogger(); const logger = createMockLogger();
it("returns false when handling a non-422 error", () => { it("returns false when handling a non-422 error", () => {
const e = mockRequestError(404, { const e = mockRequestError(404, {
message: "Not Found", message: "Not Found",
}); });
expect(handleRequestError(e, logger)).toBe(false); expect(handleRequestError(e, githubUrl, logger)).toBe(false);
expect(logger.showErrorMessage).not.toHaveBeenCalled(); expect(logger.showErrorMessage).not.toHaveBeenCalled();
}); });
@@ -19,13 +20,13 @@ describe("handleRequestError", () => {
message: message:
"Unable to trigger a variant analysis. None of the requested repositories could be found.", "Unable to trigger a variant analysis. None of the requested repositories could be found.",
}); });
expect(handleRequestError(e, logger)).toBe(false); expect(handleRequestError(e, githubUrl, logger)).toBe(false);
expect(logger.showErrorMessage).not.toHaveBeenCalled(); expect(logger.showErrorMessage).not.toHaveBeenCalled();
}); });
it("returns false when handling an error without response body", () => { it("returns false when handling an error without response body", () => {
const e = mockRequestError(422, undefined); const e = mockRequestError(422, undefined);
expect(handleRequestError(e, logger)).toBe(false); expect(handleRequestError(e, githubUrl, logger)).toBe(false);
expect(logger.showErrorMessage).not.toHaveBeenCalled(); expect(logger.showErrorMessage).not.toHaveBeenCalled();
}); });
@@ -42,7 +43,7 @@ describe("handleRequestError", () => {
}, },
}, },
}); });
expect(handleRequestError(e, logger)).toBe(false); expect(handleRequestError(e, githubUrl, logger)).toBe(false);
expect(logger.showErrorMessage).not.toHaveBeenCalled(); expect(logger.showErrorMessage).not.toHaveBeenCalled();
}); });
@@ -58,7 +59,7 @@ describe("handleRequestError", () => {
}, },
], ],
}); });
expect(handleRequestError(e, logger)).toBe(false); expect(handleRequestError(e, githubUrl, logger)).toBe(false);
expect(logger.showErrorMessage).not.toHaveBeenCalled(); expect(logger.showErrorMessage).not.toHaveBeenCalled();
}); });
@@ -75,7 +76,7 @@ describe("handleRequestError", () => {
}, },
], ],
}); });
expect(handleRequestError(e, logger)).toBe(false); expect(handleRequestError(e, githubUrl, logger)).toBe(false);
expect(logger.showErrorMessage).not.toHaveBeenCalled(); expect(logger.showErrorMessage).not.toHaveBeenCalled();
}); });
@@ -92,11 +93,11 @@ describe("handleRequestError", () => {
}, },
], ],
}); });
expect(handleRequestError(e, logger)).toBe(false); expect(handleRequestError(e, githubUrl, logger)).toBe(false);
expect(logger.showErrorMessage).not.toHaveBeenCalled(); expect(logger.showErrorMessage).not.toHaveBeenCalled();
}); });
it("shows notification when handling a missing default branch error", () => { it("shows notification when handling a missing default branch error with github.com URL", () => {
const e = mockRequestError(422, { const e = mockRequestError(422, {
message: message:
"Variant analysis failed because controller repository github/pickles does not have a branch 'main'. Please create a 'main' branch in the repository and re-run the variant analysis.", "Variant analysis failed because controller repository github/pickles does not have a branch 'main'. Please create a 'main' branch in the repository and re-run the variant analysis.",
@@ -110,11 +111,33 @@ describe("handleRequestError", () => {
}, },
], ],
}); });
expect(handleRequestError(e, logger)).toBe(true); expect(handleRequestError(e, githubUrl, logger)).toBe(true);
expect(logger.showErrorMessage).toHaveBeenCalledWith( expect(logger.showErrorMessage).toHaveBeenCalledWith(
"Variant analysis failed because the controller repository github/pickles does not have a branch 'main'. Please create a 'main' branch by clicking [here](https://github.com/github/pickles/new/main) and re-run the variant analysis query.", "Variant analysis failed because the controller repository github/pickles does not have a branch 'main'. Please create a 'main' branch by clicking [here](https://github.com/github/pickles/new/main) and re-run the variant analysis query.",
); );
}); });
it("shows notification when handling a missing default branch error with GHEC-DR URL", () => {
const e = mockRequestError(422, {
message:
"Variant analysis failed because controller repository github/pickles does not have a branch 'main'. Please create a 'main' branch in the repository and re-run the variant analysis.",
errors: [
{
resource: "Repository",
field: "default_branch",
code: "missing",
repository: "github/pickles",
default_branch: "main",
},
],
});
expect(
handleRequestError(e, new URL("https://tenant.ghe.com"), logger),
).toBe(true);
expect(logger.showErrorMessage).toHaveBeenCalledWith(
"Variant analysis failed because the controller repository github/pickles does not have a branch 'main'. Please create a 'main' branch by clicking [here](https://tenant.ghe.com/github/pickles/new/main) and re-run the variant analysis query.",
);
});
}); });
function mockRequestError(status: number, body: any): RequestError { function mockRequestError(status: number, body: any): RequestError {

View File

@@ -78,8 +78,10 @@ describe("Variant Analysis Manager", () => {
new DbConfigStore(app), new DbConfigStore(app),
createMockVariantAnalysisConfig(), createMockVariantAnalysisConfig(),
); );
const variantAnalysisConfig = createMockVariantAnalysisConfig();
variantAnalysisResultsManager = new VariantAnalysisResultsManager( variantAnalysisResultsManager = new VariantAnalysisResultsManager(
cli, cli,
variantAnalysisConfig,
extLogger, extLogger,
); );
variantAnalysisManager = new VariantAnalysisManager( variantAnalysisManager = new VariantAnalysisManager(
@@ -88,6 +90,7 @@ describe("Variant Analysis Manager", () => {
storagePath, storagePath,
variantAnalysisResultsManager, variantAnalysisResultsManager,
dbManager, dbManager,
variantAnalysisConfig,
); );
}); });

View File

@@ -16,6 +16,7 @@ import type {
VariantAnalysisScannedRepositoryResult, VariantAnalysisScannedRepositoryResult,
} from "../../../../src/variant-analysis/shared/variant-analysis"; } from "../../../../src/variant-analysis/shared/variant-analysis";
import { mockedObject } from "../../utils/mocking.helpers"; import { mockedObject } from "../../utils/mocking.helpers";
import { createMockVariantAnalysisConfig } from "../../../factories/config";
jest.setTimeout(10_000); jest.setTimeout(10_000);
@@ -27,8 +28,10 @@ describe(VariantAnalysisResultsManager.name, () => {
variantAnalysisId = faker.number.int(); variantAnalysisId = faker.number.int();
const cli = mockedObject<CodeQLCliServer>({}); const cli = mockedObject<CodeQLCliServer>({});
const variantAnalysisConfig = createMockVariantAnalysisConfig();
variantAnalysisResultsManager = new VariantAnalysisResultsManager( variantAnalysisResultsManager = new VariantAnalysisResultsManager(
cli, cli,
variantAnalysisConfig,
extLogger, extLogger,
); );
}); });

View File

@@ -56,8 +56,10 @@ describe("Variant Analysis Manager", () => {
new DbConfigStore(app), new DbConfigStore(app),
createMockVariantAnalysisConfig(), createMockVariantAnalysisConfig(),
); );
const variantAnalysisConfig = createMockVariantAnalysisConfig();
const variantAnalysisResultsManager = new VariantAnalysisResultsManager( const variantAnalysisResultsManager = new VariantAnalysisResultsManager(
cli, cli,
variantAnalysisConfig,
extLogger, extLogger,
); );
variantAnalysisManager = new VariantAnalysisManager( variantAnalysisManager = new VariantAnalysisManager(
@@ -66,6 +68,7 @@ describe("Variant Analysis Manager", () => {
storagePath, storagePath,
variantAnalysisResultsManager, variantAnalysisResultsManager,
dbManager, dbManager,
variantAnalysisConfig,
); );
}); });

View File

@@ -140,7 +140,8 @@ describe("local databases", () => {
}, },
]); ]);
expect(onDidChangeDatabaseItem).toHaveBeenCalledWith({ expect(onDidChangeDatabaseItem).toHaveBeenCalledWith({
item: undefined, fullRefresh: true,
item: mockDbItem,
kind: DatabaseEventKind.Add, kind: DatabaseEventKind.Add,
}); });
@@ -152,7 +153,8 @@ describe("local databases", () => {
expect((databaseManager as any)._databaseItems).toEqual([]); expect((databaseManager as any)._databaseItems).toEqual([]);
expect(updateSpy).toHaveBeenCalledWith("databaseList", []); expect(updateSpy).toHaveBeenCalledWith("databaseList", []);
expect(onDidChangeDatabaseItem).toHaveBeenCalledWith({ expect(onDidChangeDatabaseItem).toHaveBeenCalledWith({
item: undefined, fullRefresh: true,
item: mockDbItem,
kind: DatabaseEventKind.Remove, kind: DatabaseEventKind.Remove,
}); });
}); });
@@ -175,7 +177,8 @@ describe("local databases", () => {
]); ]);
expect(onDidChangeDatabaseItem).toHaveBeenCalledWith({ expect(onDidChangeDatabaseItem).toHaveBeenCalledWith({
item: undefined, fullRefresh: true,
item: mockDbItem,
kind: DatabaseEventKind.Rename, kind: DatabaseEventKind.Rename,
}); });
}); });
@@ -198,7 +201,8 @@ describe("local databases", () => {
]); ]);
const mockEvent = { const mockEvent = {
item: undefined, fullRefresh: true,
item: mockDbItem,
kind: DatabaseEventKind.Add, kind: DatabaseEventKind.Add,
}; };
expect(onDidChangeDatabaseItem).toHaveBeenCalledWith(mockEvent); expect(onDidChangeDatabaseItem).toHaveBeenCalledWith(mockEvent);

View File

@@ -1,16 +1,13 @@
import { ConfigurationTarget } from "vscode"; import { ConfigurationTarget } from "vscode";
import { import { VSCODE_GITHUB_ENTERPRISE_URI_SETTING } from "../../../../src/config";
VARIANT_ANALYSIS_ENABLE_GHEC_DR,
VSCODE_GITHUB_ENTERPRISE_URI_SETTING,
} from "../../../../src/config";
import { isVariantAnalysisEnabledForGitHubHost } from "../../../../src/variant-analysis/ghec-dr"; import { isVariantAnalysisEnabledForGitHubHost } from "../../../../src/variant-analysis/ghec-dr";
describe("checkVariantAnalysisEnabled", () => { describe("checkVariantAnalysisEnabled", () => {
it("returns cleanly when no enterprise URI is set", async () => { it("returns true when no enterprise URI is set", async () => {
expect(isVariantAnalysisEnabledForGitHubHost()).toBe(true); expect(isVariantAnalysisEnabledForGitHubHost()).toBe(true);
}); });
it("returns false when GHES enterprise URI is set and variant analysis feature flag is not set", async () => { it("returns false when GHES enterprise URI is set", async () => {
await VSCODE_GITHUB_ENTERPRISE_URI_SETTING.updateValue( await VSCODE_GITHUB_ENTERPRISE_URI_SETTING.updateValue(
"https://github.example.com", "https://github.example.com",
ConfigurationTarget.Global, ConfigurationTarget.Global,
@@ -18,35 +15,11 @@ describe("checkVariantAnalysisEnabled", () => {
expect(isVariantAnalysisEnabledForGitHubHost()).toBe(false); expect(isVariantAnalysisEnabledForGitHubHost()).toBe(false);
}); });
it("returns false when GHES enterprise URI is set and variant analysis feature flag is set", async () => { it("returns true when a GHEC-DR URI is set", async () => {
await VSCODE_GITHUB_ENTERPRISE_URI_SETTING.updateValue(
"https://github.example.com",
ConfigurationTarget.Global,
);
await VARIANT_ANALYSIS_ENABLE_GHEC_DR.updateValue(
"true",
ConfigurationTarget.Global,
);
expect(isVariantAnalysisEnabledForGitHubHost()).toBe(false);
});
it("returns false when GHEC-DR URI is set and variant analysis feature flag is not set", async () => {
await VSCODE_GITHUB_ENTERPRISE_URI_SETTING.updateValue( await VSCODE_GITHUB_ENTERPRISE_URI_SETTING.updateValue(
"https://example.ghe.com", "https://example.ghe.com",
ConfigurationTarget.Global, ConfigurationTarget.Global,
); );
expect(isVariantAnalysisEnabledForGitHubHost()).toBe(false);
});
it("returns true when GHEC-DR URI is set and variant analysis feature flag is set", async () => {
await VSCODE_GITHUB_ENTERPRISE_URI_SETTING.updateValue(
"https://example.ghe.com",
ConfigurationTarget.Global,
);
await VARIANT_ANALYSIS_ENABLE_GHEC_DR.updateValue(
"true",
ConfigurationTarget.Global,
);
expect(isVariantAnalysisEnabledForGitHubHost()).toBe(true); expect(isVariantAnalysisEnabledForGitHubHost()).toBe(true);
}); });
}); });