@@ -15,6 +15,7 @@ import dotty.tools.dotc.ast.untpd
15
15
import dotty .tools .dotc .core .Comments .Comment
16
16
import dotty .tools .dotc .core .Constants .Constant
17
17
import dotty .tools .dotc .core .Contexts .*
18
+ import dotty .tools .dotc .core .Decorators .toTermName
18
19
import dotty .tools .dotc .core .Denotations .SingleDenotation
19
20
import dotty .tools .dotc .core .Flags
20
21
import dotty .tools .dotc .core .Flags .*
@@ -765,6 +766,13 @@ class Completions(
765
766
).flatMap(_.alternatives.map(_.symbol)).toSet
766
767
)
767
768
769
+ private lazy val EqualsClass : ClassSymbol = requiredClass(" scala.Equals" )
770
+ private lazy val ArrowAssocClass : ClassSymbol = requiredClass(" scala.Predef.ArrowAssoc" )
771
+ private lazy val EnsuringClass : ClassSymbol = requiredClass(" scala.Predef.Ensuring" )
772
+ private lazy val StringFormatClass : ClassSymbol = requiredClass(" scala.Predef.StringFormat" )
773
+ private lazy val nnMethod : Symbol = defn.ScalaPredefModule .info.member(" nn" .toTermName).symbol
774
+ private lazy val runtimeCheckedMethod : Symbol = defn.ScalaPredefModule .info.member(" runtimeChecked" .toTermName).symbol
775
+
768
776
private def isNotLocalForwardReference (sym : Symbol )(using Context ): Boolean =
769
777
! sym.isLocalToBlock ||
770
778
! sym.srcPos.isAfter(completionPos.originalCursorPosition) ||
@@ -783,6 +791,17 @@ class Completions(
783
791
(sym.isField && ! isJavaClass && ! isModuleOrClass) || sym.getter != NoSymbol
784
792
catch case _ => false
785
793
794
+ def isInheritedFromScalaLibrary (sym : Symbol ) =
795
+ sym.owner == defn.AnyClass ||
796
+ sym.owner == defn.ObjectClass ||
797
+ sym.owner == defn.ProductClass ||
798
+ sym.owner == EqualsClass ||
799
+ sym.owner == ArrowAssocClass ||
800
+ sym.owner == EnsuringClass ||
801
+ sym.owner == StringFormatClass ||
802
+ sym == nnMethod ||
803
+ sym == runtimeCheckedMethod
804
+
786
805
def symbolRelevance (sym : Symbol ): Int =
787
806
var relevance = 0
788
807
// symbols defined in this file are more relevant
@@ -800,7 +819,7 @@ class Completions(
800
819
case _ =>
801
820
802
821
// symbols whose owner is a base class are less relevant
803
- if sym.owner == defn. AnyClass || sym.owner == defn. ObjectClass
822
+ if isInheritedFromScalaLibrary( sym)
804
823
then relevance |= IsInheritedBaseMethod
805
824
// symbols not provided via an implicit are more relevant
806
825
if sym.is(Implicit ) ||
@@ -812,7 +831,7 @@ class Completions(
812
831
// accessors of case class members are more relevant
813
832
if ! sym.is(CaseAccessor ) then relevance |= IsNotCaseAccessor
814
833
// public symbols are more relevant
815
- if ! sym.isPublic then relevance |= IsNotCaseAccessor
834
+ if ! sym.isPublic then relevance |= IsNotPublic
816
835
// synthetic symbols are less relevant (e.g. `copy` on case classes)
817
836
if sym.is(Synthetic ) && ! sym.isAllOf(EnumCase ) then
818
837
relevance |= IsSynthetic
0 commit comments