Skip to content

Commit b289c88

Browse files
Removed some unused internals, cleaned up and decoupled (#77)
1 parent 3cb86a9 commit b289c88

13 files changed

+89
-170
lines changed

.changeset/cruel-days-design.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"effect-vscode": minor
3+
---
4+
5+
Removed some unused internals, cleaned up and decoupled from some vscode/dap specifics

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ dist
33
node_modules
44
.vscode-test/
55
*.vsix
6+
*.tsbuildinfo
67
.DS_Store
78
.direnv/

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,12 +237,12 @@
237237
},
238238
{
239239
"command": "effect.enableSpanStackIgnoreList",
240-
"when": "view === effect-debug-span-stack && effect:skipSpanStackIgnoreList === false",
240+
"when": "view === effect-debug-span-stack && effect:spanStackIgnoreListEnabled === false",
241241
"group": "navigation"
242242
},
243243
{
244244
"command": "effect.disableSpanStackIgnoreList",
245-
"when": "view === effect-debug-span-stack && effect:skipSpanStackIgnoreList === true",
245+
"when": "view === effect-debug-span-stack && effect:spanStackIgnoreListEnabled === true",
246246
"group": "navigation"
247247
}
248248
],

src/Clients.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,17 @@ const runServer = (port: number) =>
183183
Effect.provideService(ClientsContext, yield* ClientsContext)
184184
)
185185

186-
yield* Stream.runForEach(clients.changes, (client) =>
187-
Effect.gen(function*() {
188-
yield* executeCommand("setContext", "effect:hasClients", HashSet.size(client) > 0)
189-
})).pipe(Effect.forkScoped)
186+
yield* Stream.runForEach(
187+
clients.changes,
188+
(client) => (executeCommand("setContext", "effect:hasClients", HashSet.size(client) > 0))
189+
).pipe(
190+
Effect.asVoid,
191+
Effect.forkScoped
192+
)
190193

