c3c icon indicating copy to clipboard operation
c3c copied to clipboard

Multiple @return! statements in code docs

Open vssukharev opened this issue 1 year ago • 2 comments

For example, I have such code

/**
 * Parses command-line arguments
 * 
 * @param [in] args
 * @param [out] res_args
 *
 * @return! CommandArgsErr.INVALID_SRC_FILE
 * @return! CommandArgsErr.INVALID_OUT_FILE
 * @return! CommandArgsErr.TOO_FEW_ARGUMENTS
 */
fn void! parseCommandArgs(String[] args, CommandArgs* res_args)
{
  if (args.len == 1) {
    hlp::printFuncErrN("Too few arguments");
    return CommandArgsErr.TOO_FEW_ARGUMENTS?;
  }

  for (usz i = 0; i < args.len; ++i) {
    parseFlagSource(args, i, &res_args.src_path);
  }
}

Here, I want @return! to be declared multiple times to avoid too long line with the amount of possible excuses. This code is actually compiled but if I swap @return! blocks by moving TOO_FEW_ARGUMENTS on top:

/**
 * Parses command-line arguments
 * 
 * @param [in] args
 * @param [out] res_args
 *
 * @return! CommandArgsErr.TOO_FEW_ARGUMENTS
 * @return! CommandArgsErr.INVALID_SRC_FILE
 * @return! CommandArgsErr.INVALID_OUT_FILE
 */

I get an error:

49: {
 50:   if (args.len == 1) {
 51:     hlp::printFuncErrN("Too few arguments");
 52:     return CommandArgsErr.TOO_FEW_ARGUMENTS?;
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(/home/starleks/coding/c3-binder/src/helpers/command-args.c3:52:12) Error: This value does not match declared optional returns, it needs to be declared with the other optional returns.

So I propose to write multiple @return! statements in docs instead of writing @return! EXCUSE_1, EXCUSE_2, EXCUSE_3.

vssukharev avatar Oct 12 '24 10:10 vssukharev

This will start working again with this pull request: https://github.com/c3lang/c3c/pull/1555

lerno avatar Oct 13 '24 22:10 lerno

This should now work:

<*
 Parses command-line arguments
  
 @param [in] args
 @param [out] res_args
 @return! CommandArgsErr.INVALID_SRC_FILE
 @return! CommandArgsErr.INVALID_OUT_FILE
 @return! CommandArgsErr.TOO_FEW_ARGUMENTS
*>

Note that if it can throw ANY CommandArgsErr, then you can always write: @return! CommandArgsErr

lerno avatar Oct 15 '24 09:10 lerno

Confirmed to work in most recent version

sandervdbosch avatar Nov 08 '24 15:11 sandervdbosch