microsoft / microsoft/TypeScript

jsDoc intellisense support for @augments/@extends

Open
#30,943 1 comment 37 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Awaiting More Feedback Domain: JavaScript Domain: JSDoc Suggestion
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
2d 4h
Merged PRs (30d)
132

Description

Issue Type: Feature Request

Please make intellisense support @augments/@extends tags. Currently intellisense is not showing base class properties both prototype and own.

Here is my base class

const fs = require('fs');

/**
 * Used as an abstract base class for file classes.
 * @param {string} filePath Path of the file.
 */
function FileBase(filePath) {
    if (this.__proto__ === FileBase.prototype)
        throw `'FileBase' class cannot be instantiated. It's an abstract class.`;

    if (!fs.existsSync(filePath))
        throw `'filePath' doesn't point an existing file.`;

    this.filePath = filePath;

    /**
      * Stores file content. Dont directly set this property. Use resetContent method instead.
      * @type {string}
      */
    this.content = fs.readFileSync(filePath).toString();
    /**
     * Stores fs.Stats of file.
     * @type {fs.Stats}
     */
    this.stats = fs.lstatSync(filePath);
    /**@type {{content:string,stats:fs.Stats}[]} */
    this.history = [];
}

/**
 * Resets content property with current file content.
 * @returns {string} File content.
 */
FileBase.prototype.resetContent = function () {
    ...
}

module.exports = FileBase;

Example usage of base class. I tagged with @extends.

/**
 * @typedef {'module'|'layout-module'|'library'|'standalone-main'|'standalone-dependency'} StyleFileType
 */

/**
 * Represents a style file.
 * @extends FileBase
 * @constructor
 * @param {string} filePath Path of file.
 * @param {StyleFileType} fileType Type of style.
 * @param {Config} config
 */
function StyleFile(filePath, fileType, config) {
    if (!(this instanceof StyleFile)) {
        return new StyleFile(filePath, fileType, config);
    }

    /**
     * If StyleFile constructor is used to create objects, redirect object creation to child classes.
     */
    if (this.__proto__ === StyleFile.prototype) {
        switch (fileType) {
            case 'module':
                return new ModuleStyleFile(filePath, config);
            case 'layout-module':
                return new LayoutModuleStyleFile(filePath, config);
            case 'library':
                return new LibraryStyleFile(filePath, config);
            case 'standalone-dependency':
                return new StandaloneLibraryDependencyStyleFile(filePath, config);
            case 'standalone-main':
                return new StandaloneLibraryMainStyleFile(filePath, config);
            default:
                throw 'Invalid file type.';
        }
    }
    FileBase.call(this, filePath);

    this.fileType = fileType;
    this.config = config;

    /**@type {StyleFile[]} */
    this.parentFiles = null;
    /**@type {StyleFile[]} */
    this.childFiles = null;
}
StyleFile.prototype = Object.create(FileBase.prototype);

StyleFile.prototype.getImportedStylePaths = function (content) {
   .....
}

module.exports = StyleFile;

Currently it only displays members from the used type.
issue-augments-1

VS Code version: Code 1.33.0 (0dd516dd412d42323fc3464531b1c715d51c4c1a, 2019-04-04T15:14:28.026Z)
OS version: Windows_NT x64 10.0.17134

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing how JSDoc @extends and @augments annotations are represented and how IntelliSense gathers members for the used type. Use the FileBase and StyleFile examples in this issue to reproduce the missing prototype and own properties, then verify that inherited members appear without breaking existing type-member suggestions.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, typescript
Domain
compilers, developer-experience
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.