@esteele Jenkins CI reporting about code analysis
See the full report here: https://jenkins.plone.org/job/package-plone.app.discussion/118/violations
```
plone/app/discussion/conversation.py:334:5: D001 found adapts( replace it with zope.component.adapter
plone/app/discussion/conversation.py:415:5: D001 found adapts( replace it with zope.component.adapter
plone/app/discussion/conversation.py:422:24: C812 missing trailing comma
plone/app/discussion/testing.py:43:9: D001 found xmlconfig.file( replace it with self.loadZCML(
plone/app/discussion/testing.py:96:33: C812 missing trailing comma
plone/app/discussion/testing.py:119:37: C812 missing trailing comma
plone/app/discussion/testing.py:121:36: C812 missing trailing comma
plone/app/discussion/interfaces.py:50:80: C812 missing trailing comma
plone/app/discussion/interfaces.py:162:31: C812 missing trailing comma
plone/app/discussion/interfaces.py:163:10: C812 missing trailing comma
plone/app/discussion/interfaces.py:168:52: C812 missing trailing comma
plone/app/discussion/interfaces.py:170:23: C812 missing trailing comma
plone/app/discussion/interfaces.py:204:75: C812 missing trailing comma
plone/app/discussion/interfaces.py:218:56: C812 missing trailing comma
plone/app/discussion/interfaces.py:232:22: C812 missing trailing comma
plone/app/discussion/interfaces.py:238:48: C812 missing trailing comma
plone/app/discussion/interfaces.py:248:44: C812 missing trailing comma
plone/app/discussion/interfaces.py:335:47: C812 missing trailing comma
plone/app/discussion/interfaces.py:347:54: C812 missing trailing comma
plone/app/discussion/interfaces.py:354:22: C812 missing trailing comma
plone/app/discussion/comment.py:117:40: C812 missing trailing comma
plone/app/discussion/comment.py:161:80: C812 missing trailing comma
plone/app/discussion/comment.py:175:41: C812 missing trailing comma
plone/app/discussion/comment.py:176:19: C812 missing trailing comma
plone/app/discussion/comment.py:283:19: C812 missing trailing comma
plone/app/discussion/comment.py:287:38: C812 missing trailing comma
plone/app/discussion/comment.py:349:33: C812 missing trailing comma
plone/app/discussion/comment.py:350:14: C812 missing trailing comma
plone/app/discussion/comment.py:352:28: C812 missing trailing comma
plone/app/discussion/comment.py:419:14: C812 missing trailing comma
plone/app/discussion/comment.py:421:28: C812 missing trailing comma
plone/app/discussion/upgrades.py:63:25: S001 found module formatter
plone/app/discussion/browser/controlpanel.py:37:46: C812 missing trailing comma
plone/app/discussion/browser/controlpanel.py:71:44: C812 missing trailing comma
plone/app/discussion/browser/controlpanel.py:74:39: C812 missing trailing comma
plone/app/discussion/browser/controlpanel.py:95:40: C812 missing trailing comma
plone/app/discussion/browser/controlpanel.py:96:14: C812 missing trailing comma
plone/app/discussion/browser/captcha.py:25:5: D001 found adapts( replace it with zope.component.adapter
plone/app/discussion/browser/captcha.py:26:15: Q000 Remove bad quotes.
plone/app/discussion/browser/captcha.py:28:1: E305 expected 2 blank lines after class or function definition, found 1
plone/app/discussion/browser/captcha.py:37:5: D001 found adapts( replace it with zope.component.adapter
plone/app/discussion/browser/captcha.py:69:1: W391 blank line at end of file
plone/app/discussion/browser/comment.py:115:1: E305 expected 2 blank lines after class or function definition, found 1
plone/app/discussion/browser/traversal.py:24:5: D001 found adapts( replace it with zope.component.adapter
plone/app/discussion/browser/comments.py:39:38: C812 missing trailing comma
plone/app/discussion/browser/comments.py:46:33: C812 missing trailing comma
plone/app/discussion/browser/comments.py:53:49: C812 missing trailing comma
plone/app/discussion/browser/comments.py:58:39: C812 missing trailing comma
plone/app/discussion/browser/comments.py:178:15: T000 Todo note found.
plone/app/discussion/browser/comments.py:182:16: T000 Todo note found.
plone/app/discussion/browser/comments.py:229:47: C812 missing trailing comma
plone/app/discussion/browser/comments.py:241:34: C812 missing trailing comma
plone/app/discussion/browser/comments.py:244:69: C812 missing trailing comma
plone/app/discussion/browser/comments.py:294:17: C812 missing trailing comma
plone/app/discussion/browser/validator.py:37:5: D001 found adapts( replace it with zope.component.adapter
plone/app/discussion/tests/test_comments_viewlet.py:83:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:91:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:105:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:147:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:154:38: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:163:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:177:38: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:222:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:231:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:244:44: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:251:40: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:280:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:289:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:302:39: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:310:35: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:346:40: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:351:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:394:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:441:18: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:457:40: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:535:36: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:588:14: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:593:41: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:600:22: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:606:41: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:617:51: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:630:21: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:634:18: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:638:20: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:656:66: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:665:14: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:692:54: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:693:14: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:726:71: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:740:67: C815 missing trailing comma in Python 3.5+
plone/app/discussion/tests/test_conversation.py:74:34: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:82:33: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:280:34: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:328:34: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:398:11: T000 Todo note found.
plone/app/discussion/tests/test_conversation.py:514:56: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:518:61: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:528:64: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:532:41: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:542:64: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:546:41: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:620:11: T000 Todo note found.
plone/app/discussion/tests/test_conversation.py:628:38: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:634:43: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:638:40: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:646:54: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:670:43: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:683:40: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:689:34: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:849:59: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:854:59: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:860:61: C812 missing trailing comma
plone/app/discussion/tests/test_moderation_view.py:82:59: C812 missing trailing comma
plone/app/discussion/tests/test_moderation_view.py:90:59: C812 missing trailing comma
plone/app/discussion/tests/test_moderation_view.py:98:59: C812 missing trailing comma
plone/app/discussion/tests/test_moderation_view.py:184:33: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:73:37: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:85:37: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:89:46: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:94:46: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:141:42: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:156:45: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:163:53: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:167:53: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:171:52: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:178:44: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:182:37: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:32:43: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:43:14: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:54:18: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:65:18: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:76:18: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:102:25: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:113:23: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:124:17: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:130:68: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:137:18: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:170:34: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:171:14: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:182:34: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:183:14: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:190:34: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:191:14: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:205:41: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:214:44: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:221:35: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:50:34: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:51:14: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:64:28: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:66:24: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:128:54: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:222:61: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:264:31: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:265:14: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:273:31: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:274:14: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:284:31: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:285:14: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:290:41: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:296:31: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:297:14: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:29:49: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:33:49: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:37:48: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:41:48: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:82:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:84:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:102:66: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:108:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:110:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:119:46: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:131:66: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:137:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:139:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:144:46: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:153:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:155:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:160:46: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:168:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:170:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:188:66: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:195:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:197:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:208:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:210:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:220:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:222:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:231:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:233:42: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:246:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:248:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:275:66: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:280:57: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:281:14: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:295:54: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:300:52: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:301:14: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:333:57: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:334:14: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:360:31: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:365:31: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:370:33: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:385:76: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:392:73: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:393:14: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:399:28: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:419:55: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:434:57: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:441:57: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:447:28: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:462:33: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:480:33: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:555:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:557:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:570:43: C812 missing trailing comma
plone/app/discussion/tests/test_notifications.py:179:41: C812 missing trailing comma
plone/app/discussion/tests/test_notifications.py:222:16: C812 missing trailing comma
plone/app/discussion/tests/test_notifications.py:226:16: C812 missing trailing comma
plone/app/discussion/tests/test_notifications.py:232:16: C812 missing trailing comma
plone/app/discussion/tests/test_notifications.py:238:16: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:71:42: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:82:42: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:91:42: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:112:33: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:124:33: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:160:62: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:168:50: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:176:67: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:184:48: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:194:54: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:203:65: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:233:66: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:240:37: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:242:38: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:246:57: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:257:30: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:265:66: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:293:69: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:297:77: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:301:76: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:309:49: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:333:66: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:374:57: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:411:57: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:447:57: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:456:60: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:465:63: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:474:66: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:479:38: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:483:48: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:487:41: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:492:38: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:497:34: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:499:44: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:504:41: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:509:37: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:511:47: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:516:44: C812 missing trailing comma
plone/app/discussion/tests/test_functional.py:31:46: C812 missing trailing comma
plone/app/discussion/tests/test_events.py:8:1: I001 isort found an import in the wrong position
plone/app/discussion/tests/test_events.py:155:57: C812 missing trailing comma
plone/app/discussion/tests/test_events.py:176:57: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:33:44: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:99:57: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:115:31: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:123:33: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:131:36: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:139:42: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:147:39: C812 missing trailing comma
plone/app/discussion/tests/test_robot.py:26:57: C812 missing trailing comma
```
Follow [these instructions](https://github.com/plone/jenkins.plone.org/blob/master/docs/source/run-qa-on-package.rst) to reproduce it locally.


@loechel Jenkins CI reporting about code analysis
See the full report here: https://jenkins.plone.org/job/package-plone.app.discussion/117/violations
```
plone/app/discussion/conversation.py:334:5: D001 found adapts( replace it with zope.component.adapter
plone/app/discussion/conversation.py:415:5: D001 found adapts( replace it with zope.component.adapter
plone/app/discussion/conversation.py:422:24: C812 missing trailing comma
plone/app/discussion/testing.py:43:9: D001 found xmlconfig.file( replace it with self.loadZCML(
plone/app/discussion/testing.py:96:33: C812 missing trailing comma
plone/app/discussion/testing.py:119:37: C812 missing trailing comma
plone/app/discussion/testing.py:121:36: C812 missing trailing comma
plone/app/discussion/interfaces.py:50:80: C812 missing trailing comma
plone/app/discussion/interfaces.py:162:31: C812 missing trailing comma
plone/app/discussion/interfaces.py:163:10: C812 missing trailing comma
plone/app/discussion/interfaces.py:168:52: C812 missing trailing comma
plone/app/discussion/interfaces.py:170:23: C812 missing trailing comma
plone/app/discussion/interfaces.py:204:67: C812 missing trailing comma
plone/app/discussion/interfaces.py:218:56: C812 missing trailing comma
plone/app/discussion/interfaces.py:232:22: C812 missing trailing comma
plone/app/discussion/interfaces.py:238:48: C812 missing trailing comma
plone/app/discussion/interfaces.py:248:44: C812 missing trailing comma
plone/app/discussion/interfaces.py:335:47: C812 missing trailing comma
plone/app/discussion/interfaces.py:347:54: C812 missing trailing comma
plone/app/discussion/interfaces.py:354:22: C812 missing trailing comma
plone/app/discussion/comment.py:117:40: C812 missing trailing comma
plone/app/discussion/comment.py:161:80: C812 missing trailing comma
plone/app/discussion/comment.py:175:41: C812 missing trailing comma
plone/app/discussion/comment.py:176:19: C812 missing trailing comma
plone/app/discussion/comment.py:210:1: E305 expected 2 blank lines after class or function definition, found 1
plone/app/discussion/comment.py:282:19: C812 missing trailing comma
plone/app/discussion/comment.py:286:38: C812 missing trailing comma
plone/app/discussion/comment.py:348:33: C812 missing trailing comma
plone/app/discussion/comment.py:349:14: C812 missing trailing comma
plone/app/discussion/comment.py:351:28: C812 missing trailing comma
plone/app/discussion/comment.py:418:14: C812 missing trailing comma
plone/app/discussion/comment.py:420:28: C812 missing trailing comma
plone/app/discussion/browser/controlpanel.py:37:46: C812 missing trailing comma
plone/app/discussion/browser/controlpanel.py:71:44: C812 missing trailing comma
plone/app/discussion/browser/controlpanel.py:74:39: C812 missing trailing comma
plone/app/discussion/browser/controlpanel.py:95:40: C812 missing trailing comma
plone/app/discussion/browser/controlpanel.py:96:14: C812 missing trailing comma
plone/app/discussion/browser/captcha.py:25:5: D001 found adapts( replace it with zope.component.adapter
plone/app/discussion/browser/captcha.py:26:15: Q000 Remove bad quotes.
plone/app/discussion/browser/captcha.py:28:1: E305 expected 2 blank lines after class or function definition, found 1
plone/app/discussion/browser/captcha.py:37:5: D001 found adapts( replace it with zope.component.adapter
plone/app/discussion/browser/comment.py:113:1: E305 expected 2 blank lines after class or function definition, found 1
plone/app/discussion/browser/traversal.py:24:5: D001 found adapts( replace it with zope.component.adapter
plone/app/discussion/browser/comments.py:39:38: C812 missing trailing comma
plone/app/discussion/browser/comments.py:46:33: C812 missing trailing comma
plone/app/discussion/browser/comments.py:53:49: C812 missing trailing comma
plone/app/discussion/browser/comments.py:58:39: C812 missing trailing comma
plone/app/discussion/browser/comments.py:178:15: T000 Todo note found.
plone/app/discussion/browser/comments.py:182:16: T000 Todo note found.
plone/app/discussion/browser/comments.py:229:47: C812 missing trailing comma
plone/app/discussion/browser/comments.py:241:34: C812 missing trailing comma
plone/app/discussion/browser/comments.py:244:69: C812 missing trailing comma
plone/app/discussion/browser/comments.py:294:17: C812 missing trailing comma
plone/app/discussion/browser/validator.py:37:5: D001 found adapts( replace it with zope.component.adapter
plone/app/discussion/tests/test_comments_viewlet.py:83:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:91:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:105:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:147:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:154:38: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:163:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:177:38: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:222:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:231:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:244:44: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:251:40: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:280:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:289:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:302:39: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:310:35: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:346:40: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:351:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:394:33: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:441:18: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:457:40: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:535:36: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:588:14: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:593:41: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:600:22: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:606:41: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:617:51: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:630:21: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:634:18: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:638:20: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:656:66: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:665:14: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:692:54: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:693:14: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:726:71: C812 missing trailing comma
plone/app/discussion/tests/test_comments_viewlet.py:740:67: C815 missing trailing comma in Python 3.5+
plone/app/discussion/tests/test_conversation.py:71:34: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:79:33: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:277:34: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:325:34: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:395:11: T000 Todo note found.
plone/app/discussion/tests/test_conversation.py:511:56: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:515:61: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:525:64: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:529:41: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:539:64: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:543:41: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:617:11: T000 Todo note found.
plone/app/discussion/tests/test_conversation.py:625:38: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:631:43: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:635:40: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:643:54: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:667:43: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:680:40: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:686:34: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:843:59: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:848:59: C812 missing trailing comma
plone/app/discussion/tests/test_conversation.py:854:61: C812 missing trailing comma
plone/app/discussion/tests/test_moderation_view.py:83:59: C812 missing trailing comma
plone/app/discussion/tests/test_moderation_view.py:91:59: C812 missing trailing comma
plone/app/discussion/tests/test_moderation_view.py:99:59: C812 missing trailing comma
plone/app/discussion/tests/test_moderation_view.py:185:33: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:70:37: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:82:37: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:86:46: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:91:46: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:138:42: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:153:45: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:160:53: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:164:53: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:168:52: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:175:44: C812 missing trailing comma
plone/app/discussion/tests/test_indexers.py:179:37: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:32:43: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:44:14: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:55:18: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:66:18: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:77:18: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:103:25: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:114:23: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:125:17: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:131:68: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:138:18: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:170:34: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:171:14: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:182:34: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:183:14: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:190:34: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:191:14: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:205:41: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:214:36: C812 missing trailing comma
plone/app/discussion/tests/test_controlpanel.py:221:35: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:49:34: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:50:14: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:63:28: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:65:24: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:129:54: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:195:61: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:237:31: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:238:14: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:246:31: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:247:14: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:257:31: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:258:14: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:263:41: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:269:31: C812 missing trailing comma
plone/app/discussion/tests/test_workflow.py:270:14: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:27:49: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:31:49: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:35:48: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:39:48: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:76:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:78:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:96:66: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:102:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:104:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:113:46: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:125:66: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:131:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:133:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:138:46: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:147:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:149:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:154:46: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:162:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:164:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:182:66: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:189:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:191:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:202:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:204:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:214:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:216:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:225:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:227:42: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:240:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:242:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:269:66: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:274:57: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:275:14: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:289:54: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:294:52: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:295:14: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:327:57: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:328:14: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:347:31: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:352:31: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:357:33: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:372:76: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:379:73: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:380:14: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:386:28: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:406:55: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:421:57: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:428:57: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:434:28: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:449:33: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:467:33: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:542:61: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:544:35: C812 missing trailing comma
plone/app/discussion/tests/test_catalog.py:557:43: C812 missing trailing comma
plone/app/discussion/tests/test_notifications.py:179:41: C812 missing trailing comma
plone/app/discussion/tests/test_notifications.py:222:16: C812 missing trailing comma
plone/app/discussion/tests/test_notifications.py:226:16: C812 missing trailing comma
plone/app/discussion/tests/test_notifications.py:232:16: C812 missing trailing comma
plone/app/discussion/tests/test_notifications.py:238:16: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:68:42: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:79:42: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:88:42: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:109:33: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:121:33: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:157:62: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:165:50: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:173:67: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:181:48: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:191:54: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:200:65: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:230:66: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:237:37: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:239:38: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:243:57: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:254:30: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:262:66: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:290:69: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:294:77: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:298:76: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:306:49: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:330:66: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:368:57: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:405:57: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:441:57: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:450:60: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:459:63: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:468:66: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:473:38: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:477:48: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:481:41: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:486:38: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:491:34: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:493:44: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:498:41: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:503:37: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:505:47: C812 missing trailing comma
plone/app/discussion/tests/test_comment.py:510:44: C812 missing trailing comma
plone/app/discussion/tests/test_functional.py:31:46: C812 missing trailing comma
plone/app/discussion/tests/test_events.py:8:1: I001 isort found an import in the wrong position
plone/app/discussion/tests/test_events.py:155:57: C812 missing trailing comma
plone/app/discussion/tests/test_events.py:176:57: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:33:44: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:99:57: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:115:31: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:123:33: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:131:36: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:139:42: C812 missing trailing comma
plone/app/discussion/tests/test_contentrules.py:147:39: C812 missing trailing comma
plone/app/discussion/tests/test_robot.py:26:57: C812 missing trailing comma
```
Follow [these instructions](https://github.com/plone/jenkins.plone.org/blob/master/docs/source/run-qa-on-package.rst) to reproduce it locally.