Skip to content

Commit 8c5941c

Browse files
committed
some improves
1 parent 8da1474 commit 8c5941c

File tree

5 files changed

+44
-25
lines changed

5 files changed

+44
-25
lines changed

locale/en-us/script.lua

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -609,10 +609,12 @@ TYPE_ERROR_TABLE_NO_FIELD =
609609
'Field `{key}` does not exist in the table'
610610
TYPE_ERROR_TABLE_FIELD_DISMATCH =
611611
'The type of field `{key}` is `{child}`, which cannot match `{parent}`'
612-
TYPE_ERROR_UNION_ALL_DISMATCH =
612+
TYPE_ERROR_CHILD_ALL_DISMATCH =
613613
'All subtypes in `{child}` cannot match `{parent}`'
614+
TYPE_ERROR_PARENT_ALL_DISMATCH =
615+
'`{child}` cannot match any subtypes in `{parent}`'
614616
TYPE_ERROR_UNION_DISMATCH =
615-
'`{child}` in union type cannot match `{parent}`'
617+
'`{child}` cannot match `{parent}`'
616618
TYPE_ERROR_OPTIONAL_DISMATCH =
617619
'Optional type cannot match `{parent}`'
618620
TYPE_ERROR_NUMBER_LITERAL_TO_INTEGER =

locale/pt-br/script.lua

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -609,10 +609,12 @@ TYPE_ERROR_TABLE_NO_FIELD = -- TODO: need translate!
609609
'Field `{key}` does not exist in the table'
610610
TYPE_ERROR_TABLE_FIELD_DISMATCH = -- TODO: need translate!
611611
'The type of field `{key}` is `{child}`, which cannot match `{parent}`'
612-
TYPE_ERROR_UNION_ALL_DISMATCH = -- TODO: need translate!
612+
TYPE_ERROR_CHILD_ALL_DISMATCH = -- TODO: need translate!
613613
'All subtypes in `{child}` cannot match `{parent}`'
614+
TYPE_ERROR_PARENT_ALL_DISMATCH = -- TODO: need translate!
615+
'`{child}` cannot match any subtypes in `{parent}`'
614616
TYPE_ERROR_UNION_DISMATCH = -- TODO: need translate!
615-
'`{child}` in union type cannot match `{parent}`'
617+
'`{child}` cannot match `{parent}`'
616618
TYPE_ERROR_OPTIONAL_DISMATCH = -- TODO: need translate!
617619
'Optional type cannot match `{parent}`'
618620
TYPE_ERROR_NUMBER_LITERAL_TO_INTEGER = -- TODO: need translate!

locale/zh-cn/script.lua

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -609,10 +609,12 @@ TYPE_ERROR_TABLE_NO_FIELD =
609609
'表中不存在字段 `{key}`'
610610
TYPE_ERROR_TABLE_FIELD_DISMATCH =
611611
'字段 `{key}` 的类型为 `{child}`,无法匹配 `{parent}`'
612-
TYPE_ERROR_UNION_ALL_DISMATCH =
612+
TYPE_ERROR_CHILD_ALL_DISMATCH =
613613
'`{child}` 中的所有子类型均无法匹配 `{parent}`'
614+
TYPE_ERROR_PARENT_ALL_DISMATCH =
615+
'`{child}` 无法匹配 `{parent}` 中的任何子类'
614616
TYPE_ERROR_UNION_DISMATCH =
615-
'联合类型中的 `{child}` 无法匹配 `{parent}`'
617+
'`{child}` 无法匹配 `{parent}`'
616618
TYPE_ERROR_OPTIONAL_DISMATCH =
617619
'可选类型无法匹配 `{parent}`'
618620
TYPE_ERROR_NUMBER_LITERAL_TO_INTEGER =

locale/zh-tw/script.lua

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -609,10 +609,12 @@ TYPE_ERROR_TABLE_NO_FIELD = -- TODO: need translate!
609609
'Field `{key}` does not exist in the table'
610610
TYPE_ERROR_TABLE_FIELD_DISMATCH = -- TODO: need translate!
611611
'The type of field `{key}` is `{child}`, which cannot match `{parent}`'
612-
TYPE_ERROR_UNION_ALL_DISMATCH = -- TODO: need translate!
612+
TYPE_ERROR_CHILD_ALL_DISMATCH = -- TODO: need translate!
613613
'All subtypes in `{child}` cannot match `{parent}`'
614+
TYPE_ERROR_PARENT_ALL_DISMATCH = -- TODO: need translate!
615+
'`{child}` cannot match any subtypes in `{parent}`'
614616
TYPE_ERROR_UNION_DISMATCH = -- TODO: need translate!
615-
'`{child}` in union type cannot match `{parent}`'
617+
'`{child}` cannot match `{parent}`'
616618
TYPE_ERROR_OPTIONAL_DISMATCH = -- TODO: need translate!
617619
'Optional type cannot match `{parent}`'
618620
TYPE_ERROR_NUMBER_LITERAL_TO_INTEGER = -- TODO: need translate!

