Skip to content

Commit b6a7d5e

Browse files
authored
Merge pull request #162 from ono-max/patch-3
ruby: Support `::DEBUGGER__::NaiveString` class
2 parents d20d421 + 9684af8 commit b6a7d5e

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

extension/src/VisualizationBackend/RbVisualizationSupport.ts

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { DataExtractionResult, DataResult } from "@hediet/debug-visualizer-data-extraction";
1+
import { DataExtractionResult, DataExtractorId, DataResult } from "@hediet/debug-visualizer-data-extraction";
22
import { hotClass, registerUpdateReconciler } from "@hediet/node-reload";
33
import { Config } from "../Config";
44
import { DebuggerViewProxy } from "../proxies/DebuggerViewProxy";
@@ -96,10 +96,9 @@ class RbVisualizationBackend extends VisualizationBackendBase {
9696
}
9797
};
9898
}
99-
const preferredId = preferredExtractorId || '';
100-
const wrappedExpr = `
101-
DebugVisualizer.to_debug_visualizer_protocol_json("${preferredId}", ${expression})
102-
`;
99+
100+
const wrappedExpr = await this._getExpression(preferredExtractorId || '', expression, frameId);
101+
103102
const reply = await this.debugSession.evaluate({
104103
expression: wrappedExpr,
105104
frameId,
@@ -139,4 +138,21 @@ class RbVisualizationBackend extends VisualizationBackendBase {
139138
};
140139
}
141140
}
141+
142+
private async _getExpression(preferredId: string | DataExtractorId, expression: string, frameId: number | undefined) {
143+
// From version 1.7, `::DEBUGGER__::NaiveString` class is introduced to get whole body of String.
144+
// https://github.com/ruby/debug/commit/2f510f0ed685da2f78b370fb8898ffbd2a4f1cf7
145+
const reply = await this.debugSession.evaluate({
146+
expression: "defined? ::DEBUGGER__::NaiveString",
147+
frameId,
148+
context: this.defaultContext
149+
});
150+
const wrappedExpr = `DebugVisualizer.to_debug_visualizer_protocol_json("${preferredId}", ${expression})`;
151+
// Because reply.result is '"constant"', we use includes method here.
152+
if (reply.result.includes('constant')) {
153+
return `::DEBUGGER__::NaiveString.new(${wrappedExpr})`;
154+
} else {
155+
return wrappedExpr;
156+
}
157+
}
142158
}

0 commit comments

Comments
 (0)