浏览代码

Improve error for variants missing args/rets;

bjorn 1 年之前
父节点
当前提交
df0de2b1bf
共有 1 个文件被更改,包括 21 次插入31 次删除
  1. 21 31
      api/main.lua

+ 21 - 31
api/main.lua

@@ -102,36 +102,30 @@ local function processFunction(path, parent)
     fn.examples[k] = processExample(example)
   end
 
-  if not fn.variants then
-    local missingVariants = (not fn.arguments[1] and next(fn.arguments)) or (not fn.returns[1] and next(fn.returns))
-    warnIf(missingVariants, 'Function %q is missing variants', fn.key)
-    fn.variants = {
-      {
-        arguments = fn.arguments,
-        returns = fn.returns
-      }
-    }
-  else
-    assert(fn.arguments, string.format('Function %q with variants does not have arguments list', fn.key))
-    for name, arg in pairs(fn.arguments) do
-      arg.name = name
-    end
+  assert(fn.variants, string.format('Function %q is missing variants', fn.key))
+  assert(fn.arguments, string.format('Function %q does not have arguments list', fn.key))
+  assert(fn.returns, string.format('Function %q does not have returns list', fn.key))
 
-    assert(fn.returns, string.format('Function %q with variants does not have returns list', fn.key))
-    for name, ret in pairs(fn.returns) do
-      ret.name = name
-    end
+  for name, arg in pairs(fn.arguments) do
+    arg.name = name
+  end
 
-    for _, variant in ipairs(fn.variants) do
-      for i, name in ipairs(variant.arguments) do
-        warnIf(not fn.arguments[name], string.format('Function %q variant argument %q does not exist', fn.key, name))
-        variant.arguments[i] = copy(fn.arguments[name])
-      end
+  for name, ret in pairs(fn.returns) do
+    ret.name = name
+  end
 
-      for i, name in ipairs(variant.returns) do
-        warnIf(not fn.returns[name], string.format('Function %q variant return %q does not exist', fn.key, name))
-        variant.returns[i] = copy(fn.returns[name])
-      end
+  for i, variant in ipairs(fn.variants) do
+    assert(variant.arguments, string.format('%q variant #%d is missing arguments', fn.key, i))
+    assert(variant.returns, string.format('%q variant #%d is missing returns', fn.key, i))
+
+    for j, name in ipairs(variant.arguments) do
+      warnIf(not fn.arguments[name], string.format('Function %q variant argument %q does not exist', fn.key, name))
+      variant.arguments[j] = copy(fn.arguments[name])
+    end
+
+    for j, name in ipairs(variant.returns) do
+      warnIf(not fn.returns[name], string.format('Function %q variant return %q does not exist', fn.key, name))
+      variant.returns[j] = copy(fn.returns[name])
     end
   end
 
@@ -149,15 +143,11 @@ local function processFunction(path, parent)
 
     variant.description = unwrap(variant.description)
 
-    assert(variant.arguments, string.format('Variant for %q is missing arguments', fn.key))
-
     for _, arg in ipairs(variant.arguments) do
       arg.description = unwrap(arg.description)
       processTable(arg.table)
     end
 
-    assert(variant.returns, string.format('Variant for %q is missing returns', fn.key))
-
     for _, ret in ipairs(variant.returns) do
       ret.description = unwrap(ret.description)
       processTable(ret.table)