Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# scip-typescript

[SCIP](https://github.com/sourcegraph/scip) indexer for TypeScript and JavaScript.
[SCIP](https://github.com/sourcegraph/scip) indexer for TypeScript, JavaScript,
and Svelte.

## Quick start

Expand Down Expand Up @@ -33,6 +34,18 @@ scip-typescript index --infer-tsconfig
To improve the quality of indexing results for JavaScript,
consider adding `@types/*` packages as `devDependencies` in `package.json`.

### Indexing a Svelte project

Install the project dependencies and run the indexer from the directory that
contains the project's `tsconfig.json` or `jsconfig.json`. SvelteKit projects
should run `svelte-kit sync` first so their generated configuration is current.

```sh
npm install # or yarn/pnpm install
npx svelte-kit sync # SvelteKit projects only
scip-typescript index
```

### Index a TypeScript project using Yarn workspaces

Navigate to the project root, containing `package.json`.
Expand Down
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@sourcegraph/scip-typescript",
"version": "0.4.0",
"description": "SCIP indexer for TypeScript and JavaScript",
"description": "SCIP indexer for TypeScript, JavaScript, and Svelte",
"publisher": "sourcegraph",
"bin": "dist/src/main.js",
"main": "./dist/src/main.js",
Expand Down Expand Up @@ -36,9 +36,12 @@
},
"homepage": "https://github.com/sourcegraph/scip-typescript#readme",
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.31",
"commander": "^14.0.3",
"google-protobuf": "^4.0.2",
"progress": "^2.0.3",
"svelte": "^5.56.10",
"svelte2tsx": "^0.7.61",
"typescript": "^6.0.3"
},
"devDependencies": {
Expand Down
6 changes: 6 additions & 0 deletions snapshots/input/multi-project/packages/a/src/Component.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<script lang="ts">
type Props = { label: string }
let { label }: Props = $props()
</script>

<p>{label}</p>
5 changes: 5 additions & 0 deletions snapshots/input/multi-project/packages/b/src/App.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<script lang="ts">
import Component from '../../a/src/Component.svelte'
</script>

<Component label="cross-project" />
6 changes: 6 additions & 0 deletions snapshots/input/svelte/Child.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<script lang="ts">
let { label, count = 0 }: { label: string; count?: number } = $props()
const doubled = $derived(count * 2)
</script>

<button>{label}: {doubled}</button>
5 changes: 5 additions & 0 deletions snapshots/input/svelte/Generic.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<script lang="ts" generics="Value">
let { value }: { value: Value } = $props()
</script>

<span>{value}</span>
5 changes: 5 additions & 0 deletions snapshots/input/svelte/Legacy.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<script lang="ts">
export let value: string
</script>

<span>{value}</span>
31 changes: 31 additions & 0 deletions snapshots/input/svelte/Parent.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<script lang="ts">
import { writable } from 'svelte/store'
import Child from './Child.svelte'
import Generic from './Generic.svelte'
import Legacy from './Legacy.svelte'
import Plain from './Plain.svelte'
import { format, type User } from './helper'
import { importedCount } from './stores'

const user: User = { name: 'Ada' }
let clicks = $state(1)
const count = writable(2)
let generic: Generic<User> | undefined = $state()

function increment(): void {
clicks += 1
}
</script>

{#snippet greeting(name: string)}
<strong>Hello {name}</strong>
{/snippet}

<button onclick={increment}>Increment</button>
<Child label={format(user.name)} count={clicks} />
<Generic bind:this={generic} value={user} />
<Legacy value="legacy" />
<Plain enabled={true} />
<p>{$count}</p>
<p>{$importedCount}</p>
{@render greeting(user.name)}
7 changes: 7 additions & 0 deletions snapshots/input/svelte/Plain.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<script>
export let enabled = false
</script>

{#if enabled}
<p>enabled</p>
{/if}
7 changes: 7 additions & 0 deletions snapshots/input/svelte/helper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export interface User {
name: string
}

export function format(name: string): string {
return name.toUpperCase()
}
5 changes: 5 additions & 0 deletions snapshots/input/svelte/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import Legacy from './Legacy.svelte'
import Parent from './Parent.svelte'

export const component = Parent
export const components = { Legacy, Parent }
5 changes: 5 additions & 0 deletions snapshots/input/svelte/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"name": "svelte-example",
"version": "1.0.0",
"private": true
}
3 changes: 3 additions & 0 deletions snapshots/input/svelte/stores.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { writable } from 'svelte/store'

export const importedCount = writable(3)
10 changes: 10 additions & 0 deletions snapshots/input/svelte/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"compilerOptions": {
"module": "esnext",
"moduleResolution": "bundler",
"target": "es2022",
"strict": true,
"skipLibCheck": true
},
"include": ["*.ts", "*.svelte"]
}
18 changes: 18 additions & 0 deletions snapshots/output/multi-project/packages/a/src/Component.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// language Svelte
// < definition @example/a 1.0.0 src/`Component.svelte`/

<script lang="ts">
type Props = { label: string }
// ^^^^^ definition @example/a 1.0.0 src/`Component.svelte`/Props#
// ^^^^^ definition @example/a 1.0.0 src/`Component.svelte`/Props#label.
let { label }: Props = $props()
// ^^^^^ definition local 4
// ^^^^^ reference @example/a 1.0.0 src/`Component.svelte`/Props#label.
// ^^^^^ reference @example/a 1.0.0 src/`Component.svelte`/Props#
// ^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/$props().
// ^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/$props/
</script>

<p>{label}</p>
// ^^^^^ reference local 4

13 changes: 13 additions & 0 deletions snapshots/output/multi-project/packages/b/src/App.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// language Svelte
// < definition @example/b 1.0.0 src/`App.svelte`/

<script lang="ts">
import Component from '../../a/src/Component.svelte'
// ^^^^^^^^^ reference @example/a 1.0.0 src/`Component.svelte`/
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference @example/a 1.0.0 src/`Component.svelte`/
</script>

<Component label="cross-project" />
//^^^^^^^^^ reference @example/a 1.0.0 src/`Component.svelte`/
// ^^^^^ reference @example/a 1.0.0 src/`Component.svelte`/Props#label.

24 changes: 24 additions & 0 deletions snapshots/output/svelte/Child.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// language Svelte
// < definition svelte-example 1.0.0 `Child.svelte`/

<script lang="ts">
let { label, count = 0 }: { label: string; count?: number } = $props()
// ^^^^^ definition local 4
// ^^^^^ reference svelte-example 1.0.0 `Child.svelte`/Props#label.
// ^^^^^ definition local 5
// ^^^^^ reference svelte-example 1.0.0 `Child.svelte`/Props#count.
// ^^^^^ definition svelte-example 1.0.0 `Child.svelte`/Props#label.
// ^^^^^ definition svelte-example 1.0.0 `Child.svelte`/Props#count.
// ^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/$props().
// ^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/$props/
const doubled = $derived(count * 2)
// ^^^^^^^ definition local 8
// ^^^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/$derived().
// ^^^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/$derived/
// ^^^^^ reference local 5
</script>

<button>{label}: {doubled}</button>
// ^^^^^ reference local 4
// ^^^^^^^ reference local 8

17 changes: 17 additions & 0 deletions snapshots/output/svelte/Generic.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// language Svelte
// < definition svelte-example 1.0.0 `Generic.svelte`/

<script lang="ts" generics="Value">
// ^^^^^ definition svelte-example 1.0.0 `Generic.svelte`/[Value]
let { value }: { value: Value } = $props()
// ^^^^^ definition local 4
// ^^^^^ reference svelte-example 1.0.0 `Generic.svelte`/Props#value.
// ^^^^^ definition svelte-example 1.0.0 `Generic.svelte`/Props#value.
// ^^^^^ reference svelte-example 1.0.0 `Generic.svelte`/[Value]
// ^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/$props().
// ^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/$props/
</script>

<span>{value}</span>
// ^^^^^ reference local 4

12 changes: 12 additions & 0 deletions snapshots/output/svelte/Legacy.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// language Svelte
// < definition svelte-example 1.0.0 `Legacy.svelte`/

<script lang="ts">
export let value: string
// ^^^^^ definition local 2
// ^^^^^ definition svelte-example 1.0.0 `Legacy.svelte`/Props#value.
</script>

<span>{value}</span>
// ^^^^^ reference local 2

90 changes: 90 additions & 0 deletions snapshots/output/svelte/Parent.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
// language Svelte
// < definition svelte-example 1.0.0 `Parent.svelte`/

<script lang="ts">
import { writable } from 'svelte/store'
// ^^^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/`'svelte/store'`/writable().
// ^^^^^^^^^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/`'svelte/store'`/
import Child from './Child.svelte'
// ^^^^^ reference svelte-example 1.0.0 `Child.svelte`/
// ^^^^^^^^^^^^^^^^ reference svelte-example 1.0.0 `Child.svelte`/
import Generic from './Generic.svelte'
// ^^^^^^^ reference svelte-example 1.0.0 `Generic.svelte`/
// ^^^^^^^^^^^^^^^^^^ reference svelte-example 1.0.0 `Generic.svelte`/
import Legacy from './Legacy.svelte'
// ^^^^^^ reference svelte-example 1.0.0 `Legacy.svelte`/
// ^^^^^^^^^^^^^^^^^ reference svelte-example 1.0.0 `Legacy.svelte`/
import Plain from './Plain.svelte'
// ^^^^^ reference svelte-example 1.0.0 `Plain.svelte`/
// ^^^^^^^^^^^^^^^^ reference svelte-example 1.0.0 `Plain.svelte`/
import { format, type User } from './helper'
// ^^^^^^ reference svelte-example 1.0.0 `helper.ts`/format().
// ^^^^ reference svelte-example 1.0.0 `helper.ts`/User#
// ^^^^^^^^^^ reference svelte-example 1.0.0 `helper.ts`/
import { importedCount } from './stores'
// ^^^^^^^^^^^^^ reference svelte-example 1.0.0 `stores.ts`/importedCount.
// ^^^^^^^^^^ reference svelte-example 1.0.0 `stores.ts`/

const user: User = { name: 'Ada' }
// ^^^^ definition local 7
// ^^^^ reference svelte-example 1.0.0 `helper.ts`/User#
// ^^^^ reference svelte-example 1.0.0 `helper.ts`/User#name.
let clicks = $state(1)
// ^^^^^^ definition local 10
// ^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/$state().
// ^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/$state/
const count = writable(2)
// ^^^^^ definition local 13
// ^^^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/`'svelte/store'`/writable().
let generic: Generic<User> | undefined = $state()
// ^^^^^^^ definition local 16
// ^^^^^^^ reference svelte-example 1.0.0 `Generic.svelte`/
// ^^^^ reference svelte-example 1.0.0 `helper.ts`/User#
// ^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/$state().
// ^^^^^^ reference svelte 5.56.10 types/`index.d.ts`/$state/

function increment(): void {
// ^^^^^^^^^ definition local 17
clicks += 1
// ^^^^^^ reference local 10
}
</script>

{#snippet greeting(name: string)}
// ^^^^^^^^ definition local 2
// ^^^^ definition local 4
<strong>Hello {name}</strong>
// ^^^^ reference local 4
{/snippet}

<button onclick={increment}>Increment</button>
// ^^^^^^^ definition svelte-example 1.0.0 `Parent.svelte`/`"onclick"0`:
// ^^^^^^^^^ reference local 17
<Child label={format(user.name)} count={clicks} />
//^^^^^ reference svelte-example 1.0.0 `Child.svelte`/
// ^^^^^ reference svelte-example 1.0.0 `Child.svelte`/Props#label.
// ^^^^^^ reference svelte-example 1.0.0 `helper.ts`/format().
// ^^^^ reference local 7
// ^^^^ reference svelte-example 1.0.0 `helper.ts`/User#name.
// ^^^^^ reference svelte-example 1.0.0 `Child.svelte`/Props#count.
// ^^^^^^ reference local 10
<Generic bind:this={generic} value={user} />
//^^^^^^^ reference svelte-example 1.0.0 `Generic.svelte`/
// ^^^^^^^ reference local 16
// ^^^^^ reference svelte-example 1.0.0 `Generic.svelte`/Props#value.
// ^^^^ reference local 7
<Legacy value="legacy" />
//^^^^^^ reference svelte-example 1.0.0 `Legacy.svelte`/
// ^^^^^ reference svelte-example 1.0.0 `Legacy.svelte`/Props#value.
<Plain enabled={true} />
//^^^^^ reference svelte-example 1.0.0 `Plain.svelte`/
// ^^^^^^^ reference svelte-example 1.0.0 `Plain.svelte`/Props#enabled.
<p>{$count}</p>
// ^^^^^^ reference local 13
<p>{$importedCount}</p>
// ^^^^^^^^^^^^^^ reference svelte-example 1.0.0 `stores.ts`/importedCount.
{@render greeting(user.name)}
// ^^^^^^^^ reference local 2
// ^^^^ reference local 7
// ^^^^ reference svelte-example 1.0.0 `helper.ts`/User#name.

14 changes: 14 additions & 0 deletions snapshots/output/svelte/Plain.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// language Svelte
// < definition svelte-example 1.0.0 `Plain.svelte`/

<script>
export let enabled = false
// ^^^^^^^ definition local 2
// ^^^^^^^ definition svelte-example 1.0.0 `Plain.svelte`/Props#enabled.
</script>

{#if enabled}
// ^^^^^^^ reference local 2
<p>enabled</p>
{/if}

17 changes: 17 additions & 0 deletions snapshots/output/svelte/helper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// language TypeScript
// < definition svelte-example 1.0.0 `helper.ts`/

export interface User {
// ^^^^ definition svelte-example 1.0.0 `helper.ts`/User#
name: string
//^^^^ definition svelte-example 1.0.0 `helper.ts`/User#name.
}

export function format(name: string): string {
// ^^^^^^ definition svelte-example 1.0.0 `helper.ts`/format().
// ^^^^ definition svelte-example 1.0.0 `helper.ts`/format().(name)
return name.toUpperCase()
// ^^^^ reference svelte-example 1.0.0 `helper.ts`/format().(name)
// ^^^^^^^^^^^ reference typescript 6.0.3 lib/`lib.es5.d.ts`/String#toUpperCase().
}

20 changes: 20 additions & 0 deletions snapshots/output/svelte/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// language TypeScript
// < definition svelte-example 1.0.0 `index.ts`/

import Legacy from './Legacy.svelte'
// ^^^^^^ reference svelte-example 1.0.0 `Legacy.svelte`/
// ^^^^^^^^^^^^^^^^^ reference svelte-example 1.0.0 `Legacy.svelte`/
import Parent from './Parent.svelte'
// ^^^^^^ reference svelte-example 1.0.0 `Parent.svelte`/
// ^^^^^^^^^^^^^^^^^ reference svelte-example 1.0.0 `Parent.svelte`/

export const component = Parent
// ^^^^^^^^^ definition svelte-example 1.0.0 `index.ts`/component.
// ^^^^^^ reference svelte-example 1.0.0 `Parent.svelte`/
export const components = { Legacy, Parent }
// ^^^^^^^^^^ definition svelte-example 1.0.0 `index.ts`/components.
// ^^^^^^ definition svelte-example 1.0.0 `index.ts`/Legacy0:
// ^^^^^^ reference svelte-example 1.0.0 `Legacy.svelte`/
// ^^^^^^ definition svelte-example 1.0.0 `index.ts`/Parent0:
// ^^^^^^ reference svelte-example 1.0.0 `Parent.svelte`/

Loading
Loading