191194
const serverHandle = yield* FiberHandle.make()
192195
yield* Stream.runForEach(running.changes, ({ running }) =>
193-
Effect.gen(function*(_) {
196+
Effect.gen(function*() {
194197
yield* running
195198
? FiberHandle.run(serverHandle, run, { onlyIfMissing: true })
196199
: FiberHandle.clear(serverHandle)

src/ContextProvider.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,27 +27,25 @@ export const ContextProviderLive = treeDataProvider<TreeNode>("effect-context")(
2727
let nodes: Array<TagNode> = []
2828

2929
const capture = (threadId?: number) =>
30-
Effect.gen(function*(_) {
31-
const sessionOption = yield* _(SubscriptionRef.get(debug.session))
30+
Effect.gen(function*() {
31+
const sessionOption = yield* (SubscriptionRef.get(debug.session))
3232
if (Option.isNone(sessionOption)) {
3333
nodes = []
3434
} else {
3535
const session = sessionOption.value
36-
const pairs = yield* _(session.context(threadId))
36+
const pairs = yield* (session.context(threadId))
3737
nodes = pairs.map((_) => new TagNode(_))
3838
}
39-
yield* _(refresh(Option.none()))
39+
yield* (refresh(Option.none()))
4040
})
4141

42-
yield* Stream.fromPubSub(debug.messages).pipe(
42+
yield* Stream.fromPubSub(debug.events).pipe(
4343
Stream.mapEffect((event) => {
44-
if (event.type !== "event") return Effect.void
45-
46-
switch (event.event) {
47-
case "stopped": {
48-
return Effect.delay(capture(event.body?.threadId), 500)
44+
switch (event._tag) {
45+
case "DebuggerThreadStopped": {
46+
return Effect.delay(capture(event.threadId), 500)
4947
}
50-
case "continued": {
48+
case "DebuggerThreadContinued": {
5149
nodes = []
5250
return refresh(Option.none())
5351
}

src/DebugBreakpointsProvider.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,13 @@ export const DebugBreakpointsProviderLive = treeDataProvider<TreeNode>("effect-d
7979
Effect.forkScoped
8080
)
8181

82-
yield* Stream.fromPubSub(debug.messages).pipe(
82+
yield* Stream.fromPubSub(debug.events).pipe(
8383
Stream.mapEffect((event) => {
84-
if (event.type !== "event") return Effect.void
85-
86-
switch (event.event) {
87-
case "stopped": {
88-
return capture(false, event.body?.threadId).pipe(
89-
Effect.delay(500)
90-
)
84+
switch (event._tag) {
85+
case "DebuggerThreadStopped": {
86+
return capture(false, event.threadId)
9187
}
92-
case "continued": {
88+
case "DebuggerThreadContinued": {
9389
pauseValueToRevealNodes = []
9490
return refresh(Option.none())
9591
}

src/DebugEnv.ts

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,22 @@ import * as DebugChannel from "./DebugChannel"
1212
import { compiledInstrumentationString } from "./instrumentation/instrumentation.compiled"
1313
import { listenFork, VsCodeContext } from "./VsCode"
1414

15+
export class DebuggerThreadStopped extends Data.TaggedClass("DebuggerThreadStopped")<{
16+
threadId?: number
17+
}> {}
18+
19+
export class DebuggerThreadContinued extends Data.TaggedClass("DebuggerThreadContinued")<{
20+
threadId: number
21+
}> {}
22+
23+
export type DebuggerEvent = DebuggerThreadStopped | DebuggerThreadContinued
24+
1525
export interface DebugEnvImpl {
1626
readonly session: SubscriptionRef.SubscriptionRef<Option.Option<Session>>
17-
readonly messages: PubSub.PubSub<Message>
27+
readonly events: PubSub.PubSub<DebuggerEvent>
1828
}
1929

2030
export interface Session {
21-
readonly vscode: vscode.DebugSession
2231
readonly context: (threadId: number | undefined) => Effect.Effect<Array<ContextPair>>
2332
readonly currentSpanStack: (threadId: number | undefined) => Effect.Effect<Array<SpanStackEntry>>
2433
readonly currentFibers: (threadId: number | undefined) => Effect.Effect<Array<FiberEntry>>
@@ -27,23 +36,6 @@ export interface Session {
2736
readonly getAndUnsetPauseStateToReveal: (threadId: number | undefined) => Effect.Effect<PauseStateToReveal>
2837
}
2938

30-
export type Message =
31-
| {
32-
readonly seq: number
33-
readonly type: "event"
34-
readonly event: string
35-
readonly body?: any
36-
}
37-
| {
38-
readonly seq: number
39-
readonly type: "response"
40-
readonly command: string
41-
readonly success: boolean
42-
readonly body?: any
43-
readonly request_seq: number
44-
readonly message?: string
45-
}
46-
4739
export class DebugEnv extends Context.Tag("effect-vscode/DebugEnv")<
4840
DebugEnv,
4941
DebugEnvImpl
@@ -52,7 +44,7 @@ export class DebugEnv extends Context.Tag("effect-vscode/DebugEnv")<
5244
DebugEnv,
5345
Effect.gen(function*() {
5446
const sessionRef = yield* SubscriptionRef.make(Option.none<Session>())
55-
const messages = yield* PubSub.sliding<Message>(100)
47+
const events = yield* PubSub.sliding<DebuggerEvent>(100)
5648

5749
yield* listenFork(
5850
vscode.debug.onDidChangeActiveDebugSession,
@@ -65,7 +57,6 @@ export class DebugEnv extends Context.Tag("effect-vscode/DebugEnv")<
6557
return yield* SubscriptionRef.set(
6658
sessionRef,
6759
Option.some({
68-
vscode: session,
6960
context: (threadId) => withDebugChannel(getContext(threadId)),
7061
currentSpanStack: (threadId) => withDebugChannel(getCurrentSpanStack(threadId)),
7162
currentFibers: (threadId) => withDebugChannel(getCurrentFibers(threadId)),
@@ -83,14 +74,24 @@ export class DebugEnv extends Context.Tag("effect-vscode/DebugEnv")<
8374
createDebugAdapterTracker(_) {
8475
return {
8576
onDidSendMessage(message) {
86-
messages.unsafeOffer(message)
77+
if (message.type === "event" && message.event === "stopped") {
78+
events.unsafeOffer(
79+
new DebuggerThreadStopped({ threadId: message.body?.threadId })
80+
)
81+
} else if (message.type === "event" && message.event === "continued") {
82+
events.unsafeOffer(
83+
new DebuggerThreadContinued({
84+
threadId: message.body?.threadId
85+
})
86+
)
87+
}
8788
}
8889
}
8990
}
9091
})
9192
)
9293

93-
return { session: sessionRef, messages }
94+
return { session: sessionRef, events }
9495
})
9596
)
9697
}

src/DebugFibersProvider.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,28 +31,26 @@ export const DebugFibersProviderLive = treeDataProvider<TreeNode>("effect-debug-
3131
})
3232

3333
const capture = (threadId?: number) =>
34-
Effect.gen(function*(_) {
35-
const sessionOption = yield* _(SubscriptionRef.get(debug.session))
34+
Effect.gen(function*() {
35+
const sessionOption = yield* (SubscriptionRef.get(debug.session))
3636
if (Option.isNone(sessionOption)) {
3737
nodes = []
3838
} else {
3939
const session = sessionOption.value
40-
const pairs = yield* _(session.currentFibers(threadId))
40+
const pairs = yield* (session.currentFibers(threadId))
4141
nodes = pairs.map((_) => new TreeNode(_))
4242
}
43-
yield* _(refresh(Option.none()))
43+
yield* (refresh(Option.none()))
4444
})
4545

46-
yield* Stream.fromPubSub(debug.messages).pipe(
46+
yield* Stream.fromPubSub(debug.events).pipe(
4747
Stream.mapEffect((event) =>
4848
Effect.gen(function*() {
49-
if (event.type !== "event") return
50-
51-
switch (event.event) {
52-
case "stopped": {
53-
return yield* Effect.delay(capture(event.body?.threadId), 500)
49+
switch (event._tag) {
50+
case "DebuggerThreadStopped": {
51+
return yield* Effect.delay(capture(event.threadId), 500)
5452
}
55-
case "continued": {
53+
case "DebuggerThreadContinued": {
5654
nodes = []
5755
return yield* refresh(Option.none())
5856
}

src/DebugSpanStackProvider.ts

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,20 @@ export const DebugSpanStackProviderLive = treeDataProvider<TreeNode>("effect-deb
5050
"ignoreList",
5151
[]
5252
)
53-
let skipIgnoreList = false
5453
yield* ignoreList.changes.pipe(Stream.mapEffect(() => refresh(Option.none())), Stream.runDrain, Effect.forkScoped)
5554

56-
const setSkipIgnoreList = (skip: boolean) => {
57-
skipIgnoreList = skip
55+
let ignoreListEnabled = true
56+
const setIgnoreListEnabled = (enabled: boolean) => {
57+
ignoreListEnabled = enabled
5858
return refresh(Option.none()).pipe(
59-
Effect.zipRight(executeCommand("setContext", "effect:skipSpanStackIgnoreList", skip))
59+
Effect.zipRight(executeCommand("setContext", "effect:spanStackIgnoreListEnabled", enabled))
6060
)
6161
}
62+
yield* setIgnoreListEnabled(true)
6263

6364
const visibleNodes = Effect.gen(function*() {
6465
const ignoreListValue = yield* ignoreList.get
65-
if (skipIgnoreList || ignoreListValue.length === 0) return nodes
66+
if (!ignoreListEnabled || ignoreListValue.length === 0) return nodes
6667
const result = []
6768
for (const node of nodes) {
6869
if (node._tag === "SpanNode") {
@@ -80,8 +81,8 @@ export const DebugSpanStackProviderLive = treeDataProvider<TreeNode>("effect-deb
8081
}).pipe(Effect.asSome)
8182

8283
// allows to toggle ignore list
83-
yield* registerCommand("effect.enableSpanStackIgnoreList", () => setSkipIgnoreList(true))
84-
yield* registerCommand("effect.disableSpanStackIgnoreList", () => setSkipIgnoreList(false))
84+
yield* registerCommand("effect.enableSpanStackIgnoreList", () => setIgnoreListEnabled(true))
85+
yield* registerCommand("effect.disableSpanStackIgnoreList", () => setIgnoreListEnabled(false))
8586

8687
// jump to span location
8788
yield* registerCommand("effect.revealSpanLocation", (node: TreeNode) => {
@@ -95,27 +96,25 @@ export const DebugSpanStackProviderLive = treeDataProvider<TreeNode>("effect-deb
9596
})
9697

9798
const capture = (threadId?: number) =>
98-
Effect.gen(function*(_) {
99-
const sessionOption = yield* _(SubscriptionRef.get(debug.session))
99+
Effect.gen(function*() {
100+
const sessionOption = yield* (SubscriptionRef.get(debug.session))
100101
if (Option.isNone(sessionOption)) {
101102
nodes = []
102103
} else {
103104
const session = sessionOption.value
104-
const pairs = yield* _(session.currentSpanStack(threadId))
105+
const pairs = yield* (session.currentSpanStack(threadId))
105106
nodes = pairs.map((_) => new SpanNode(_))
106107
}
107-
yield* _(refresh(Option.none()))
108+
yield* (refresh(Option.none()))
108109
})
109110

110-
yield* Stream.fromPubSub(debug.messages).pipe(
111+
yield* Stream.fromPubSub(debug.events).pipe(
111112
Stream.mapEffect((event) => {
112-
if (event.type !== "event") return Effect.void
113-
114-
switch (event.event) {
115-
case "stopped": {
116-
return Effect.delay(capture(event.body?.threadId), 500)
113+
switch (event._tag) {
114+
case "DebuggerThreadStopped": {
115+
return Effect.delay(capture(event.threadId), 500)
117116
}
118-
case "continued": {
117+
case "DebuggerThreadContinued": {
119118
nodes = []
120119
return refresh(Option.none())
121120
}

src/LayerHoverProvider.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ import * as Effect from "effect/Effect"
22
import * as Layer from "effect/Layer"
33
import { executeCommandCatch, isExtensionInstalled, registerTextEditorCommand, revealCode } from "./VsCode"
44

5-
export const LayerHoverProviderLive = Effect.gen(function*() {
6-
yield* registerTextEditorCommand("effect.showLayerMermaid", (textEditor) =>
5+
export const LayerHoverProviderLive = registerTextEditorCommand(
6+
"effect.showLayerMermaid",
7+
(textEditor) =>
78
Effect.gen(function*() {
89
// current range
910
const position = textEditor.selection.active
@@ -27,5 +28,5 @@ export const LayerHoverProviderLive = Effect.gen(function*() {
2728
yield* executeCommandCatch("mermaidChart.preview", mermaidCode)
2829
}
2930
}
30-
}))
31-
}).pipe(Layer.scopedDiscard)
31+
})
32+
).pipe(Layer.scopedDiscard)

0 commit comments

Comments
 (0)