in scrooge-linter/src/main/scala/com/twitter/scrooge/linter/LintRule.scala [183:219]
def apply(doc: Document): Seq[LintMessage] = {
val messages = new ArrayBuffer[LintMessage]
doc.defs.collect {
case struct: StructLike =>
languageKeywords.foreach {
case (lang, keywords) =>
if (keywords.contains(struct.originalName)) {
messages += LintMessage(
s"Struct name ${struct.originalName}} is a $lang keyword. Avoid using keywords as identifiers.\n" +
s"${struct.pos.longString}"
)
}
}
for {
(lang, keywords) <- languageKeywords
fields = struct.fields.filter { f => keywords.contains(f.originalName) }
if fields.nonEmpty
fieldNames = fields.map(_.originalName)
} messages += LintMessage(
s"Found field names that are $lang keywords: ${fieldNames.mkString(", ")}. " +
s"Avoid using keywords as identifiers.\n${fields.head.pos.longString}"
)
case service: Service =>
for {
(lang, keywords) <- languageKeywords
functions = service.functions.filter { f => keywords.contains(f.originalName) }
if functions.nonEmpty
functionNames = functions.map(_.originalName)
} messages += LintMessage(
s"Found function names that are $lang keywords: ${functionNames.mkString(", ")}. " +
s"Avoid using keywords as identifiers.\n"
)
}
messages.toSeq
}