microsoft / microsoft/TypeScript

jsDoc intellisense support for @augments/@extends

Offen
#30,943 1 Kommentar 37 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Awaiting More Feedback Domain: JavaScript Domain: JSDoc Suggestion
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.4k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit nachzuverfolgen, wie JSDoc @extends- und @augments-Annotationen dargestellt werden und wie IntelliSense Mitglieder für den verwendeten Typ sammelt. Verwende die FileBase- und StyleFile-Beispiele in diesem Issue, um die fehlenden Prototyp- und eigenen Eigenschaften zu reproduzieren, und überprüfe anschließend, dass geerbte Mitglieder erscheinen, ohne bestehende Vorschläge für Typmitglieder zu beeinträchtigen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
javascript, typescript
Bereich
compilers, developer-experience
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.