开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
main
分支 (1312)
标签 (98)
main
revert-14068-dataflow-config-refactor
dependabot/github_actions/actions/checkout-4
workflow/coverage/update
sashabu/frontend-update
mbg/csharp/standalone/dotnet-version
dbartol/fake/codeql-cli-2.14.4
jhelie/add-provenance-to-metadata
rb/extract-everything
redsun82/fix-build
alexdenisov/extract-next-call-from-foreach
redsun82/test
max-schaefer/server-side-url-redirect-help
codeql-cli-2.14.3
lgtm.com
codeql-cli-2.14.2
revert-13869-sashabu/swift-logging-compiler
jketema/replace-simple-range-analysis-with-semantic-range-analysis
rc/3.10
revert-13792-swap-argument-order-in-invalid-ptr-deref
codeql-cli/latest
codeql-cli/v2.14.3
codeql-cli/v2.14.2
codeql-cli/v2.14.1
codeql-cli/v2.14.0
codeql-cli/v2.13.5
codeql-cli/v2.13.4
codeql-cli/v2.13.3
codeql-cli/v2.13.1
codeql-cli/v2.13.0
codeql-cli/v2.12.7
codeql-cli/v2.12.6
codeql-cli/v2.12.5
codeql-cli/v2.12.4
codeql-cli/v2.12.3
codeql-cli/v2.12.2
codeql-cli/v2.12.1
codeql-cli/v2.12.0
codeql-cli/v2.11.6
codeql-cli/v2.11.5
main
分支 (1312)
标签 (98)
main
revert-14068-dataflow-config-refactor
dependabot/github_actions/actions/checkout-4
workflow/coverage/update
sashabu/frontend-update
mbg/csharp/standalone/dotnet-version
dbartol/fake/codeql-cli-2.14.4
jhelie/add-provenance-to-metadata
rb/extract-everything
redsun82/fix-build
alexdenisov/extract-next-call-from-foreach
redsun82/test
max-schaefer/server-side-url-redirect-help
codeql-cli-2.14.3
lgtm.com
codeql-cli-2.14.2
revert-13869-sashabu/swift-logging-compiler
jketema/replace-simple-range-analysis-with-semantic-range-analysis
rc/3.10
revert-13792-swap-argument-order-in-invalid-ptr-deref
codeql-cli/latest
codeql-cli/v2.14.3
codeql-cli/v2.14.2
codeql-cli/v2.14.1
codeql-cli/v2.14.0
codeql-cli/v2.13.5
codeql-cli/v2.13.4
codeql-cli/v2.13.3
codeql-cli/v2.13.1
codeql-cli/v2.13.0
codeql-cli/v2.12.7
codeql-cli/v2.12.6
codeql-cli/v2.12.5
codeql-cli/v2.12.4
codeql-cli/v2.12.3
codeql-cli/v2.12.2
codeql-cli/v2.12.1
codeql-cli/v2.12.0
codeql-cli/v2.11.6
codeql-cli/v2.11.5
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
main
分支 (1312)
标签 (98)
main
revert-14068-dataflow-config-refactor
dependabot/github_actions/actions/checkout-4
workflow/coverage/update
sashabu/frontend-update
mbg/csharp/standalone/dotnet-version
dbartol/fake/codeql-cli-2.14.4
jhelie/add-provenance-to-metadata
rb/extract-everything
redsun82/fix-build
alexdenisov/extract-next-call-from-foreach
redsun82/test
max-schaefer/server-side-url-redirect-help
codeql-cli-2.14.3
lgtm.com
codeql-cli-2.14.2
revert-13869-sashabu/swift-logging-compiler
jketema/replace-simple-range-analysis-with-semantic-range-analysis
rc/3.10
revert-13792-swap-argument-order-in-invalid-ptr-deref
codeql-cli/latest
codeql-cli/v2.14.3
codeql-cli/v2.14.2
codeql-cli/v2.14.1
codeql-cli/v2.14.0
codeql-cli/v2.13.5
codeql-cli/v2.13.4
codeql-cli/v2.13.3
codeql-cli/v2.13.1
codeql-cli/v2.13.0
codeql-cli/v2.12.7
codeql-cli/v2.12.6
codeql-cli/v2.12.5
codeql-cli/v2.12.4
codeql-cli/v2.12.3
codeql-cli/v2.12.2
codeql-cli/v2.12.1
codeql-cli/v2.12.0
codeql-cli/v2.11.6
codeql-cli/v2.11.5
codeql
/
javascript
/
ql
/
src
/
Declarations
/
UnreachableMethodOverloads.ql
codeql
/
javascript
/
ql
/
src
/
Declarations
/
UnreachableMethodOverloads.ql
UnreachableMethodOverloads.ql 5.60 KB
一键复制 编辑 原始数据 按行查看 历史
Erik Krogh Kristensen 提交于 2022年07月15日 05:31 +08:00 . fix common misspellings throughout github/codeql
/**
* @name Unreachable method overloads
* @description Having multiple overloads with the same parameter types in TypeScript
* makes all overloads except the first one unreachable, as the compiler
* always resolves calls to the textually first matching overload.
* @kind problem
* @problem.severity warning
* @id js/unreachable-method-overloads
* @precision high
* @tags correctness
* typescript
*/
import javascript
/**
* Gets the `i`th parameter from the method signature.
*/
SimpleParameter getParameter(MethodSignature sig, int i) { result = sig.getBody().getParameter(i) }
/**
* Gets a string-representation of the type-annotation from the `i`th parameter in the method signature.
*/
string getParameterTypeAnnotation(MethodSignature sig, int i) {
result = getParameter(sig, i).getTypeAnnotation().toString()
}
/**
* Gets the other overloads for an overloaded method signature.
*/
MethodSignature getOtherMatchingSignatures(MethodSignature sig) {
signaturesMatch(result, sig) and
result != sig
}
/**
* Gets the kind of the member-declaration. Either "static" or "instance".
*/
string getKind(MemberDeclaration m) {
if m.isStatic() then result = "static" else result = "instance"
}
/**
* A call-signature that originates from a MethodSignature in the AST.
*/
private class MethodCallSig extends CallSignatureType {
string name;
MethodCallSig() {
exists(MethodSignature sig |
this = sig.getBody().getCallSignature() and
name = sig.getName()
)
}
/**
* Gets the name of any member that has this signature.
*/
string getName() { result = name }
}
pragma[noinline]
private MethodCallSig getMethodCallSigWithFingerprint(
string name, int optionalParams, int numParams, int requiredParms, SignatureKind kind
) {
name = result.getName() and
optionalParams = result.getNumOptionalParameter() and
numParams = result.getNumParameter() and
requiredParms = result.getNumRequiredParameter() and
kind = result.getKind()
}
/**
* Holds if the two call signatures could be overloads of each other and have the same parameter types.
*/
predicate matchingCallSignature(MethodCallSig method, MethodCallSig other) {
other =
getMethodCallSigWithFingerprint(method.getName(), method.getNumOptionalParameter(),
method.getNumParameter(), method.getNumRequiredParameter(), method.getKind()) and
// purposely not looking at number of type arguments.
forall(int i | i in [0 .. -1 + method.getNumParameter()] |
method.getParameter(i) = other.getParameter(i) // This is sometimes imprecise, so it is still a good idea to compare type annotations.
) and
// shared type parameters are equal.
forall(int i |
i in [0 .. -1 +
min(int num | num = method.getNumTypeParameter() or num = other.getNumTypeParameter())]
|
method.getTypeParameterBound(i) = other.getTypeParameterBound(i)
)
}
/**
* Gets which overload index the MethodSignature has among the overloads of the same name.
*/
int getOverloadIndex(MethodSignature sig) {
sig.getDeclaringType().getMethodOverload(sig.getName(), result) = sig
}
pragma[noinline]
private MethodSignature getMethodSignatureWithFingerprint(
ClassOrInterface declaringType, string name, int numParameters, string kind
) {
result.getDeclaringType() = declaringType and
result.getName() = name and
getKind(result) = kind and
result.getBody().getNumParameter() = numParameters
}
/**
* Holds if the two method signatures are overloads of each other and have the same parameter types.
*/
predicate signaturesMatch(MethodSignature method, MethodSignature other) {
// the initial search for another overload in a single call for better join-order.
other =
getMethodSignatureWithFingerprint(method.getDeclaringType(), method.getName(),
method.getBody().getNumParameter(), getKind(method)) and
// same this parameter (if exists)
(
not exists(method.getBody().getThisTypeAnnotation()) and
not exists(other.getBody().getThisTypeAnnotation())
or
method.getBody().getThisTypeAnnotation().getType() =
other.getBody().getThisTypeAnnotation().getType()
) and
// The types are compared in matchingCallSignature. This is a consistency check that the textual representation of the type-annotations are somewhat similar.
forall(int i | i in [0 .. -1 + method.getBody().getNumParameter()] |
getParameterTypeAnnotation(method, i) = getParameterTypeAnnotation(other, i)
) and
matchingCallSignature(method.getBody().getCallSignature(), other.getBody().getCallSignature())
}
from ClassOrInterface decl, string name, MethodSignature previous, MethodSignature unreachable
where
previous = decl.getMethod(name) and
unreachable = getOtherMatchingSignatures(previous) and
// If the method is part of inheritance between classes/interfaces, then there can sometimes be reasons for having this pattern.
not exists(decl.getASuperTypeDeclaration().getMethod(name)) and
not exists(ClassOrInterface sub |
decl = sub.getASuperTypeDeclaration() and
exists(sub.getMethod(name))
) and
// If a later method overload has more type parameters, then that overload can be selected by explicitly declaring the type arguments at the callsite.
// This comparison removes those cases.
unreachable.getBody().getNumTypeParameter() <= previous.getBody().getNumTypeParameter() and
// We always select the first of the overloaded methods.
not exists(MethodSignature later | later = getOtherMatchingSignatures(previous) |
getOverloadIndex(later) < getOverloadIndex(previous)
)
select unreachable,
"This overload of " + name + "() is unreachable, the $@ overload will always be selected.",
previous, "previous"
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/Xiphin/codeql.git
git@gitee.com:Xiphin/codeql.git
Xiphin
codeql
codeql
main
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /