acorn-typescript: TypeError: Class constructors cannot be invoked without 'new'

Hi, im getting the error: TypeError: Class constructors cannot be invoked without ‘new’

Stack trace…

MyExtension error: TypeError: Class constructors cannot be invoked without 'new'
    at e [as constructor] (c:\Users\myuser\Desktop\Workspace\my-extension\node_modules\acorn-typescript\lib\index.js:1:15137)
    at e [as constructor] (c:\Users\myuser\Desktop\Workspace\my-extension\node_modules\acorn-typescript\lib\index.js:1:16812)
    at new e (c:\Users\myuser\Desktop\Workspace\my-extension\node_modules\acorn-typescript\lib\index.js:1:22553)
    at Function.e.parse (c:\Users\myuser\Desktop\Workspace\my-extension\node_modules\acorn-typescript\lib\index.js:1:98376)
    at ClassAnalyzer.astParse (c:\Users\myuser\Desktop\Workspace\my-extension\src\ClassAnalyzer.ts:20:4)
    at c:\Users\myuser\Desktop\Workspace\my-extension\src\ClassAnalyzer.ts:47:22
    at Array.forEach (<anonymous>)
    at ClassAnalyzer.getComponents (c:\Users\myuser\Desktop\Workspace\my-extension\src\ClassAnalyzer.ts:44:7)
    at MyExtension.provideCompletionItems (c:\Users\myuser\Desktop\Workspace\my-extension\src\MyExtension.ts:69:44)
    at oe.provideCompletionItems (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:100:52903)
    at c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:100:73510
    at le.s (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:100:65165)
    at le.$provideCompletionItems (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:100:73496)
    at a.N (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:110:11620)
    at a.M (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:110:11338)
    at a.H (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:110:10393)
    at a.G (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:110:9412)
    at c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:110:8200
    at v.invoke (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:63:145)
    at h.deliver (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:63:2121)
    at i.fire (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:63:1729)
    at g.fire (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:72:14852)
    at c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:126:32403
    at v.invoke (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:63:145)
    at h.deliver (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:63:2121)
    at i.fire (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:63:1729)
    at g.fire (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:72:14852)
    at MessagePortMain.<anonymous> (c:\Users\myuser\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\api\node\extensionHostProcess.js:126:30529)
    at MessagePortMain.emit (C:\Users\myuser\Desktop\Workspace\my-extension\lib\events.js:513:28)
    at MessagePortMain.emit (C:\Users\myuser\Desktop\Workspace\my-extension\lib\domain.js:489:12)
    at Object.MessagePortMain._internalPort.emit (C:\Users\myuser\Desktop\Workspace\my-extension\lib\electron\js2c\utility_init.js:2:367)
    at Object.topLevelDomainCallback (C:\Users\myuser\Desktop\Workspace\my-extension\lib\domain.js:161:15)
    at Object.callbackTrampoline (node:internal/async_hooks:128:24) {vslsStack: Array(33), stack: 'TypeError: Class constructors cannot be invok…Trampoline (node:internal/async_hooks:128:24)', message: 'Class constructors cannot be invoked without 'new''}

Part of my code…

import { Node, Parser } from "acorn";
import { tsPlugin } from "acorn-typescript";
import { lstatSync, readFileSync, readdirSync } from "fs";
import path = require("path");

export class ClassAnalyzer{
  private parser: any;

  constructor() {
    this.parser = Parser.extend(
      require("acorn-jsx")(),
      tsPlugin({
        dts: true,
      })
    );
  }
...

Weird errors in index.d.ts from the library… image

Thanks.

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 19 (12 by maintainers)

Commits related to this issue

Most upvoted comments

HAHA, I known that, while u parse the code u should enable locations in acorn options

doesn’t the plugin allow it

acorn doesn’t support a runtime env options. So i didn’t know the code u want to parse is a tsx/ts file or a dts file. The two files are in conflict. Maybe i will give a PR to acorn to solve this situation.

I will perfect the readme of this plugin

Sure!

index.d.ts

import type { ReactNode, Ref } from "react";
import type { CommonProps } from "./types";

export type SlideApi = {
  goToNextSlide: () => void;
  goToPreviousSlide: () => void;
};

export type SlideProps = CommonProps & {
  children: ReactNode;
  defaultSlide?: number;
  onSlideChange?: (slide: number) => void;
  ref?: Ref<SlideApi>;
};

declare function SlideProps(props: SlideProps): JSX.Element;

export default SlideProps;

Another example of code that I want to parse…

CustomButton.jsx

import React, { forwardRef } from "react";
import PropTypes from "prop-types";

const CustomButton = forwardRef(
  (
    {
      iconStart,
      iconEnd,
      text
    },
    ref
  ) => {
    return (
      <Button ref={ref}>
        {iconStart}
        {text}
        {iconEnd}
      </Button>
    );
  }
);

CustomButton.displayName = "CustomButton";

CustomButton.propTypes = {
  /**
   * Main text.
   */
  text: PropTypes.string,

  /**
   * An optional icon at the start.
   */
  iconStart: PropTypes.element,

  /**
   * An optional icon at the end.
   */
  iconEnd: PropTypes.element,
};

export default CustomButton;

I’m providing the same code above