dbux icon indicating copy to clipboard operation
dbux copied to clipboard

[Bug] SyntaxError: Identifier '_class' has already been declared

Open dmaretskyi opened this issue 2 years ago • 2 comments

Bug Report

Bug Summary

Getting SyntaxError: Identifier '_class' has already been declared after adding a class declaration

Steps To Reproduce

  1. Open the built-in tutorial excercises
  2. Add a class declaration to the excercise source file
  3. Run DBUX

Expected behavior

Not crash.

Actual behavior

Crashes with an error SyntaxError: Identifier '_class' has already been declared.

Attachments

Relevant Code

class Foo {}

Dbux Output Log

[Dbux ActionGroupType] Missing UserActionTypes in groupByActionType: PracticeSessionChanged, TestRunFinished, NewExerciseProgress, ExerciseProgressChanged, RunFile, RuntimeServerStatusChanged, ShowHelp, SelectTraceById, TreeViewOther, TreeViewCollapseChangeOther, TDValueRender, TDExecutionsGroupModeChanged, TDTraceUse, TDDebugUse, TDAsyncUse, TDAsyncGoToForkParent, TDAsyncGoToScheduler, DataFlowViewSearchModeChanged, DataFlowViewFilterModeChanged, DataFlowSelectTrace, DecorationVisibilityChanged, NavBarButtonsVisibilityChanged, ErrorLogNotificationVisibilityChanged, GlobalDebugAppUse, GlobalConsoleUse, GlobalProgramsUse, GlobalPackageSortModeChanged, SearchModeChanged, CallGraphVisibilityChanged, CallGraphGraphDocumentModeChanged, AsyncCallGraphTrace, AsyncCallGraphSchedulerTrace, AsyncCallGraphValueTrace, AsyncCallGraphError, StopProjectRunner, ProjectViewsVisibilityChanged, CheckSystem, ShowOutputChannel, ShowApplicationEntryFile, OpenWebsite, ShowExerciseIntroductionView, NewApplications, PathwaysVisibilityChanged, ProjectViewListModeChanged
[Dbux dbux-code] Starting Dbux v0.7.9 (mode=production)...
[Dbux projectControl] Initializing dbux-projects: projectsRoot = "/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/dbux_projects", dependencyRoot = "/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9", samplesRoot = "/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/samples"
[Dbux PracticeManager] getDbuxPath(), relativePath='@dbux/cli/bin/dbux.js', getDbuxRoot()='/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9', config={"dependencyRoot":"/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9","projectsRoot":"/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/dbux_projects","samplesRoot":"/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/samples","dbuxLanguage":"en"}
[Dbux installUtil] Checking library dependencies. Found 0 missing: 
[Dbux TraceDecoConfig] Missing decoration config for trace types: BranchStatement, BranchExpression, BranchPush, BranchPop, BranchDecision, ResumeAsync, Finally, Catch, TryExit, FinallyExit, Yield, ResumeGen, PatternAssignment, PatternWriteVar, PatternWriteAndDeclareVar, PatternWriteME, Meta
[Dbux exerciseProgresses] entry does not have `_id` prop (only reports once): [object Object]
[Dbux Project todomvc-es6] [reloadExercises] found 11 in "undefined"
[Dbux Project node-fetch] [reloadExercises] found 1 in "undefined"
[Dbux Project javascript-algorithms] [reloadExercises] found 3 in "undefined"
[Dbux Project getting-started] [reloadExercises] found 11 in "undefined"
[Dbux Project express] [reloadExercises] found 22 in "undefined"
[Dbux Project async-js] [reloadExercises] found 2 in "undefined"
[Dbux Project 2048] [reloadExercises] found 4 in "undefined"
[Dbux PracticeManager] Cannot find exercise of id or name:express#20 in chapter#3 (express). Make sure exerciseIds in "exerciseList.json" are correct.
[Dbux PracticeManager] Cannot find exercise of id or name:express#21 in chapter#3 (express). Make sure exerciseIds in "exerciseList.json" are correct.
[Dbux Project javascript-algorithms] [reloadExercises] found 313 in "javascript-algorithms-all"
[Dbux Call Graph HostWrapper] client connected. - Starting host...
[Dbux Call Graph] silenced postMessage after Host shutdown: [{"messageType":2,"componentId":32,"commandName":"_publicInternal.dispose","args":[],"callId":47},{"messageType":2,"componentId":31,"commandName":"_publicInternal.dispose","args":[],"callId":48},{"messageType":2,"componentId":30,"commandName":"_publicInternal.dispose","args":[],"callId":49},{"messageType":2,"componentId":29,"commandName":"_publicInternal.dispose","args":[],"callId":50},{"messageType":2,"componentId":28,"commandName":"_publicInternal.dispose","args":[],"callId":51},{"messageType":2,"componentId":27,"commandName":"_publicInternal.dispose","args":[],"callId":52},{"messageType":2,"componentId":26,"commandName":"_publicInternal.dispose","args":[],"callId":53},{"messageType":2,"componentId":25,"commandName":"_publicInternal.dispose","args":[],"callId":54},{"messageType":2,"componentId":24,"commandName":"_publicInternal.dispose","args":[],"callId":55},{"messageType":2,"componentId":23,"commandName":"_publicInternal.dispose","args":[],"callId":56},{"messageType":2,"componentId":22,"commandName":"_publicInternal.dispose","args":[],"callId":57},{"messageType":2,"componentId":21,"commandName":"_publicInternal.dispose","args":[],"callId":58},{"messageType":2,"componentId":20,"commandName":"_publicInternal.dispose","args":[],"callId":59},{"messageType":2,"componentId":19,"commandName":"_publicInternal.dispose","args":[],"callId":60},{"messageType":2,"componentId":18,"commandName":"_publicInternal.dispose","args":[],"callId":61},{"messageType":2,"componentId":17,"commandName":"_publicInternal.dispose","args":[],"callId":62},{"messageType":2,"componentId":16,"commandName":"_publicInternal.dispose","args":[],"callId":63},{"messageType":2,"componentId":15,"commandName":"_publicInternal.dispose","args":[],"callId":64},{"messageType":2,"componentId":14,"commandName":"_publicInternal.dispose","args":[],"callId":65},{"messageType":2,"componentId":13,"commandName":"_publicInternal.dispose","args":[],"callId":66},{"messageType":2,"componentId":12,"commandName":"_publicInternal.dispose","args":[],"callId":67},{"messageType":2,"componentId":11,"commandName":"_publicInternal.dispose","args":[],"callId":68},{"messageType":2,"componentId":10,"commandName":"_publicInternal.dispose","args":[],"callId":69},{"messageType":2,"componentId":9,"commandName":"_publicInternal.dispose","args":[],"callId":70},{"messageType":2,"componentId":8,"commandName":"_publicInternal.dispose","args":[],"callId":71},{"messageType":2,"componentId":7,"commandName":"_publicInternal.dispose","args":[],"callId":72},{"messageType":2,"componentId":6,"commandName":"_publicInternal.dispose","args":[],"callId":73},{"messageType":2,"componentId":5,"commandName":"_publicInternal.dispose","args":[],"callId":74},{"messageType":2,"componentId":4,"commandName":"_publicInternal.dispose","args":[],"callId":75},{"messageType":2,"componentId":33,"commandName":"_publicInternal.dispose","args":[],"callId":76},{"messageType":2,"componentId":3,"commandName":"_publicInternal.dispose","args":[],"callId":77},{"messageType":2,"componentId":2,"commandName":"_publicInternal.dispose","args":[],"callId":78},{"messageType":2,"componentId":1,"commandName":"_publicInternal.dispose","args":[],"callId":79}]
[Dbux installUtil] Checking library dependencies. Found 0 missing: 
[Dbux exec] > $ "node" --version
[Dbux exec]   ("node" EXIT: code=0, signal=null)
[Dbux checkSystem] checkSystem() result: Dbux requires the following programs to be installed and available on your system in order to run smoothly. Please make sure, you have all of them installed.

