From cbbdcb266962df39bbdacb99ccd2a656ce9c3af7 Mon Sep 17 00:00:00 2001 From: Neelesh Chandola Date: Sun, 30 Dec 2018 14:15:39 +0530 Subject: Show deprecation warning for fields of a deprecated enum (#10112) * Show deprecation warning for fields of a deprecated enum * Add test --- compiler/suggest.nim | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'compiler') diff --git a/compiler/suggest.nim b/compiler/suggest.nim index dfa6e5ddb..f149327ac 100644 --- a/compiler/suggest.nim +++ b/compiler/suggest.nim @@ -462,14 +462,17 @@ proc extractPragma(s: PSym): PNode = doAssert result == nil or result.kind == nkPragma proc warnAboutDeprecated(conf: ConfigRef; info: TLineInfo; s: PSym) = - let pragmaNode = extractPragma(s) + let pragmaNode = if s.kind == skEnumField: extractPragma(s.owner) else: extractPragma(s) + let name = + if s.kind == skEnumField: "enum '" & s.owner.name.s & "' which contains field '" & s.name.s & "'" + else: s.name.s if pragmaNode != nil: for it in pragmaNode: if whichPragma(it) == wDeprecated and it.safeLen == 2 and it[1].kind in {nkStrLit..nkTripleStrLit}: - message(conf, info, warnDeprecated, it[1].strVal & "; " & s.name.s) + message(conf, info, warnDeprecated, it[1].strVal & "; " & name) return - message(conf, info, warnDeprecated, s.name.s) + message(conf, info, warnDeprecated, name) proc userError(conf: ConfigRef; info: TLineInfo; s: PSym) = let pragmaNode = extractPragma(s) @@ -486,6 +489,8 @@ proc markUsed(conf: ConfigRef; info: TLineInfo; s: PSym; usageSym: var PSym) = incl(s.flags, sfUsed) if s.kind == skEnumField and s.owner != nil: incl(s.owner.flags, sfUsed) + if sfDeprecated in s.owner.flags: + incl(s.flags, sfDeprecated) if {sfDeprecated, sfError} * s.flags != {}: if sfDeprecated in s.flags: warnAboutDeprecated(conf, info, s) if sfError in s.flags: userError(conf, info, s) -- cgit 1.4.1-2-gfad0