0
votes

I have a js file with a bunch of functions for modifying a user. All the functions are documented with jsdoc making it easy to see what arguments to use and what the function does.

However I now want to extend every function with an optional context variable. So from this

/**
 * creates a new user object
 * @param {string} email
 * @param {string} displayName
 * @param {string} password
 * @returns {User|Error}
 */
function newUser(email, displayName, password)

to this

/**
 * creates a new user object
 * @param {string} email
 * @param {string} displayName
 * @param {string} password
 * @param {*} ctx
 * @returns {User|Error}
 */
function newUser(email, displayName, password, ctx)

but since I have a lot of functions that would use the same ctx variable I thought that I could create a wrapper, like this

function withContext(ctx) {
  /**
   * @namespace
   * @borrows newUser as new
   */
  return {
    new: (...args) => newUser(...args, ctx),
  };
}

and it does work, in the sense that the right function seems to be called with the right arguments, but I can't seem to get IntelliSense to pick it up in vscode which has me thinking that I probably haven't written the jsdoc correctly.

according to vscode it says that the new function just takes an any[], which it of course does, but it is not what the documentation for newUser states, so am I doing something wrong with my documentation or is it simply not possible?

1

1 Answers

0
votes

Seems like it is possible


/**
 * @typedef {Object} UserService
 * @property {newUser} newUser
 */
/**
 * @returns {UserService}
 */
function withContext(ctx) {
  return {
    newUser: (...args) => newUser(...args, ctx),
  };
}

that will "fix" IntelliSense and the documentation follows the function newUser that is previously defined