Skip to content

Commit bf0f31f

Browse files
mchernyavskyyopox
authored andcommitted
TY: Infer types for const generic defaults
1 parent 8242636 commit bf0f31f

File tree

6 files changed

+9
-3
lines changed

6 files changed

+9
-3
lines changed

src/main/grammars/RustParser.bnf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,8 @@ private DefaultTypeParameterType ::= '=' TypeReference { pin = 1 }
451451
ConstParameter ::= OuterAttr* const identifier TypeAscription DefaultConstParameter? {
452452
pin = 2
453453
implements = [ "org.rust.lang.core.psi.ext.RsGenericParameter"
454-
"org.rust.lang.core.psi.ext.RsOuterAttributeOwner" ]
454+
"org.rust.lang.core.psi.ext.RsOuterAttributeOwner"
455+
"org.rust.lang.core.psi.ext.RsInferenceContextOwner" ]
455456
mixin = "org.rust.lang.core.psi.ext.RsConstParameterImplMixin"
456457
stubClass = "org.rust.lang.core.stubs.RsConstParameterStub"
457458
elementTypeFactory = "org.rust.lang.core.stubs.StubImplementationsKt.factory"

src/main/kotlin/org/rust/ide/annotator/RsErrorAnnotator.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,7 @@ class RsErrorAnnotator : AnnotatorBase(), HighlightRangeExtension {
615615
}
616616

617617
private fun checkConstParameter(holder: RsAnnotationHolder, constParameter: RsConstParameter) {
618+
collectDiagnostics(holder, constParameter)
618619
checkConstGenerics(holder, constParameter)
619620
checkDuplicates(holder, constParameter)
620621
}

src/main/kotlin/org/rust/ide/inspections/RsDiagnosticBasedInspection.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ abstract class RsDiagnosticBasedInspection : RsLocalInspectionTool() {
1414
override fun buildVisitor(holder: RsProblemsHolder, isOnTheFly: Boolean): RsVisitor = object : RsVisitor() {
1515
override fun visitFunction(o: RsFunction) = collectDiagnostics(holder, o)
1616
override fun visitConstant(o: RsConstant) = collectDiagnostics(holder, o)
17+
override fun visitConstParameter(o: RsConstParameter) = collectDiagnostics(holder, o)
1718
override fun visitArrayType(o: RsArrayType) = collectDiagnostics(holder, o)
1819
override fun visitBaseType(o: RsBaseType) = collectDiagnostics(holder, o)
1920
override fun visitTraitRef(o: RsTraitRef) = collectDiagnostics(holder, o)

src/main/kotlin/org/rust/lang/core/psi/ext/RsInferenceContextOwner.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ val RsInferenceContextOwner.body: RsElement?
1919
get() = when (this) {
2020
is RsArrayType -> expr
2121
is RsConstant -> expr
22+
is RsConstParameter -> blockExpr
2223
is RsFunction -> block
2324
is RsVariantDiscriminant -> expr
2425
is RsExpressionCodeFragment -> expr

src/main/kotlin/org/rust/lang/core/types/infer/TypeInference.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ class RsInferenceContext(
204204
else -> {
205205
val (retTy, expr) = when (element) {
206206
is RsConstant -> element.typeReference?.type to element.expr
207+
is RsConstParameter -> element.typeReference?.type to element.blockExpr
207208
is RsArrayType -> TyInteger.USize.INSTANCE to element.expr
208209
is RsVariantDiscriminant -> {
209210
val enum = element.contextStrict<RsEnumItem>()

src/test/kotlin/org/rust/ide/inspections/typecheck/RsTypeCheckInspectionTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ class RsTypeCheckInspectionTest : RsInspectionsTestBase(RsTypeCheckInspection::c
2929

3030
fun `test typecheck in const argument`() = checkByText("""
3131
#![feature(const_generics)]
32-
struct S<const N: usize>;
33-
trait T<const N: usize> {
32+
#![feature(const_generics_defaults)]
33+
struct S<const N: usize = <error>{ 1u8 }</error>>;
34+
trait T<const N: usize = <error>{ 1u8 }</error>> {
3435
fn foo<const N: usize>(&self) -> S<{ N }>;
3536
}
3637
impl T<<error>1u8</error>> for S<<error>1u8</error>> {

0 commit comments

Comments
 (0)