script/vm/type.lua

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,8 @@ local function checkValue(parent, child, mark, err)
133133
or child.type == 'number' then
134134
if parent[1] ~= child[1] then
135135
err[#err+1] = 'TYPE_ERROR_INTEGER_DISMATCH'
136-
err[#err+1] = child
137-
err[#err+1] = parent
136+
err[#err+1] = child[1]
137+
err[#err+1] = parent[1]
138138
return false
139139
end
140140
end
@@ -148,8 +148,8 @@ local function checkValue(parent, child, mark, err)
148148
or child.type == 'doc.field.name' then
149149
if parent[1] ~= child[1] then
150150
err[#err+1] = 'TYPE_ERROR_STRING_DISMATCH'
151-
err[#err+1] = child
152-
err[#err+1] = parent
151+
err[#err+1] = child[1]
152+
err[#err+1] = parent[1]
153153
return false
154154
end
155155
end
@@ -161,8 +161,8 @@ local function checkValue(parent, child, mark, err)
161161
or child.type == 'doc.type.boolean' then
162162
if parent[1] ~= child[1] then
163163
err[#err+1] = 'TYPE_ERROR_BOOLEAN_DISMATCH'
164-
err[#err+1] = child
165-
err[#err+1] = parent
164+
err[#err+1] = child[1]
165+
err[#err+1] = parent[1]
166166
return false
167167
end
168168
end
@@ -234,19 +234,21 @@ function vm.isSubType(uri, child, parent, mark, err)
234234
child = global
235235
elseif child.type == 'vm.node' then
236236
if config.get(uri, 'Lua.type.weakUnionCheck') then
237-
local hasKnownType
237+
local hasKnownType = 0
238238
for n in child:eachObject() do
239239
if getNodeName(n) then
240-
hasKnownType = true
240+
hasKnownType = hasKnownType + 1
241241
if vm.isSubType(uri, n, parent, mark, err) == true then
242242
return true, err
243243
end
244244
end
245245
end
246-
if hasKnownType then
247-
err[#err+1] = 'TYPE_ERROR_UNION_ALL_DISMATCH'
248-
err[#err+1] = child
249-
err[#err+1] = parent
246+
if hasKnownType > 0 then
247+
if hasKnownType > 1 then
248+
err[#err+1] = 'TYPE_ERROR_CHILD_ALL_DISMATCH'
249+
err[#err+1] = child
250+
err[#err+1] = parent
251+
end
250252
return false, err
251253
end
252254
return true, err
@@ -293,10 +295,10 @@ function vm.isSubType(uri, child, parent, mark, err)
293295
end
294296
parent = global
295297
elseif parent.type == 'vm.node' then
296-
local hasKnownType
298+
local hasKnownType = 0
297299
for n in parent:eachObject() do
298300
if getNodeName(n) then
299-
hasKnownType = true
301+
hasKnownType = hasKnownType + 1
300302
if vm.isSubType(uri, child, n, mark, err) == true then
301303
return true, err
302304
end
@@ -307,7 +309,15 @@ function vm.isSubType(uri, child, parent, mark, err)
307309
return true, err
308310
end
309311
end
310-
return not hasKnownType, err
312+
if hasKnownType > 0 then
313+
if hasKnownType > 1 then
314+
err[#err+1] = 'TYPE_ERROR_PARENT_ALL_DISMATCH'
315+
err[#err+1] = child
316+
err[#err+1] = parent
317+
end
318+
return false, err
319+
end
320+
return true, err
311321
end
312322

313323
---@cast parent vm.node.object
@@ -342,7 +352,7 @@ function vm.isSubType(uri, child, parent, mark, err)
342352
and child[1]
343353
and not math.tointeger(child[1]) then
344354
err[#err+1] = 'TYPE_ERROR_NUMBER_LITERAL_TO_INTEGER'
345-
err[#err+1] = child
355+
err[#err+1] = child[1]
346356
return false, err
347357
end
348358
if child.type == 'global'
@@ -604,7 +614,8 @@ local ErrorMessageMap = {
604614
TYPE_ERROR_BOOLEAN_DISMATCH = {'child', 'parent'},
605615
TYPE_ERROR_TABLE_NO_FIELD = {'key'},
606616
TYPE_ERROR_TABLE_FIELD_DISMATCH = {'key', 'child', 'parent'},
607-
TYPE_ERROR_UNION_ALL_DISMATCH = {'child', 'parent'},
617+
TYPE_ERROR_CHILD_ALL_DISMATCH = {'child', 'parent'},
618+
TYPE_ERROR_PARENT_ALL_DISMATCH = {'child', 'parent'},
608619
TYPE_ERROR_UNION_DISMATCH = {'child', 'parent'},
609620
TYPE_ERROR_OPTIONAL_DISMATCH = {'parent'},
610621
TYPE_ERROR_NUMBER_LITERAL_TO_INTEGER = {'child'},

0 commit comments

Comments
 (0)