✓  shell
    found at "/bin/bash"
✓  node
    found at "/Users/dmaretskyi/.nodenv/shims/node" (v16.17.1 satisfies 16)
✓  npm
    found at "/Users/dmaretskyi/.nodenv/shims/npm"

SUCCESS! All system dependencies seem to be in order.
[Dbux net/listener] server listening on port :3374...
[Dbux PracticeManager] getDbuxPath(), relativePath='@dbux/cli/dist/linkOwnDependencies.js', getDbuxRoot()='/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9', config={"dependencyRoot":"/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9","projectsRoot":"/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/dbux_projects","samplesRoot":"/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/samples","dbuxLanguage":"en"}
[Dbux PracticeManager] getDbuxPath(), relativePath='@dbux/cli/bin/dbux.js', getDbuxRoot()='/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9', config={"dependencyRoot":"/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9","projectsRoot":"/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/dbux_projects","samplesRoot":"/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/samples","dbuxLanguage":"en"}

Dbux Runtime (Console) Log

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
"node" --enable-source-maps --stack-trace-limit=10bash-3.2$ "node" --enable-source-maps --stack-trace-limit=1000 --enable-source-maps -r /Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/@dbux/cli/dist/linkOwnDependencies.js "/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/@dbux/cli/bin/dbux.js" run --esnext --pw=.* "/Users/dmaretskyi/.vscode/extensions/domi.LongestWordLength/for-bad.js" -- ting-started/find 
[Dbux] run:  /Users/dmaretskyi/.nodenv/versions/16.17.1/bin/node /Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/dbux_projects/getting-started/findLongestWordLength/for-bad.js
[Dbux] [moduleFilter] REGISTER ~/.vscode/extensions/domi.dbux-code-0.7.9/dbux_projects/getting-started/findLongestWordLength/for-bad.js (file)
[@babel/register] cacheRoot=/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/dbux_projects/getting-started, cacheDir=/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/dbux_projects/getting-started/node_modules/.cache/@babel/register
[@babel/register] Cache miss [FileModified] for "/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/dbux_projects/getting-started/findLongestWordLength/for-bad.js"
[@dbux/cli] command failed
  [Caused By] SyntaxError: Identifier '_class' has already been declared
    at Object.compileFunction (node:vm:360:18)
    ... 21 lines matching cause stack trace ...
    at node:internal/main/run_main_module:17:47 {
  name: 'NestedError',
  cause: SyntaxError: Identifier '_class' has already been declared
      at Object.compileFunction (node:vm:360:18)
      at wrapSafe (node:internal/modules/cjs/loader:1055:15)
      at Module._compile (node:internal/modules/cjs/loader:1090:27)
      at Module._compile (/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/pirates/lib/index.js:119:24)
      at Module._extensions..js (node:internal/modules/cjs/loader:1180:10)
      at Object.newLoader [as .js] (/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/pirates/lib/index.js:123:7)
      at Module.load (node:internal/modules/cjs/loader:1004:32)
      at Function.Module._load (node:internal/modules/cjs/loader:839:12)
      at Module.require (node:internal/modules/cjs/loader:1028:19)
      at require (node:internal/modules/cjs/helpers:102:18)
      at requireDynamic (/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/@dbux/cli/dist/commands/run.js:1:9685)
      at /Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/@dbux/cli/dist/commands/run.js:1:7593
      at Object.handler (/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/@dbux/cli/dist/commands/run.js:1:8177)
      at Object.runCommand (/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/yargs/build/index.cjs:446:48)
      at Object.parseArgs [as _parseArgs] (/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/yargs/build/index.cjs:2697:57)
      at Object.get [as argv] (/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/yargs/build/index.cjs:2651:25)
      at Object.<anonymous> (/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/@dbux/cli/bin/dbux.js:22:3)
      at Module._compile (node:internal/modules/cjs/loader:1126:14)
      at Object.Module._extensions..js (node:internal/modules/cjs/loader:1180:10)
      at Module.load (node:internal/modules/cjs/loader:1004:32)
      at Function.Module._load (node:internal/modules/cjs/loader:839:12)
      at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
      at node:internal/main/run_main_module:17:47
}
[@dbux/cli] waiting 20s for process to finish...
exiting...
Trace: [Dbux [@dbux/runtime]] NOTE: process.exit(-1) was called by the application.
    at E (/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/@dbux/runtime/dist/index-node.js:2:4345)
    at /Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/@dbux/runtime/dist/index-node.js:2:3652
    at process.exit (/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/@dbux/runtime/dist/index-node.js:2:437447)
    at /Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/node_modules/@dbux/cli/dist/commands/run.js:1:8544
