Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
b96e1206
U
uni-app
项目概览
DCloud
/
uni-app
6 个月 前同步成功
通知
751
Star
38709
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
8
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
8
Issue
8
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
b96e1206
编写于
12月 20, 2023
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
wip(uts): 格式化类型不匹配错误
上级
5b67354f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
66 addition
and
31 deletion
+66
-31
packages/uni-uts-v1/src/stacktrace/kotlin.ts
packages/uni-uts-v1/src/stacktrace/kotlin.ts
+66
-31
未找到文件。
packages/uni-uts-v1/src/stacktrace/kotlin.ts
浏览文件 @
b96e1206
...
...
@@ -22,6 +22,9 @@ interface GenerateCodeFrameOptions {
export
function
hbuilderFormatter
(
m
:
MessageSourceLocation
)
{
const
msgs
:
string
[]
=
[]
if
(
m
.
type
===
'
error
'
||
m
.
type
===
'
exception
'
)
{
m
.
message
=
formatKotlinError
(
m
.
message
,
[],
compileFormatters
)
}
let
msg
=
m
.
type
+
'
:
'
+
m
.
message
if
(
m
.
type
===
'
warning
'
)
{
// 忽略部分警告
...
...
@@ -214,7 +217,8 @@ export function parseUTSKotlinRuntimeStacktrace(
const
color
=
options
.
logType
?
COLORS
[
options
.
logType
as
string
]
||
''
:
''
let
error
=
'
error:
'
+
formatKotlinError
(
res
[
0
],
codes
)
let
error
=
'
error:
'
+
formatKotlinError
(
res
[
0
],
codes
,
runtimeFormatters
)
if
(
color
)
{
error
=
color
+
error
+
color
}
...
...
@@ -278,38 +282,65 @@ interface Formatter {
format
(
error
:
string
,
codes
:
string
[]):
string
|
undefined
}
const
formatters
:
Formatter
[]
=
[
{
format
(
error
,
codes
)
{
if
(
error
.
includes
(
'
Failed resolution of: L
'
))
{
let
isUniExtApi
=
error
.
includes
(
'
uts/sdk/modules/DCloudUni
'
)
||
error
.
includes
(
'
io/dcloud/uniapp/extapi/
'
)
let
isUniCloudApi
=
!
isUniExtApi
&&
error
.
includes
(
'
io/dcloud/unicloud/UniCloud
'
)
if
(
isUniExtApi
||
isUniCloudApi
)
{
let
api
=
''
// 第一步先遍历查找^^^^^的索引
const
codeFrames
=
codes
[
codes
.
length
-
1
].
split
(
splitRE
)
const
index
=
codeFrames
.
findIndex
((
frame
)
=>
frame
.
includes
(
'
^^^^^
'
))
if
(
index
>
0
)
{
// 第二步,取前一条记录,查找uni.开头的api
api
=
findApi
(
codeFrames
[
index
-
1
],
isUniCloudApi
?
UNI_CLOUD_API_RE
:
UNI_API_RE
)
}
if
(
api
)
{
api
=
`api
${
api
}
`
}
else
{
api
=
`您使用到的api`
}
return
`[EXCEPTION] 当前运行的基座未包含
${
api
}
,请重新打包自定义基座再运行。`
const
TYPE_MISMATCH_RE
=
/Type mismatch: inferred type is
(
.*
)
but
(
.*
)
was expected/
function
normalizeType
(
type
:
string
)
{
if
(
type
.
endsWith
(
'
?
'
))
{
let
nonOptional
=
type
.
slice
(
0
,
-
1
)
if
(
nonOptional
.
startsWith
(
'
(
'
)
&&
nonOptional
.
endsWith
(
'
)
'
))
{
nonOptional
=
nonOptional
.
slice
(
1
,
-
1
)
}
return
`
${
type
}
(可为空的
${
nonOptional
}
)`
}
return
type
}
const
extApiErrorFormatter
:
Formatter
=
{
format
(
error
,
codes
)
{
if
(
error
.
includes
(
'
Failed resolution of: L
'
))
{
let
isUniExtApi
=
error
.
includes
(
'
uts/sdk/modules/DCloudUni
'
)
||
error
.
includes
(
'
io/dcloud/uniapp/extapi/
'
)
let
isUniCloudApi
=
!
isUniExtApi
&&
error
.
includes
(
'
io/dcloud/unicloud/UniCloud
'
)
if
(
isUniExtApi
||
isUniCloudApi
)
{
let
api
=
''
// 第一步先遍历查找^^^^^的索引
const
codeFrames
=
codes
[
codes
.
length
-
1
].
split
(
splitRE
)
const
index
=
codeFrames
.
findIndex
((
frame
)
=>
frame
.
includes
(
'
^^^^^
'
))
if
(
index
>
0
)
{
// 第二步,取前一条记录,查找uni.开头的api
api
=
findApi
(
codeFrames
[
index
-
1
],
isUniCloudApi
?
UNI_CLOUD_API_RE
:
UNI_API_RE
)
}
if
(
api
)
{
api
=
`api
${
api
}
`
}
else
{
api
=
`您使用到的api`
}
return
`[EXCEPTION] 当前运行的基座未包含
${
api
}
,请重新打包自定义基座再运行。`
}
},
}
},
}
const
typeMismatchErrorFormatter
:
Formatter
=
{
format
(
error
,
_
)
{
const
matches
=
error
.
match
(
TYPE_MISMATCH_RE
)
if
(
matches
)
{
const
[,
inferredType
,
expectedType
]
=
matches
return
`类型不匹配: 推断类型是
${
normalizeType
(
inferredType
)}
,但预期的是
${
normalizeType
(
expectedType
)}
。`
}
},
]
}
const
compileFormatters
:
Formatter
[]
=
[
typeMismatchErrorFormatter
]
const
runtimeFormatters
:
Formatter
[]
=
[
extApiErrorFormatter
]
const
UNI_API_RE
=
/
(
uni
\.\w
+
)
/
const
UNI_CLOUD_API_RE
=
/
(
uniCloud
\.\w
+
)
/
...
...
@@ -321,7 +352,11 @@ function findApi(msg: string, re: RegExp) {
return
''
}
function
formatKotlinError
(
error
:
string
,
codes
:
string
[]):
string
{
function
formatKotlinError
(
error
:
string
,
codes
:
string
[],
formatters
:
Formatter
[]
):
string
{
for
(
const
formatter
of
formatters
)
{
const
err
=
formatter
.
format
(
error
,
codes
)
if
(
err
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录