[Dbux [@dbux/runtime]] Dbux is trying to delay shutdown (process.exit) by 60s...
[Dbux [@dbux/runtime]] exiting now.

Screenshots

System (please complete the following information):

  • OS: macos
  • Dbux VSCode Extension version: 0.7.9
  • Affected Dbux Packages (+ version numbers):
  ➜  domi.dbux-code-0.7.9 npm list   
[email protected] /Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9
├── @babel/[email protected]
├── @dbux/[email protected]
├── @dbux/[email protected]
├── @dbux/[email protected]
├── @dbux/[email protected]
├── @dbux/[email protected]
├── @dbux/[email protected]
├── @dbux/[email protected]
├── @dbux/[email protected]
├── @dbux/[email protected]
├── @types/[email protected]
├── @types/[email protected]
├── @types/[email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]
  • "@babel/plugin-proposal-class-properties": "^7.18.6"

  • node 16

Additional context

After installing the vscode extension I was getting an error about @babel/plugin-proposal-class-properties package missing. So I've installed it manually in the tutorial excercises workspace:

"@babel/plugin-proposal-class-properties": "^7.18.6"

dmaretskyi avatar Aug 11 '23 19:08 dmaretskyi

I've also dumped the source after transformation with the dbux plugin:

var _defineProperty = require("@babel/runtime/helpers/defineProperty");
var _dbux = _dbux_init(
  (typeof __dbux__ !== "undefined" && __dbux__) || require("@dbux/runtime")
);
var _cid = _dbux.getProgramContextId();
var _al = _dbux.getArgLength,
  _af = _dbux.arrayFrom,
  _uot = _dbux.unitOfType,
  _diph = _dbux.DefaultInitializerPlaceholder,
  _pI = _dbux.pushImmediate,
  _pF = _dbux.popFunction,
  _pFI = _dbux.popFunctionInterruptable,
  _par = _dbux.registerParams,
  _tr = _dbux.traceReturn,
  _tra = _dbux.traceReturnAsync,
  _tt = _dbux.traceThrow,
  _tid = _dbux.newTraceId,
  _td = _dbux.traceDeclaration,
  _te = _dbux.traceExpression,
  _tev = _dbux.traceExpressionVar,
  _twv = _dbux.traceWriteVar,
  _tct = _dbux.traceCatch,
  _tctI = _dbux.traceCatchInterruptable,
  _tf = _dbux.traceFinally,
  _tfI = _dbux.traceFinallyInterruptable,
  _tme = _dbux.traceExpressionME,
  _tmeo = _dbux.traceExpressionMEOptional,
  _twme = _dbux.traceWriteME,
  _tdme = _dbux.traceDeleteME,
  _tue = _dbux.traceUpdateExpressionVar,
  _tume = _dbux.traceUpdateExpressionME,
  _bce = _dbux.traceBCE,
  _a = _dbux.traceArg,
  _tsa = _dbux.traceSpreadArg,
  _tcr = _dbux.traceCallResult,
  _tae = _dbux.traceArrayExpression,
  _toe = _dbux.traceObjectExpression,
  _tfi = _dbux.traceForIn,
  _tc = _dbux.traceClass,
  _ti = _dbux.traceInstance,
  _aw = _dbux.preAwait,
  _aw2 = _dbux.wrapAwait,
  _aw3 = _dbux.postAwait,
  _yi = _dbux.preYield,
  _yi2 = _dbux.wrapYield,
  _yi3 = _dbux.postYield,
  _tp = _dbux.tracePattern,
  _apu = _dbux.addPurpose;
try {
  var _class;
  var _t3_, _t4_;
  class _class {
    constructor() {
      _ti(this, (_t3_ = _tid(3)), []);
    }
  }
  _class = _class;
  _defineProperty(Foo, "_dbux_class", function () {
    _tc(_class, (_t4_ = _tid(4)), [], []);
  });
  _class._dbux_class(), delete _class._dbux_class;
  _dbux.t(5);
} finally {
  _dbux.popProgram();
}
function _dbux_init(dbuxRuntime) {
  if (!dbuxRuntime.initProgram) {
    throw new Error(
      '[@dbux/runtime] "initProgram" unavailable in "for-bad.js"'
    );
  }
  return dbuxRuntime.initProgram(
    {
      program: {
        _staticId: 1,
        loc: {
          start: { line: 1, column: 0, index: 0 },
          end: { line: 2, column: 0, index: 14 },
        },
        type: 1,
        name: "for-bad.js",
        displayName: "for-bad.js",
        fileName: "for-bad.js",
        filePath:
          "/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/dbux_projects/getting-started/findLongestWordLength/for-bad.js",
        programIndex: 1,
      },
      contexts: [
        {
          _staticId: 1,
          loc: {
            start: { line: 1, column: 0, index: 0 },
            end: { line: 2, column: 0, index: 14 },
          },
          type: 1,
          name: "for-bad.js",
          displayName: "for-bad.js",
          fileName: "for-bad.js",
          filePath:
            "/Users/dmaretskyi/.vscode/extensions/domi.dbux-code-0.7.9/dbux_projects/getting-started/findLongestWordLength/for-bad.js",
          programIndex: 1,
        },
      ],
      traces: [
        {
          loc: {
            start: { line: 1, column: 0, index: 0 },
            end: { line: 1, column: 0, index: 0 },
          },
          _traceId: 1,
          _staticContextId: 1,
          type: 1,
        },
        {
          loc: {
            start: { line: 2, column: 0, index: 14 },
            end: { line: 2, column: 0, index: 14 },
          },
          _traceId: 2,
          _staticContextId: 1,
          type: 2,
        },
        {
          displayName: "{}",
          loc: {
            start: { line: 1, column: 10, index: 10 },
            end: { line: 1, column: 12, index: 12 },
          },
          _traceId: 3,
          _staticContextId: 1,
          type: 45,
          data: { privateMethods: [] },
          dataNode: { isNew: true },
        },
        {
          displayName: "class Foo {}",
          loc: {
            start: { line: 1, column: 0, index: 0 },
            end: { line: 1, column: 12, index: 12 },
          },
          _traceId: 4,
          _staticContextId: 1,
          type: 43,
          data: { name: "Foo", staticMethods: [], publicMethods: [] },
          dataNode: { isNew: true },
        },
        {
          loc: {
            start: { line: 2, column: 0, index: 14 },
            end: { line: 2, column: 0, index: 14 },
          },
          _traceId: 5,
          _staticContextId: 1,
          type: 22,
        },
      ],
      loops: [],
    },
    {}
  );
}

dmaretskyi avatar Aug 11 '23 19:08 dmaretskyi

Elimiminating the usage of @babel/plugin-proposal-class-properties seems to fix the issue for me

dmaretskyi avatar Aug 11 '23 20:08 dmaretskyi