├── QualityAssistant.package ├── properties.json ├── monticello.meta │ ├── initializers.st │ ├── package │ ├── categories.st │ └── version ├── Object.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ ├── annotateRubricText..st │ │ └── qaTextSegmentsDo..st ├── QASettings.class │ ├── README.md │ ├── class │ │ ├── nautilusPlugin.st │ │ ├── nautilusPlugin..st │ │ ├── qaGroupSettingsOn..st │ │ ├── qaNautilusPlugginSettingOn..st │ │ └── settingsMoovedNotice..st │ ├── properties.json │ └── methodProperties.json ├── QANautilusPlugin.class │ ├── instance │ │ ├── morph.st │ │ ├── currentEntity.st │ │ ├── updateMorph.st │ │ ├── critiqueBanned..st │ │ ├── classSelected..st │ │ ├── methodSelected..st │ │ ├── display.st │ │ ├── packageSelected..st │ │ ├── critiqueSelected..st │ │ ├── otherSelected..st │ │ └── registerTo..st │ ├── README.md │ ├── class │ │ ├── pluginName.st │ │ ├── unload.st │ │ ├── defaultPosition.st │ │ ├── possiblePositions.st │ │ ├── isInstalled.st │ │ ├── uninstall.st │ │ └── install.st │ ├── properties.json │ └── methodProperties.json ├── QARubMenuItemMorph.class │ ├── instance │ │ ├── deselect..st │ │ ├── select..st │ │ ├── isEnabled.st │ │ ├── hasIconOrMarker.st │ │ ├── hasSubMenu.st │ │ ├── isMenuItemMorph.st │ │ └── activateSubmenu..st │ ├── README.md │ ├── properties.json │ └── methodProperties.json ├── ReProperty.extension │ ├── properties.json │ ├── instance │ │ └── color.st │ └── methodProperties.json ├── ThemeIcons.extension │ ├── properties.json │ ├── instance │ │ ├── smallInformationIcon.st │ │ ├── repairIcon.st │ │ ├── smallQAIcon.st │ │ ├── thumbsUpIcon.st │ │ ├── thumbsDownIcon.st │ │ ├── thumbsUpIconContents.st │ │ ├── tumbsDownIconContents.st │ │ ├── repairIconContents.st │ │ └── smallQAIconContents.st │ └── methodProperties.json ├── QAFeedbackMorph.class │ ├── instance │ │ ├── critique.st │ │ ├── critique..st │ │ ├── initializePositiveFeedback.st │ │ ├── finalizeFeedback.withComment..st │ │ ├── initializeNegativeFeedback.st │ │ ├── initialize.st │ │ └── fireDialogWithFeedback..st │ ├── README.md │ ├── properties.json │ └── methodProperties.json ├── QANautilusPluginMorph.class │ ├── instance │ │ ├── entity.st │ │ ├── allowToSelect.st │ │ ├── iconMaxSize.st │ │ ├── getCritiques.st │ │ ├── pluginDelegate.st │ │ ├── iconFor.at..st │ │ ├── entity..st │ │ ├── pluginDelegate..st │ │ ├── excecuteTask.st │ │ ├── outOfWorld..st │ │ ├── updateList.st │ │ ├── intoWorld..st │ │ ├── methodModified..st │ │ ├── classCommented..st │ │ ├── initializeUpdateTask.st │ │ ├── stopTask.st │ │ ├── subscribe.st │ │ ├── themeChanged.st │ │ ├── setTaskAction.st │ │ ├── taskCompleted.st │ │ ├── selected..st │ │ ├── adoptPaneColor..st │ │ ├── initializeProgress.st │ │ ├── initialize.st │ │ ├── initializeList.st │ │ └── displayCritique..st │ ├── README.md │ ├── properties.json │ └── methodProperties.json ├── QARubTextSegmentMorph.class │ ├── instance │ │ ├── entity.st │ │ ├── critique.st │ │ ├── entity..st │ │ ├── critique..st │ │ └── addItemToMenu..st │ ├── README.md │ ├── methodProperties.json │ └── properties.json ├── QAViewedDiff.class │ ├── README.md │ ├── methodProperties.json │ └── properties.json ├── RBRefactoryChange.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── diffedText.st ├── ReAbstractCritique.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── color.st ├── ReSystemAnnouncer.extension │ ├── properties.json │ ├── instance │ │ ├── notifyCritiquesSeen.of..st │ │ ├── notifyViewedDiffFor.of..st │ │ ├── notifyCritique.AutoFixedFor..st │ │ ├── notifyCritique.clickedOnFor..st │ │ └── notifyBanInitiatedFor.of..st │ └── methodProperties.json ├── QACritiquesSeen.class │ ├── methodProperties.json │ ├── README.md │ └── properties.json ├── QACritiqueClickedOn.class │ ├── README.md │ ├── methodProperties.json │ └── properties.json ├── QAInitiateCritiqueBan.class │ ├── methodProperties.json │ ├── README.md │ └── properties.json ├── NonfocusablePluggableIconListMorph.class │ ├── README.md │ ├── instance │ │ ├── takesKeyboardFocus.st │ │ └── itemMorphFor.index..st │ ├── methodProperties.json │ └── properties.json └── .filetree ├── QualityAssistant-Test.package ├── properties.json ├── QACritiqueTest.class │ ├── README.md │ ├── instance │ │ ├── runWithDidalogPopping..st │ │ ├── testGuidedBan.st │ │ ├── testFixAction.st │ │ └── runWithMorphicDidalogPopping..st │ ├── properties.json │ └── methodProperties.json ├── monticello.meta │ ├── initializers.st │ ├── package │ ├── categories.st │ └── version └── .filetree ├── BaselineOfQualityAssistant.package ├── properties.json ├── monticello.meta │ ├── initializers.st │ ├── package │ ├── categories.st │ └── version ├── .filetree └── BaselineOfQualityAssistant.class │ ├── README.md │ ├── instance │ ├── installPlugin.st │ ├── preLoadDoIt.st │ ├── uninstallObsoletePlugin.st │ ├── removeRenrakuCrap.st │ ├── removedExtendedClassesPerPackage.st │ ├── baseline..st │ └── removeCrapOf.from..st │ ├── properties.json │ └── methodProperties.json ├── QualityAssistantRecording.package ├── properties.json ├── monticello.meta │ ├── initializers.st │ ├── package │ ├── categories.st │ └── version ├── Object.extension │ ├── properties.json │ ├── instance │ │ ├── dataForQAR.st │ │ └── obfuscatedIfNecessary.st │ └── methodProperties.json ├── Interval.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAR.st ├── RPackage.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAR.st ├── QAEventCollector.class │ ├── README.md │ ├── class │ │ ├── startUp..st │ │ ├── unload.st │ │ ├── recordAnnouncement..st │ │ ├── uniqueInstance.st │ │ ├── recordMeta.st │ │ └── initialize.st │ ├── instance │ │ ├── defaultCategory.st │ │ ├── initialize.st │ │ └── recordAnnouncement..st │ ├── properties.json │ └── methodProperties.json ├── RBLintRule.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAR.st ├── ReProperty.extension │ ├── properties.json │ ├── instance │ │ ├── dataForQAR.st │ │ └── dataForQAREntityless.st │ └── methodProperties.json ├── CompiledMethod.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAR.st ├── RBMethodNode.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ ├── methodForQAR.st │ │ └── dataForQAR.st ├── ReAbstractRule.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAR.st ├── ReCritiqueBanned.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAR.st ├── ReCritiqueEvent.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAR.st ├── UndefinedObject.extension │ ├── properties.json │ ├── instance │ │ └── dataForQAR.st │ └── methodProperties.json ├── ReAbstractCritique.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAREntityless.st ├── TClassDescription.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAR.st ├── ReSingleCritiqueEvent.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAR.st ├── ReInvocationSequenceRule.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAR.st ├── ReMissingMethodCritique.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAREntityless.st ├── ReMultipleCritiquesEvent.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAR.st ├── ReInvocationOrderCritique.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAREntityless.st ├── ManifestQualityAssistantRecording.class │ ├── class │ │ └── preUnload.st │ ├── methodProperties.json │ ├── README.md │ └── properties.json ├── ReInvocationSequenceRuleSequence.extension │ ├── properties.json │ ├── methodProperties.json │ └── instance │ │ └── dataForQAR.st └── .filetree ├── .filetree ├── graphics ├── logo.png ├── logo100.png ├── readmeImages │ ├── errIconEcl.png │ ├── errIconGlm.png │ ├── errIconIde.png │ ├── repairIcon.png │ ├── cnclIconEcl.png │ ├── cnclIconGlm.png │ ├── cnclIconIde.png │ ├── infoIconEcl.png │ ├── infoIconGlm.png │ ├── infoIconIde.png │ ├── nautilusDemo.png │ ├── questIconEcl.png │ ├── questIconGlm.png │ ├── questIconIde.png │ ├── settingsDemo.png │ ├── spotterDemo.png │ ├── warnIconEcl.png │ ├── warnIconGlm.png │ ├── warnIconIde.png │ ├── autofixPrompt.png │ ├── inspectorDemo.png │ ├── refreshIconEcl.png │ ├── refreshIconIde.png │ └── uselessButton.png └── logo.graffle ├── .smalltalk.ston ├── .utility ├── flatDeploy.sh └── prepareDeploy.sh ├── .gitattributes ├── .travis.yml ├── LICENSE └── README.md /QualityAssistant.package/properties.json: -------------------------------------------------------------------------------- 1 | { } -------------------------------------------------------------------------------- /QualityAssistant-Test.package/properties.json: -------------------------------------------------------------------------------- 1 | { } -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/properties.json: -------------------------------------------------------------------------------- 1 | { } -------------------------------------------------------------------------------- /QualityAssistant.package/monticello.meta/initializers.st: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /QualityAssistant-Test.package/QACritiqueTest.class/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /QualityAssistant-Test.package/monticello.meta/initializers.st: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | } 3 | -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/monticello.meta/initializers.st: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/monticello.meta/initializers.st: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /QualityAssistant.package/monticello.meta/package: -------------------------------------------------------------------------------- 1 | (name 'QualityAssistant') -------------------------------------------------------------------------------- /.filetree: -------------------------------------------------------------------------------- 1 | {"packageExtension" : ".package", 2 | "propertyFileExtension" : ".json" } -------------------------------------------------------------------------------- /QualityAssistant-Test.package/monticello.meta/package: -------------------------------------------------------------------------------- 1 | (name 'QualityAssistant-Test') -------------------------------------------------------------------------------- /QualityAssistant.package/Object.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Object" 3 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QASettings.class/README.md: -------------------------------------------------------------------------------- 1 | I hold settings for quality assistant -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/monticello.meta/package: -------------------------------------------------------------------------------- 1 | (name 'BaselineOfQualityAssistant') -------------------------------------------------------------------------------- /QualityAssistantRecording.package/monticello.meta/package: -------------------------------------------------------------------------------- 1 | (name 'QualityAssistantRecording') -------------------------------------------------------------------------------- /graphics/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/logo.png -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/instance/morph.st: -------------------------------------------------------------------------------- 1 | accessing 2 | morph 3 | ^ morph -------------------------------------------------------------------------------- /QualityAssistant.package/QARubMenuItemMorph.class/instance/deselect..st: -------------------------------------------------------------------------------- 1 | selecting 2 | deselect: sth -------------------------------------------------------------------------------- /QualityAssistant.package/QARubMenuItemMorph.class/instance/select..st: -------------------------------------------------------------------------------- 1 | selecting 2 | select: sth -------------------------------------------------------------------------------- /QualityAssistant.package/ReProperty.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReProperty" 3 | } -------------------------------------------------------------------------------- /QualityAssistant.package/ThemeIcons.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ThemeIcons" 3 | } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/Object.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Object" } 3 | -------------------------------------------------------------------------------- /graphics/logo100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/logo100.png -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/README.md: -------------------------------------------------------------------------------- 1 | I plug nautilus with a feedback from smalllint -------------------------------------------------------------------------------- /QualityAssistantRecording.package/Interval.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Interval" } 3 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/RPackage.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "RPackage" } 3 | -------------------------------------------------------------------------------- /QualityAssistant.package/QAFeedbackMorph.class/instance/critique.st: -------------------------------------------------------------------------------- 1 | accessing 2 | critique 3 | ^ critique -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/entity.st: -------------------------------------------------------------------------------- 1 | accessing 2 | entity 3 | ^ entity -------------------------------------------------------------------------------- /QualityAssistant.package/QARubTextSegmentMorph.class/instance/entity.st: -------------------------------------------------------------------------------- 1 | accessing 2 | entity 3 | ^ entity -------------------------------------------------------------------------------- /QualityAssistantRecording.package/QAEventCollector.class/README.md: -------------------------------------------------------------------------------- 1 | I log the usage data of quality assistant -------------------------------------------------------------------------------- /QualityAssistantRecording.package/RBLintRule.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "RBLintRule" } 3 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReProperty.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReProperty" } 3 | -------------------------------------------------------------------------------- /QualityAssistant.package/QARubMenuItemMorph.class/instance/isEnabled.st: -------------------------------------------------------------------------------- 1 | accessing 2 | isEnabled 3 | 4 | ^ true -------------------------------------------------------------------------------- /QualityAssistant.package/QARubTextSegmentMorph.class/instance/critique.st: -------------------------------------------------------------------------------- 1 | accessing 2 | critique 3 | ^ critique -------------------------------------------------------------------------------- /QualityAssistant.package/QAViewedDiff.class/README.md: -------------------------------------------------------------------------------- 1 | Announced when a user views a diff for a critic's autofix -------------------------------------------------------------------------------- /QualityAssistant.package/RBRefactoryChange.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "RBRefactoryChange" 3 | } -------------------------------------------------------------------------------- /QualityAssistant.package/ReAbstractCritique.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReAbstractCritique" 3 | } -------------------------------------------------------------------------------- /QualityAssistant.package/ReSystemAnnouncer.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReSystemAnnouncer" 3 | } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/CompiledMethod.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "CompiledMethod" } 3 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/RBMethodNode.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "RBMethodNode" } 3 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReAbstractRule.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReAbstractRule" } 3 | -------------------------------------------------------------------------------- /QualityAssistant.package/QACritiquesSeen.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { }, 3 | "class" : { } 4 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/class/pluginName.st: -------------------------------------------------------------------------------- 1 | display 2 | pluginName 3 | ^ 'Quality Assistant' -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/class/unload.st: -------------------------------------------------------------------------------- 1 | initialize-release 2 | unload 3 | 4 | self uninstall -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/allowToSelect.st: -------------------------------------------------------------------------------- 1 | list-morph 2 | allowToSelect 3 | ^ true -------------------------------------------------------------------------------- /QualityAssistant.package/QARubMenuItemMorph.class/instance/hasIconOrMarker.st: -------------------------------------------------------------------------------- 1 | accessing 2 | hasIconOrMarker 3 | ^ true -------------------------------------------------------------------------------- /QualityAssistant.package/QARubMenuItemMorph.class/instance/hasSubMenu.st: -------------------------------------------------------------------------------- 1 | accessing 2 | hasSubMenu 3 | 4 | ^ false -------------------------------------------------------------------------------- /QualityAssistant.package/QARubMenuItemMorph.class/instance/isMenuItemMorph.st: -------------------------------------------------------------------------------- 1 | testing 2 | isMenuItemMorph 3 | ^ true -------------------------------------------------------------------------------- /QualityAssistant.package/QAViewedDiff.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { }, 3 | "class" : { } 4 | } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReCritiqueBanned.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReCritiqueBanned" } 3 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReCritiqueEvent.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReCritiqueEvent" } 3 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/UndefinedObject.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "UndefinedObject" } 3 | -------------------------------------------------------------------------------- /QualityAssistant-Test.package/monticello.meta/categories.st: -------------------------------------------------------------------------------- 1 | SystemOrganization addCategory: #'QualityAssistant-Test'! 2 | -------------------------------------------------------------------------------- /QualityAssistant.package/QACritiqueClickedOn.class/README.md: -------------------------------------------------------------------------------- 1 | Happens when someone clicks on a critic to highlight the thing -------------------------------------------------------------------------------- /QualityAssistant.package/QACritiqueClickedOn.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { }, 3 | "class" : { } 4 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QAInitiateCritiqueBan.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { }, 3 | "class" : { } 4 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/class/defaultPosition.st: -------------------------------------------------------------------------------- 1 | position 2 | defaultPosition 3 | 4 | ^ #bottom -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/iconMaxSize.st: -------------------------------------------------------------------------------- 1 | list-morph 2 | iconMaxSize 3 | 4 | ^ 16 @ 16 -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReAbstractCritique.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReAbstractCritique" } 3 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/TClassDescription.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "TClassDescription" } 3 | -------------------------------------------------------------------------------- /QualityAssistant.package/QAFeedbackMorph.class/instance/critique..st: -------------------------------------------------------------------------------- 1 | accessing 2 | critique: anObject 3 | critique := anObject -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/instance/currentEntity.st: -------------------------------------------------------------------------------- 1 | properties 2 | currentEntity 3 | 4 | ^ currentEntity -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/getCritiques.st: -------------------------------------------------------------------------------- 1 | list-morph 2 | getCritiques 3 | 4 | ^ critiques -------------------------------------------------------------------------------- /QualityAssistant.package/QARubMenuItemMorph.class/instance/activateSubmenu..st: -------------------------------------------------------------------------------- 1 | events 2 | activateSubmenu: evt 3 | 4 | ^ false -------------------------------------------------------------------------------- /QualityAssistant.package/QARubTextSegmentMorph.class/instance/entity..st: -------------------------------------------------------------------------------- 1 | accessing 2 | entity: anObject 3 | entity := anObject -------------------------------------------------------------------------------- /QualityAssistant.package/ReProperty.extension/instance/color.st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | color 3 | 4 | ^ Color black alpha: 0.1 -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReSingleCritiqueEvent.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReSingleCritiqueEvent" } 3 | -------------------------------------------------------------------------------- /graphics/readmeImages/errIconEcl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/errIconEcl.png -------------------------------------------------------------------------------- /graphics/readmeImages/errIconGlm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/errIconGlm.png -------------------------------------------------------------------------------- /graphics/readmeImages/errIconIde.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/errIconIde.png -------------------------------------------------------------------------------- /graphics/readmeImages/repairIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/repairIcon.png -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/monticello.meta/categories.st: -------------------------------------------------------------------------------- 1 | SystemOrganization addCategory: #BaselineOfQualityAssistant! 2 | -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/pluginDelegate.st: -------------------------------------------------------------------------------- 1 | accessing 2 | pluginDelegate 3 | ^ pluginDelegate -------------------------------------------------------------------------------- /QualityAssistant.package/QARubTextSegmentMorph.class/instance/critique..st: -------------------------------------------------------------------------------- 1 | accessing 2 | critique: anObject 3 | critique := anObject -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReInvocationSequenceRule.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReInvocationSequenceRule" } 3 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReMissingMethodCritique.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReMissingMethodCritique" } 3 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReMultipleCritiquesEvent.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReMultipleCritiquesEvent" } 3 | -------------------------------------------------------------------------------- /graphics/readmeImages/cnclIconEcl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/cnclIconEcl.png -------------------------------------------------------------------------------- /graphics/readmeImages/cnclIconGlm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/cnclIconGlm.png -------------------------------------------------------------------------------- /graphics/readmeImages/cnclIconIde.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/cnclIconIde.png -------------------------------------------------------------------------------- /graphics/readmeImages/infoIconEcl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/infoIconEcl.png -------------------------------------------------------------------------------- /graphics/readmeImages/infoIconGlm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/infoIconGlm.png -------------------------------------------------------------------------------- /graphics/readmeImages/infoIconIde.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/infoIconIde.png -------------------------------------------------------------------------------- /graphics/readmeImages/nautilusDemo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/nautilusDemo.png -------------------------------------------------------------------------------- /graphics/readmeImages/questIconEcl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/questIconEcl.png -------------------------------------------------------------------------------- /graphics/readmeImages/questIconGlm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/questIconGlm.png -------------------------------------------------------------------------------- /graphics/readmeImages/questIconIde.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/questIconIde.png -------------------------------------------------------------------------------- /graphics/readmeImages/settingsDemo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/settingsDemo.png -------------------------------------------------------------------------------- /graphics/readmeImages/spotterDemo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/spotterDemo.png -------------------------------------------------------------------------------- /graphics/readmeImages/warnIconEcl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/warnIconEcl.png -------------------------------------------------------------------------------- /graphics/readmeImages/warnIconGlm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/warnIconGlm.png -------------------------------------------------------------------------------- /graphics/readmeImages/warnIconIde.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/warnIconIde.png -------------------------------------------------------------------------------- /QualityAssistant.package/NonfocusablePluggableIconListMorph.class/README.md: -------------------------------------------------------------------------------- 1 | Same as PluggableIconListMorph list but does not accept focus -------------------------------------------------------------------------------- /QualityAssistant.package/QAFeedbackMorph.class/README.md: -------------------------------------------------------------------------------- 1 | I provide a small morph for providing feedback about critics from Nautilus plugin -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/iconFor.at..st: -------------------------------------------------------------------------------- 1 | list-morph 2 | iconFor: item at: anIndex 3 | ^ item icon -------------------------------------------------------------------------------- /QualityAssistantRecording.package/QAEventCollector.class/class/startUp..st: -------------------------------------------------------------------------------- 1 | system startup 2 | startUp: resuming 3 | 4 | self recordMeta -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReInvocationOrderCritique.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReInvocationOrderCritique" } 3 | -------------------------------------------------------------------------------- /graphics/readmeImages/autofixPrompt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/autofixPrompt.png -------------------------------------------------------------------------------- /graphics/readmeImages/inspectorDemo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/inspectorDemo.png -------------------------------------------------------------------------------- /graphics/readmeImages/refreshIconEcl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/refreshIconEcl.png -------------------------------------------------------------------------------- /graphics/readmeImages/refreshIconIde.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/refreshIconIde.png -------------------------------------------------------------------------------- /graphics/readmeImages/uselessButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Uko/QualityAssistant/HEAD/graphics/readmeImages/uselessButton.png -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/class/possiblePositions.st: -------------------------------------------------------------------------------- 1 | information 2 | possiblePositions 3 | 4 | ^ { #middle . #bottom } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/UndefinedObject.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ self -------------------------------------------------------------------------------- /QualityAssistant.package/NonfocusablePluggableIconListMorph.class/instance/takesKeyboardFocus.st: -------------------------------------------------------------------------------- 1 | event handling 2 | takesKeyboardFocus 3 | ^ false -------------------------------------------------------------------------------- /QualityAssistant.package/QACritiquesSeen.class/README.md: -------------------------------------------------------------------------------- 1 | Happens when nautilus plugin displays critics in the list. (critics collection can be empty) -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/README.md: -------------------------------------------------------------------------------- 1 | I am a morph the plugin displays. I constist of list of critics and a refresh button -------------------------------------------------------------------------------- /QualityAssistant.package/QASettings.class/class/nautilusPlugin.st: -------------------------------------------------------------------------------- 1 | settings-accessing 2 | nautilusPlugin 3 | 4 | ^ QANautilusPlugin isInstalled -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ManifestQualityAssistantRecording.class/class/preUnload.st: -------------------------------------------------------------------------------- 1 | release 2 | preUnload 3 | 4 | QAEventCollector unload -------------------------------------------------------------------------------- /QualityAssistantRecording.package/QAEventCollector.class/class/unload.st: -------------------------------------------------------------------------------- 1 | initialize-release 2 | unload 3 | 4 | self uniqueInstance liberate 5 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/QAEventCollector.class/instance/defaultCategory.st: -------------------------------------------------------------------------------- 1 | configuration 2 | defaultCategory 3 | ^ #qualityAssistantEvents -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/entity..st: -------------------------------------------------------------------------------- 1 | accessing 2 | entity: anEntity 3 | 4 | entity := anEntity. 5 | self updateList -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/pluginDelegate..st: -------------------------------------------------------------------------------- 1 | accessing 2 | pluginDelegate: anObject 3 | pluginDelegate := anObject -------------------------------------------------------------------------------- /QualityAssistant.package/ThemeIcons.extension/instance/smallInformationIcon.st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | smallInformationIcon 3 | 4 | ^ self smallInfoIcon -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReInvocationSequenceRuleSequence.extension/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "ReInvocationSequenceRuleSequence" } 3 | -------------------------------------------------------------------------------- /QualityAssistant.package/.filetree: -------------------------------------------------------------------------------- 1 | { 2 | "separateMethodMetaAndSource" : false, 3 | "noMethodMetaData" : true, 4 | "useCypressPropertiesFile" : true 5 | } -------------------------------------------------------------------------------- /QualityAssistant-Test.package/.filetree: -------------------------------------------------------------------------------- 1 | { 2 | "separateMethodMetaAndSource" : false, 3 | "noMethodMetaData" : true, 4 | "useCypressPropertiesFile" : true 5 | } -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/.filetree: -------------------------------------------------------------------------------- 1 | { 2 | "separateMethodMetaAndSource" : false, 3 | "noMethodMetaData" : true, 4 | "useCypressPropertiesFile" : true 5 | } -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/BaselineOfQualityAssistant.class/README.md: -------------------------------------------------------------------------------- 1 | I am a baseline of quality assistant. Read more at: https://github.com/Uko/QualityAssistant -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/BaselineOfQualityAssistant.class/instance/installPlugin.st: -------------------------------------------------------------------------------- 1 | pre-post-load-do-its 2 | installPlugin 3 | 4 | QANautilusPlugin install -------------------------------------------------------------------------------- /QualityAssistant.package/ReProperty.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "color" : "YuriyTymchuk 6/21/2016 12:08" 4 | }, 5 | "class" : { } 6 | } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/.filetree: -------------------------------------------------------------------------------- 1 | { 2 | "noMethodMetaData" : true, 3 | "separateMethodMetaAndSource" : false, 4 | "useCypressPropertiesFile" : true } 5 | -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/excecuteTask.st: -------------------------------------------------------------------------------- 1 | task handling 2 | excecuteTask 3 | 4 | self stopTask; setTaskAction. 5 | updateTask execute. -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/outOfWorld..st: -------------------------------------------------------------------------------- 1 | initialize 2 | outOfWorld: aWorld 3 | 4 | self stopTask. 5 | 6 | super outOfWorld: aWorld. -------------------------------------------------------------------------------- /QualityAssistant.package/QARubMenuItemMorph.class/README.md: -------------------------------------------------------------------------------- 1 | I simulate the functionality of MenuItemMorph while providing more sophisticated visualization for rubric annotations -------------------------------------------------------------------------------- /QualityAssistant.package/QARubTextSegmentMorph.class/README.md: -------------------------------------------------------------------------------- 1 | I am a slight modification of the rubric text segment morph which creates custom menu items for displaying critiques -------------------------------------------------------------------------------- /QualityAssistant.package/RBRefactoryChange.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "diffedText" : "Uko 10/16/2015 10:41:49" 4 | }, 5 | "class" : { } 6 | } -------------------------------------------------------------------------------- /QualityAssistant.package/ReAbstractCritique.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "color" : "YuriyTymchuk 6/21/2016 12:14" 4 | }, 5 | "class" : { } 6 | } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/Interval.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/RBLintRule.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/RPackage.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistant.package/monticello.meta/categories.st: -------------------------------------------------------------------------------- 1 | SystemOrganization addCategory: #QualityAssistant! 2 | SystemOrganization addCategory: 'QualityAssistant-Announcements'! 3 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/CompiledMethod.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReAbstractRule.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReCritiqueEvent.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/UndefinedObject.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/instance/updateMorph.st: -------------------------------------------------------------------------------- 1 | announcement handling 2 | updateMorph 3 | morph ifNil: [ ^ self ]. 4 | 5 | morph entity: self currentEntity 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReCritiqueBanned.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/TClassDescription.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/updateList.st: -------------------------------------------------------------------------------- 1 | actions 2 | updateList 3 | 4 | self removeAllMorphs. 5 | self addMorphFront: progressMorph. 6 | self excecuteTask -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReInvocationSequenceRule.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReMultipleCritiquesEvent.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReSingleCritiqueEvent.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/BaselineOfQualityAssistant.class/instance/preLoadDoIt.st: -------------------------------------------------------------------------------- 1 | pre-post-load-do-its 2 | preLoadDoIt 3 | 4 | self uninstallObsoletePlugin. 5 | self removeRenrakuCrap -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/class/isInstalled.st: -------------------------------------------------------------------------------- 1 | installing 2 | isInstalled 3 | 4 | ^ Nautilus pluginClasses anySatisfy: [ :pluginBinding | 5 | pluginBinding first = self ] -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/instance/critiqueBanned..st: -------------------------------------------------------------------------------- 1 | announcement handling 2 | critiqueBanned: ann 3 | 4 | ann entity = self currentEntity ifTrue: [ 5 | self updateMorph ] -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ManifestQualityAssistantRecording.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | "preUnload" : "Uko 9/5/2016 11:24:39" }, 4 | "instance" : { 5 | } } 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/QAEventCollector.class/class/recordAnnouncement..st: -------------------------------------------------------------------------------- 1 | events 2 | recordAnnouncement: anAnnouncement 3 | 4 | self uniqueInstance recordAnnouncement: anAnnouncement -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReAbstractCritique.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAREntityless" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistant.package/QAInitiateCritiqueBan.class/README.md: -------------------------------------------------------------------------------- 1 | Announced when a developer has clicked the skip button and is about to deal with a dialog to choose on which level the critic will be banned. -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/class/uninstall.st: -------------------------------------------------------------------------------- 1 | installing 2 | uninstall 3 | 4 | Nautilus pluginClasses: 5 | (Nautilus pluginClasses reject: [ :each | 6 | each first = self ]) -------------------------------------------------------------------------------- /QualityAssistantRecording.package/Interval.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ Dictionary newFromPairs: { 5 | #from . start . 6 | #to . stop } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/RBLintRule.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ super dataForQAR 5 | at: #class put: self class name; 6 | yourself -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReInvocationOrderCritique.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAREntityless" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReInvocationSequenceRuleSequence.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReMissingMethodCritique.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAREntityless" : "Uko 9/5/2016 11:24:39" } } 6 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/monticello.meta/categories.st: -------------------------------------------------------------------------------- 1 | SystemOrganization addCategory: #QualityAssistantRecording! 2 | SystemOrganization addCategory: 'QualityAssistantRecording-Manifest'! 3 | -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/intoWorld..st: -------------------------------------------------------------------------------- 1 | initialize 2 | intoWorld: aWorld 3 | 4 | updateTask isTerminated ifTrue: [ self setTaskAction ]. 5 | 6 | super intoWorld: aWorld -------------------------------------------------------------------------------- /QualityAssistantRecording.package/Object.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ Dictionary newFromPairs: { 5 | #class . self class name obfuscatedIfNecessary } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/Object.extension/instance/obfuscatedIfNecessary.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | obfuscatedIfNecessary 3 | 4 | ^ GlobalIdentifier uniqueInstance obfuscateIfNecessary: self -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReAbstractRule.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ super dataForQAR 5 | at: #class put: self class name; 6 | yourself -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/instance/classSelected..st: -------------------------------------------------------------------------------- 1 | announcement handling 2 | classSelected: anAnnouncement 3 | 4 | currentEntity := anAnnouncement selectedClass. 5 | self updateMorph -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/instance/methodSelected..st: -------------------------------------------------------------------------------- 1 | announcement handling 2 | methodSelected: anAnnouncement 3 | 4 | currentEntity := anAnnouncement selectedMethod. 5 | self updateMorph -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/instance/display.st: -------------------------------------------------------------------------------- 1 | display 2 | display 3 | 4 | morph := QANautilusPluginMorph new. 5 | morph pluginDelegate: self. 6 | 7 | self updateMorph. 8 | 9 | ^ morph -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/methodModified..st: -------------------------------------------------------------------------------- 1 | announcement handling 2 | methodModified: anAnnouncement 3 | 4 | anAnnouncement method == entity ifTrue: [ 5 | self updateList ] -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ManifestQualityAssistantRecording.class/README.md: -------------------------------------------------------------------------------- 1 | I store metadata for this package. These meta data are used by other tools such as the SmalllintManifestChecker and the critics Browser -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/classCommented..st: -------------------------------------------------------------------------------- 1 | announcement handling 2 | classCommented: anAnnouncement 3 | 4 | anAnnouncement classCommented == entity ifTrue: [ 5 | self updateList ] -------------------------------------------------------------------------------- /QualityAssistant.package/QASettings.class/class/nautilusPlugin..st: -------------------------------------------------------------------------------- 1 | settings-accessing 2 | nautilusPlugin: aBoolean 3 | 4 | aBoolean 5 | ifTrue: [ QANautilusPlugin install ] 6 | ifFalse: [ QANautilusPlugin uninstall ] -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReCritiqueBanned.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ super dataForQAR 5 | at: #banLevel put: entityBanLevel dataForQAR; 6 | yourself -------------------------------------------------------------------------------- /.smalltalk.ston: -------------------------------------------------------------------------------- 1 | SmalltalkCISpec { 2 | #loading : [ 3 | SCIMetacelloLoadSpec { 4 | #baseline : 'QualityAssistant', 5 | #directory : '', 6 | #platforms : [ #pharo ] 7 | } 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /QualityAssistant.package/RBRefactoryChange.extension/instance/diffedText.st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | diffedText 3 | 4 | ^ TextDiffBuilder 5 | buildDisplayPatchFrom: self oldVersionTextToDisplay 6 | to: self textToDisplay -------------------------------------------------------------------------------- /QualityAssistantRecording.package/RBMethodNode.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39", 6 | "methodForQAR" : "Uko 9/5/2016 11:24:39" } } 7 | -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/instance/packageSelected..st: -------------------------------------------------------------------------------- 1 | announcement handling 2 | packageSelected: anAnnouncement 3 | 4 | currentEntity := anAnnouncement selectedPackage package. 5 | self updateMorph 6 | -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/initializeUpdateTask.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initializeUpdateTask 3 | 4 | updateTask := GLMAsyncTask new 5 | priority: Processor userBackgroundPriority; 6 | yourself. -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/stopTask.st: -------------------------------------------------------------------------------- 1 | task handling 2 | stopTask 3 | 4 | updateTask ifNotNil: [ 5 | updateTask 6 | terminate; 7 | doInBackground: nil; 8 | onCompleted: nil 9 | ] -------------------------------------------------------------------------------- /QualityAssistantRecording.package/Object.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39", 6 | "obfuscatedIfNecessary" : "Uko 9/5/2016 11:24:39" } } 7 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReInvocationSequenceRuleSequence.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ Dictionary newFromPairs: { 5 | #before . before . 6 | #after . after } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReProperty.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ self dataForQAREntityless 5 | at: #entity put: sourceAnchor sourceEntity dataForQAR; 6 | yourself -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReSingleCritiqueEvent.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ super dataForQAR 5 | at: #critique put: critique dataForQAREntityless; 6 | yourself -------------------------------------------------------------------------------- /QualityAssistant.package/Object.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "annotateRubricText:" : "YuriyTymchuk 12/8/2016 10:45", 4 | "qaTextSegmentsDo:" : "YuriyTymchuk 12/8/2016 10:47" 5 | }, 6 | "class" : { } 7 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/class/install.st: -------------------------------------------------------------------------------- 1 | installing 2 | install 3 | 4 | self isInstalled ifFalse: [ 5 | Nautilus pluginClasses: 6 | (Nautilus pluginClasses copyWith: 7 | { self . self defaultPosition }) ] -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReAbstractCritique.extension/instance/dataForQAREntityless.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAREntityless 3 | 4 | ^ super dataForQAREntityless 5 | at: #rule put: rule dataForQAR; 6 | yourself -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReProperty.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | }, 4 | "instance" : { 5 | "dataForQAR" : "Uko 9/5/2016 11:24:39", 6 | "dataForQAREntityless" : "Uko 9/5/2016 11:24:39" } } 7 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReProperty.extension/instance/dataForQAREntityless.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAREntityless 3 | 4 | ^ super dataForQAR 5 | at: #interval put: sourceAnchor interval dataForQAR; 6 | yourself -------------------------------------------------------------------------------- /QualityAssistant.package/QASettings.class/class/qaGroupSettingsOn..st: -------------------------------------------------------------------------------- 1 | settings-definition 2 | qaGroupSettingsOn: aBuilder 3 | 4 | (aBuilder group: #qualityAssistant) 5 | label: 'QualityAssistant'; 6 | parent: #codeBrowsing. -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReCritiqueEvent.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ super dataForQAR 5 | at: #class put: self class name; 6 | at: #entity put: entity dataForQAR; 7 | yourself -------------------------------------------------------------------------------- /QualityAssistant.package/NonfocusablePluggableIconListMorph.class/instance/itemMorphFor.index..st: -------------------------------------------------------------------------------- 1 | display 2 | itemMorphFor: anObject index: anIndex 3 | 4 | ^ (super itemMorphFor: anObject index: anIndex) 5 | hResizing: #spaceFill; 6 | yourself -------------------------------------------------------------------------------- /QualityAssistantRecording.package/RPackage.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ super dataForQAR 5 | at: #class put: self class name; 6 | at: #name put: self name obfuscatedIfNecessary; 7 | yourself -------------------------------------------------------------------------------- /QualityAssistant.package/NonfocusablePluggableIconListMorph.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "itemMorphFor:index:" : "YuriyTymchuk 8/9/2015 01:10", 4 | "takesKeyboardFocus" : "Uko 5/24/2015 23:46:14" 5 | }, 6 | "class" : { } 7 | } -------------------------------------------------------------------------------- /QualityAssistant.package/ThemeIcons.extension/instance/repairIcon.st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | repairIcon 3 | ^ icons 4 | at: #'repairIcon' 5 | ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self repairIconContents readStream) ]. -------------------------------------------------------------------------------- /QualityAssistant.package/ThemeIcons.extension/instance/smallQAIcon.st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | smallQAIcon 3 | ^ icons 4 | at: #'smallQAIcon' 5 | ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallQAIconContents readStream) ]. -------------------------------------------------------------------------------- /QualityAssistant.package/ThemeIcons.extension/instance/thumbsUpIcon.st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | thumbsUpIcon 3 | ^ icons 4 | at: #thumbsUpIcon 5 | ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self thumbsUpIconContents readStream) ]. -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/BaselineOfQualityAssistant.class/instance/uninstallObsoletePlugin.st: -------------------------------------------------------------------------------- 1 | pre-post-load-do-its 2 | uninstallObsoletePlugin 3 | self class environment 4 | at: #QualityAssistantPlugin 5 | ifPresent: [ :pluginClass | pluginClass uninstall ] -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/subscribe.st: -------------------------------------------------------------------------------- 1 | initialization 2 | subscribe 3 | 4 | SystemAnnouncer uniqueInstance weak 5 | when: ClassCommented send: #classCommented: to: self; 6 | when: MethodRecategorized send: #methodModified: to: self. -------------------------------------------------------------------------------- /QualityAssistant.package/ThemeIcons.extension/instance/thumbsDownIcon.st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | thumbsDownIcon 3 | ^ icons 4 | at: #thumbsDownIcon 5 | ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self tumbsDownIconContents readStream) ]. -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReInvocationOrderCritique.extension/instance/dataForQAREntityless.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAREntityless 3 | 4 | ^ super dataForQAREntityless 5 | at: #targetMethod put: targetMethodName obfuscatedIfNecessary; 6 | yourself -------------------------------------------------------------------------------- /QualityAssistant.package/ReAbstractCritique.extension/instance/color.st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | color 3 | 4 | ^ ({ 5 | #error -> Color red . 6 | #warning -> Color yellow . 7 | #information -> Color blue 8 | } asDictionary at: rule severity ifAbsent: [ super color ]) alpha: 0.1 9 | -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/BaselineOfQualityAssistant.class/instance/removeRenrakuCrap.st: -------------------------------------------------------------------------------- 1 | pre-post-load-do-its 2 | removeRenrakuCrap 3 | 4 | self removedExtendedClassesPerPackage keysAndValuesDo: [ :packageName :classNames | 5 | self removeCrapOf: packageName from: classNames ] -------------------------------------------------------------------------------- /QualityAssistant.package/ReSystemAnnouncer.extension/instance/notifyCritiquesSeen.of..st: -------------------------------------------------------------------------------- 1 | *qualityAssistant-announce 2 | notifyCritiquesSeen: critiques of: anEntity 3 | 4 | self announce: ( 5 | QACritiquesSeen new 6 | critiques: critiques; 7 | entity: anEntity; 8 | yourself) 9 | -------------------------------------------------------------------------------- /QualityAssistant.package/ReSystemAnnouncer.extension/instance/notifyViewedDiffFor.of..st: -------------------------------------------------------------------------------- 1 | *qualityAssistant-announce 2 | notifyViewedDiffFor: aQACritique of: anEntity 3 | 4 | self announce: ( 5 | QAViewedDiff new 6 | critique: aQACritique; 7 | entity: anEntity; 8 | yourself) 9 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/QAEventCollector.class/class/uniqueInstance.st: -------------------------------------------------------------------------------- 1 | instance creation 2 | uniqueInstance 3 | ^ uniqueInstance first ifNil: [ 4 | uniqueInstance at: 1 put: ( 5 | self new 6 | occupant: ReSystemAnnouncer uniqueInstance; 7 | register; 8 | yourself) ] -------------------------------------------------------------------------------- /QualityAssistant-Test.package/QACritiqueTest.class/instance/runWithDidalogPopping..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | runWithDidalogPopping: anAssertingBlock 3 | 4 | UIManager default class = MorphicUIManager 5 | ifTrue: [ self runWithMorphicDidalogPopping: anAssertingBlock ] 6 | ifFalse: anAssertingBlock -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/instance/critiqueSelected..st: -------------------------------------------------------------------------------- 1 | interaction delegation 2 | critiqueSelected: aCritique 3 | aCritique sourceAnchor providesInterval ifTrue: [ 4 | self model codeTextMorph 5 | setSelection: aCritique sourceAnchor interval; 6 | takeKeyboardFocus ] -------------------------------------------------------------------------------- /QualityAssistant.package/ReSystemAnnouncer.extension/instance/notifyCritique.AutoFixedFor..st: -------------------------------------------------------------------------------- 1 | *qualityAssistant-announce 2 | notifyCritique: aCritique AutoFixedFor: anEntity 3 | 4 | self announce: ( 5 | ReCritiqueAutofixed new 6 | critique: aCritique; 7 | entity: anEntity; 8 | yourself) -------------------------------------------------------------------------------- /QualityAssistant.package/ReSystemAnnouncer.extension/instance/notifyCritique.clickedOnFor..st: -------------------------------------------------------------------------------- 1 | *qualityAssistant-announce 2 | notifyCritique: aCritique clickedOnFor: anEntity 3 | 4 | self announce: ( 5 | QACritiqueClickedOn new 6 | critique: aCritique; 7 | entity: anEntity; 8 | yourself) -------------------------------------------------------------------------------- /QualityAssistant.package/ReSystemAnnouncer.extension/instance/notifyBanInitiatedFor.of..st: -------------------------------------------------------------------------------- 1 | *qualityAssistant-announce 2 | notifyBanInitiatedFor: aQACritique of: anEntity 3 | 4 | self announce: ( 5 | QAInitiateCritiqueBan new 6 | critique: aQACritique; 7 | entity: anEntity; 8 | yourself) 9 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/QAEventCollector.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | super initialize. 4 | self 5 | category: #qualityAssistantEvents; 6 | updateAnnouncementBlock: [ :aGTEventAnnouncement | 7 | aGTEventAnnouncement at: #qaEventFormatVersion put: 1.1 ] -------------------------------------------------------------------------------- /.utility/flatDeploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # exit on first encountered error 4 | set -o errexit 5 | 6 | 7 | # store the version 8 | echo "Creating version $TRAVIS_TAG" 9 | $SMALLTALK_CI_VM $SMALLTALK_CI_IMAGE eval "ConfigurationOfFlatQA makeVersion: '$TRAVIS_TAG'" > /dev/null 10 | echo Done! 11 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReInvocationSequenceRule.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ super dataForQAR 5 | at: #preConditions put: (preConditions collect: #dataForQAR); 6 | at: #postConditions put: (postConditions collect: #dataForQAR); 7 | yourself -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReMissingMethodCritique.extension/instance/dataForQAREntityless.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAREntityless 3 | 4 | ^ super dataForQAREntityless 5 | at: #missingSelector put: selector obfuscatedIfNecessary; 6 | at: #targetClass put: class dataForQAR; 7 | yourself -------------------------------------------------------------------------------- /QualityAssistant-Test.package/QACritiqueTest.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "", 3 | "super" : "TestCase", 4 | "category" : "QualityAssistant-Test", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "QACritiqueTest", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/instance/otherSelected..st: -------------------------------------------------------------------------------- 1 | announcement handling 2 | otherSelected: anAnnouncement 3 | 4 | (anAnnouncement class == NautilusPackageSelected or: 5 | [ anAnnouncement class == NautilusProtocolSelected ]) ifFalse: [ ^ self ]. 6 | 7 | currentEntity := nil. 8 | self updateMorph -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/themeChanged.st: -------------------------------------------------------------------------------- 1 | updating 2 | themeChanged 3 | 4 | super themeChanged. 5 | 6 | progressMorph color: self theme backgroundColor. 7 | progressMorph submorphs 8 | select: [ :each | each class == StringMorph ] 9 | thenDo: [ :each | each color: self theme disabledTextColor ] -------------------------------------------------------------------------------- /QualityAssistant.package/QASettings.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "YuriyTymchuk 10/20/2015 11:57", 3 | "super" : "Object", 4 | "category" : "QualityAssistant", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "QASettings", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QARubMenuItemMorph.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "YuriyTymchuk 6/21/2016 20:54", 3 | "super" : "Morph", 4 | "category" : "QualityAssistant", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "QARubMenuItemMorph", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.package/monticello.meta/version merge=mcVersion 2 | *.package/*.class/methodProperties.json merge=mcMethodProperties 3 | *.package/*.class/properties.json merge=mcProperties 4 | *.package/*.extension/methodProperties.json merge=mcMethodProperties 5 | *.package/*.extension/properties.json merge=mcProperties 6 | -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/setTaskAction.st: -------------------------------------------------------------------------------- 1 | task handling 2 | setTaskAction 3 | 4 | updateTask 5 | doInBackground: [ 6 | critiques := entity 7 | ifNil: [ #() ] 8 | ifNotNil: [ 9 | entity externalProperties asArray sort: [ :a :b | a title < b title ] ] ]; 10 | onCompleted: [ self taskCompleted ] -------------------------------------------------------------------------------- /QualityAssistant-Test.package/QACritiqueTest.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "runWithMorphicDidalogPopping:" : "YuriyTymchuk 6/6/2016 16:23", 4 | "testFixAction" : "YuriyTymchuk 6/6/2016 15:39", 5 | "testGuidedBan" : "YuriyTymchuk 6/6/2016 15:37", 6 | "runWithDidalogPopping:" : "YuriyTymchuk 6/6/2016 16:24" 7 | }, 8 | "class" : { } 9 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QAViewedDiff.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "YuriyTymchuk 8/29/2015 21:09", 3 | "super" : "ReSingleCritiqueEvent", 4 | "category" : "QualityAssistant-Announcements", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "QAViewedDiff", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /QualityAssistant-Test.package/QACritiqueTest.class/instance/testGuidedBan.st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | testGuidedBan 3 | 4 | | crit | 5 | 6 | crit := ReTrivialCritique 7 | for: thisContext method 8 | by: (RBLintRule allSubclasses detect: #isVisible) new. 9 | 10 | self runWithDidalogPopping: [ 11 | self shouldnt: [ crit guidedBan ] raise: Error ] 12 | -------------------------------------------------------------------------------- /QualityAssistant.package/Object.extension/instance/annotateRubricText..st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | annotateRubricText: anAnnotatableTextModel 3 | | conf | 4 | 5 | conf := RubConfigurationChange new. 6 | 7 | conf configurationBlock: [ :text | 8 | self qaTextSegmentsDo: [ :segment | 9 | text addSegment: segment ] ]. 10 | 11 | anAnnotatableTextModel announce: conf -------------------------------------------------------------------------------- /QualityAssistant.package/QACritiquesSeen.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "YuriyTymchuk 8/29/2015 20:58", 3 | "super" : "ReMultipleCritiquesEvent", 4 | "category" : "QualityAssistant-Announcements", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "QACritiquesSeen", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/RBMethodNode.extension/instance/methodForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | methodForQAR 3 | 4 | self compilationContext ifNotNil: [ :contx | 5 | contx getClass ifNotNil: [ :class | 6 | class 7 | compiledMethodAt: self selector 8 | ifPresent: [ :meth | ^ meth ] 9 | ifAbsent: [ ] ] ]. 10 | 11 | ^ self compiledMethod -------------------------------------------------------------------------------- /QualityAssistantRecording.package/TClassDescription.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | ^ super dataForQAR 5 | at: #class put: self class name; 6 | at: #name put: self theNonMetaClass name obfuscatedIfNecessary; 7 | at: #isMeta put: self isMeta; 8 | at: #package put: self package name obfuscatedIfNecessary; 9 | yourself -------------------------------------------------------------------------------- /QualityAssistant.package/QACritiqueClickedOn.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "YuriyTymchuk 2/10/2016 11:50", 3 | "super" : "ReSingleCritiqueEvent", 4 | "category" : "QualityAssistant-Announcements", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "QACritiqueClickedOn", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QAInitiateCritiqueBan.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "YuriyTymchuk 8/29/2015 22:08", 3 | "super" : "ReSingleCritiqueEvent", 4 | "category" : "QualityAssistant-Announcements", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "QAInitiateCritiqueBan", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/taskCompleted.st: -------------------------------------------------------------------------------- 1 | task handling 2 | taskCompleted 3 | 4 | listMorph 5 | updateList; 6 | deselectAll. 7 | 8 | self removeMorph: progressMorph. 9 | self addMorphFront: listMorph. 10 | 11 | entity ifNotNil: [ ReSystemAnnouncer uniqueInstance 12 | notifyCritiquesSeen: critiques 13 | of: entity ]. -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/BaselineOfQualityAssistant.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "YuriyTymchuk 7/16/2015 10:54", 3 | "super" : "BaselineOf", 4 | "category" : "BaselineOfQualityAssistant", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "BaselineOfQualityAssistant", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QARubTextSegmentMorph.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "entity:" : "YuriyTymchuk 6/21/2016 14:34", 4 | "addItemToMenu:" : "YuriyTymchuk 6/21/2016 22:45", 5 | "critique:" : "YuriyTymchuk 6/21/2016 22:46", 6 | "entity" : "YuriyTymchuk 6/21/2016 14:34", 7 | "critique" : "YuriyTymchuk 6/21/2016 22:46" 8 | }, 9 | "class" : { } 10 | } -------------------------------------------------------------------------------- /QualityAssistant.package/NonfocusablePluggableIconListMorph.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "YuriyTymchuk 5/6/2015 17:44", 3 | "super" : "PluggableIconListMorph", 4 | "category" : "QualityAssistant", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ ], 9 | "name" : "NonfocusablePluggableIconListMorph", 10 | "type" : "normal" 11 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/selected..st: -------------------------------------------------------------------------------- 1 | list-morph 2 | selected: index 3 | | critique | 4 | 5 | (index == 0 or: 6 | [ pluginDelegate isNil ]) ifTrue: [ ^ self ]. 7 | 8 | critique := (critiques at: index). 9 | pluginDelegate critiqueSelected: critique. 10 | ReSystemAnnouncer uniqueInstance 11 | notifyCritique: critique 12 | clickedOnFor: entity. -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "YuriyTymchuk 3/17/2015 17:33", 3 | "super" : "AbstractNautilusPlugin", 4 | "category" : "QualityAssistant", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "morph", 10 | "currentEntity" 11 | ], 12 | "name" : "QANautilusPlugin", 13 | "type" : "normal" 14 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QASettings.class/class/qaNautilusPlugginSettingOn..st: -------------------------------------------------------------------------------- 1 | settings-definition 2 | qaNautilusPlugginSettingOn: aBuilder 3 | 4 | 5 | (aBuilder setting: #nautilusPlugin) 6 | target: self; 7 | label: 'Show critique list at the bottom?'; 8 | description: 'Enable Nautilus plugin which shows a group with critiques and allows to preview them.'; 9 | parent: #Nautilus. -------------------------------------------------------------------------------- /QualityAssistant.package/QARubTextSegmentMorph.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "YuriyTymchuk 6/21/2016 20:54", 3 | "super" : "RubTextSegmentMorph", 4 | "category" : "QualityAssistant", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "entity", 10 | "critique" 11 | ], 12 | "name" : "QARubTextSegmentMorph", 13 | "type" : "normal" 14 | } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ReMultipleCritiquesEvent.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | | data | 5 | 6 | data := super dataForQAR 7 | at: #critiques put: 8 | (critiques collect: #dataForQAREntityless as: Array); 9 | yourself. 10 | 11 | critiques ifEmpty: [ 12 | (data at: #entity) removeKey: #sourceCode ifAbsent: [ ] ]. 13 | 14 | ^ data -------------------------------------------------------------------------------- /QualityAssistantRecording.package/QAEventCollector.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "category" : "QualityAssistantRecording", 3 | "classinstvars" : [ 4 | "uniqueInstance" ], 5 | "classvars" : [ 6 | ], 7 | "commentStamp" : "YuriyTymchuk 11/4/2015 14:04", 8 | "instvars" : [ 9 | ], 10 | "name" : "QAEventCollector", 11 | "pools" : [ 12 | ], 13 | "super" : "GTEventCollector", 14 | "type" : "normal" } 15 | -------------------------------------------------------------------------------- /QualityAssistant.package/QAFeedbackMorph.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "YuriyTymchuk 8/21/2015 12:13", 3 | "super" : "BorderedMorph", 4 | "category" : "QualityAssistant", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "positive", 10 | "negative", 11 | "text", 12 | "critique" 13 | ], 14 | "name" : "QAFeedbackMorph", 15 | "type" : "normal" 16 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/adoptPaneColor..st: -------------------------------------------------------------------------------- 1 | accessing 2 | adoptPaneColor: paneColor 3 | super adoptPaneColor: paneColor. 4 | 5 | "I have no idea how to solve this in a different way. 6 | The list border color is changed throught this method, 7 | I have to set progress morphs border to be the same" 8 | progressMorph borderStyle: 9 | (Smalltalk ui theme listNormalBorderStyleFor: listMorph). -------------------------------------------------------------------------------- /QualityAssistant.package/QASettings.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { }, 3 | "class" : { 4 | "settingsMoovedNotice:" : "YuriyTymchuk 12/15/2016 12:59", 5 | "qaGroupSettingsOn:" : "LucFabresse 11/4/2016 12:32", 6 | "nautilusPlugin:" : "YuriyTymchuk 1/19/2016 16:24", 7 | "nautilusPlugin" : "YuriyTymchuk 1/19/2016 16:23", 8 | "qaNautilusPlugginSettingOn:" : "YuriyTymchuk 12/14/2016 21:49" 9 | } 10 | } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/ManifestQualityAssistantRecording.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "category" : "QualityAssistantRecording-Manifest", 3 | "classinstvars" : [ 4 | ], 5 | "classvars" : [ 6 | ], 7 | "commentStamp" : "", 8 | "instvars" : [ 9 | ], 10 | "name" : "ManifestQualityAssistantRecording", 11 | "pools" : [ 12 | ], 13 | "super" : "PackageManifest", 14 | "type" : "normal" } 15 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/QAEventCollector.class/class/recordMeta.st: -------------------------------------------------------------------------------- 1 | actions 2 | recordMeta 3 | 4 | [ GTEventCollector new 5 | category: #qualityAssistantMeta; 6 | addIfAvailable: { 7 | #nautilus -> QASettings nautilusPlugin . 8 | #inspector -> ReSettings inspectorPluggin . 9 | #spotter -> ReSettings spotterPlugin 10 | } asDictionary; 11 | register 12 | ] on: Error 13 | do: [ :error | ReSettings showErrors ifTrue: [ error pass ] ] -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/monticello.meta/version: -------------------------------------------------------------------------------- 1 | (name 'BaselineOfQualityAssistant-YuriyTymchuk.69' message 'Dep. ren -> v0.15.2' id 'e308b7c6-e808-0d00-b6f8-a6d704c7d308' date '7 April 2017' time '12:29:16.557783 am' author 'YuriyTymchuk' ancestors ((name 'BaselineOfQualityAssistant-Uko.68' message 'dep ren -> 0.15.1 2 | ' id 'b2a49971-f30f-5b39-84f1-f08b028c30d7' date '20 January 2017' time '9:26:39 pm' author 'Uko' ancestors () stepChildren ())) stepChildren ()) -------------------------------------------------------------------------------- /QualityAssistant.package/ReSystemAnnouncer.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "notifyCritique:AutoFixedFor:" : "YuriyTymchuk 5/30/2016 17:24", 4 | "notifyCritiquesSeen:of:" : "YuriyTymchuk 5/30/2016 17:25", 5 | "notifyCritique:clickedOnFor:" : "YuriyTymchuk 5/30/2016 17:25", 6 | "notifyBanInitiatedFor:of:" : "YuriyTymchuk 5/30/2016 17:24", 7 | "notifyViewedDiffFor:of:" : "YuriyTymchuk 6/6/2016 15:39" 8 | }, 9 | "class" : { } 10 | } -------------------------------------------------------------------------------- /QualityAssistant.package/monticello.meta/version: -------------------------------------------------------------------------------- 1 | (name 'QualityAssistant-YuriyTymchuk.117' message 'Remove privacy morph from Nautilus plugin' id 'f0bcf1bd-e808-0d00-b6f7-417d04c7d308' date '7 April 2017' time '12:26:49.409996 am' author 'YuriyTymchuk' ancestors ((name 'QualityAssistant-Uko.116' message 'Merged upstream changes 2 | ' id '0fa0a789-c386-536d-b4fd-66eebc4c5f25' date '7 April 2017' time '12:13:22 am' author 'Uko' ancestors () stepChildren ())) stepChildren ()) -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/BaselineOfQualityAssistant.class/instance/removedExtendedClassesPerPackage.st: -------------------------------------------------------------------------------- 1 | data 2 | removedExtendedClassesPerPackage 3 | 4 | ^ { 5 | #QualityAssistant -> #(ReCritic ReEngine) . 6 | #QualityAssistantRecording -> 7 | #(ReAbstractCritic 8 | ReCriticBanned 9 | ReCriticEvent 10 | ReInvocationOrderCritic 11 | ReMissingMethodCritic 12 | ReMultipleCriticsEvent 13 | ReSingleCriticEvent) } asDictionary -------------------------------------------------------------------------------- /QualityAssistant.package/QAFeedbackMorph.class/instance/initializePositiveFeedback.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initializePositiveFeedback 3 | 4 | ^ positive := IconicButton new 5 | target: self; 6 | labelGraphic: (self iconNamed: #thumbsUpIcon); 7 | actionSelector: #fireDialogWithFeedback:; 8 | arguments: { true }; 9 | color: Color transparent; 10 | helpText: 'This critic is helpful'; 11 | extent: 16 @ 16; 12 | borderWidth: 0; 13 | yourself -------------------------------------------------------------------------------- /QualityAssistant.package/QAFeedbackMorph.class/instance/finalizeFeedback.withComment..st: -------------------------------------------------------------------------------- 1 | initialization 2 | finalizeFeedback: aBoolean withComment: aString 3 | 4 | text contents: 'Thanks!'. 5 | self 6 | removeMorph: positive; 7 | removeMorph: negative. 8 | 9 | [ aBoolean 10 | ifTrue: [ critique providePositiveFeedback: aString ] 11 | ifFalse: [ critique provideNegativeFeedback: aString ] 12 | ] fork. 13 | 14 | [ 2 seconds asDelay wait. 15 | self delete ] fork. -------------------------------------------------------------------------------- /QualityAssistant.package/QAFeedbackMorph.class/instance/initializeNegativeFeedback.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initializeNegativeFeedback 3 | 4 | ^ negative := IconicButton new 5 | target: self; 6 | labelGraphic: (self iconNamed: #thumbsDownIcon); 7 | actionSelector: #fireDialogWithFeedback:; 8 | arguments: { false }; 9 | color: Color transparent; 10 | helpText: 'This critic is not helpful'; 11 | extent: 16 @ 16; 12 | borderWidth: 0; 13 | yourself -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "commentStamp" : "YuriyTymchuk 4/16/2015 14:48", 3 | "super" : "Morph", 4 | "category" : "QualityAssistant", 5 | "classinstvars" : [ ], 6 | "pools" : [ ], 7 | "classvars" : [ ], 8 | "instvars" : [ 9 | "listMorph", 10 | "progressMorph", 11 | "entity", 12 | "pluginDelegate", 13 | "updateTask", 14 | "critiques" 15 | ], 16 | "name" : "QANautilusPluginMorph", 17 | "type" : "normal" 18 | } -------------------------------------------------------------------------------- /QualityAssistant-Test.package/monticello.meta/version: -------------------------------------------------------------------------------- 1 | (name 'QualityAssistant-Test-YuriyTymchuk.2' message 'Added hack for testing in headless mode' id 'c933ba47-f3c5-4311-88ae-56f90a65dec2' date '6 June 2016' time '4:25:51.290595 pm' author 'YuriyTymchuk' ancestors ((name 'QualityAssistant-Test-YuriyTymchuk.1' message 'Added first "smoke" tests' id '5e4c031d-c6b5-43ce-84c2-9b32b4364c23' date '6 June 2016' time '3:57:03.228702 pm' author 'YuriyTymchuk' ancestors () stepChildren ())) stepChildren ()) -------------------------------------------------------------------------------- /QualityAssistant.package/QARubMenuItemMorph.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "deselect:" : "YuriyTymchuk 6/21/2016 14:55", 4 | "isEnabled" : "YuriyTymchuk 6/21/2016 14:42", 5 | "hasSubMenu" : "YuriyTymchuk 6/21/2016 14:41", 6 | "hasIconOrMarker" : "YuriyTymchuk 8/21/2016 15:34", 7 | "isMenuItemMorph" : "YuriyTymchuk 6/21/2016 14:41", 8 | "activateSubmenu:" : "YuriyTymchuk 6/21/2016 14:47", 9 | "select:" : "YuriyTymchuk 6/21/2016 14:56" 10 | }, 11 | "class" : { } 12 | } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/CompiledMethod.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | | data | 5 | 6 | data := super dataForQAR 7 | at: #class put: self class name; 8 | at: #name put: self selector obfuscatedIfNecessary; 9 | yourself. 10 | 11 | self methodClass ifNotNil: [ :class | 12 | data at: #methodClass put: class dataForQAR ]. 13 | 14 | Privacy sendSourceCode ifTrue: [ 15 | data at: #sourceCode put: self sourceCode ]. 16 | 17 | ^ data -------------------------------------------------------------------------------- /QualityAssistantRecording.package/RBMethodNode.extension/instance/dataForQAR.st: -------------------------------------------------------------------------------- 1 | *qualityAssistantRecording 2 | dataForQAR 3 | 4 | | data | 5 | 6 | data := super dataForQAR 7 | at: #class put: self class name; 8 | at: #name put: self selector obfuscatedIfNecessary; 9 | yourself. 10 | 11 | self methodForQAR ifNotNil: [ :method | 12 | data at: #method put: method dataForQAR ]. 13 | 14 | Privacy sendSourceCode ifTrue: [ 15 | data at: #sourceCode put: self sourceCode ]. 16 | 17 | ^ data -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/BaselineOfQualityAssistant.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "uninstallObsoletePlugin" : "Uko 1/20/2017 21:26:39", 4 | "removeCrapOf:from:" : "Uko 1/20/2017 21:26:39", 5 | "preLoadDoIt" : "Uko 1/20/2017 21:26:39", 6 | "installPlugin" : "Uko 1/20/2017 21:26:39", 7 | "removeRenrakuCrap" : "Uko 1/20/2017 21:26:39", 8 | "baseline:" : "YuriyTymchuk 4/7/2017 00:28", 9 | "removedExtendedClassesPerPackage" : "Uko 1/20/2017 21:26:39" 10 | }, 11 | "class" : { } 12 | } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/QAEventCollector.class/instance/recordAnnouncement..st: -------------------------------------------------------------------------------- 1 | events 2 | recordAnnouncement: anAnnouncement 3 | Privacy sendDiagnosticsAndUsageData ifFalse: [ ^ self ]. 4 | (anAnnouncement respondsTo: #dataForQAR) ifTrue: [ 5 | [ self add: 6 | (anAnnouncement dataForQAR 7 | at: #obfuscated put: Privacy sendEntityNames not; 8 | at: #timestamp put: DateAndTime now; 9 | yourself) 10 | 11 | ] on: Error 12 | do: [ :error | 13 | ReSettings showErrors ifTrue: [ error pass ] ] ] -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/instance/registerTo..st: -------------------------------------------------------------------------------- 1 | registration 2 | registerTo: aModel 3 | 4 | aModel announcer 5 | when: NautilusPackageSelected send: #packageSelected: to: self; 6 | when: NautilusClassSelected send: #classSelected: to: self; 7 | when: NautilusProtocolSelected send: #otherSelected: to: self; 8 | when: NautilusMethodSelected send: #methodSelected: to: self. 9 | 10 | ReSystemAnnouncer uniqueInstance weak 11 | when: ReCritiqueBanned 12 | send: #critiqueBanned: 13 | to: self 14 | -------------------------------------------------------------------------------- /QualityAssistantRecording.package/QAEventCollector.class/class/initialize.st: -------------------------------------------------------------------------------- 1 | class initialization 2 | initialize 3 | SessionManager default 4 | register: (ClassSessionHandler forClassNamed: self name) 5 | inCategory: SessionManager default toolsCategory 6 | atPriority: SessionManager default defaultPriority + 1000. 7 | self recordMeta. 8 | 9 | uniqueInstance := WeakArray new: 1. 10 | ReSystemAnnouncer uniqueInstance unsubscribe: self. 11 | ReSystemAnnouncer uniqueInstance weak when: ReCritiqueEvent send: #recordAnnouncement: to: self -------------------------------------------------------------------------------- /QualityAssistant.package/QASettings.class/class/settingsMoovedNotice..st: -------------------------------------------------------------------------------- 1 | settings-definition 2 | settingsMoovedNotice: aBuilder 3 | 4 | 5 | (aBuilder group: #'resetRules') 6 | order: 10; 7 | target: self; 8 | label: 'Settings moved to the related categories.'; 9 | parent: #qualityAssistant; 10 | description: 'Settings for QualityAssistant plugins were moved to the categories where these plugins appear. For example the nautilus plugin setting is in the Nautilus group.'; 11 | dialog: [ (self iconNamed: #warning) asMorph ] -------------------------------------------------------------------------------- /QualityAssistant.package/QAFeedbackMorph.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "initializeNegativeFeedback" : "StephaneDucasse 9/18/2016 09:14", 4 | "initializePositiveFeedback" : "StephaneDucasse 9/18/2016 09:14", 5 | "initialize" : "YuriyTymchuk 6/21/2016 20:50", 6 | "finalizeFeedback:withComment:" : "YuriyTymchuk 5/30/2016 17:15", 7 | "critique:" : "YuriyTymchuk 5/30/2016 17:30", 8 | "fireDialogWithFeedback:" : "YuriyTymchuk 5/30/2016 17:41", 9 | "critique" : "YuriyTymchuk 5/30/2016 17:30" 10 | }, 11 | "class" : { } 12 | } -------------------------------------------------------------------------------- /QualityAssistantRecording.package/QAEventCollector.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "class" : { 3 | "initialize" : "Uko 9/5/2016 11:24:39", 4 | "recordAnnouncement:" : "Uko 9/5/2016 11:24:39", 5 | "recordMeta" : "Uko 9/5/2016 11:24:39", 6 | "startUp:" : "Uko 9/5/2016 11:24:39", 7 | "uniqueInstance" : "Uko 9/5/2016 11:24:39", 8 | "unload" : "Uko 9/5/2016 11:24:39" }, 9 | "instance" : { 10 | "defaultCategory" : "Uko 9/5/2016 11:24:39", 11 | "initialize" : "Uko 9/5/2016 11:24:39", 12 | "recordAnnouncement:" : "Uko 9/5/2016 11:24:39" } } 13 | -------------------------------------------------------------------------------- /QualityAssistant-Test.package/QACritiqueTest.class/instance/testFixAction.st: -------------------------------------------------------------------------------- 1 | accessing 2 | testFixAction 3 | 4 | | crit action | 5 | 6 | crit := ReTransformationCritique 7 | for: thisContext method 8 | by: (RBTransformationRule allSubclasses detect: #isVisible) new 9 | tree: thisContext method parseTree. 10 | 11 | action := crit actions detect: [ :a | a description = 'Automatically resolve the issue' ]. 12 | 13 | self runWithDidalogPopping: [ 14 | self 15 | shouldnt: [ action actOnCritic: crit ofEntity: crit sourceAnchor entity ] 16 | raise: Error ] -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/initializeProgress.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initializeProgress 3 | 4 | progressMorph := BorderedMorph new 5 | layoutPolicy: TableLayout new; 6 | listDirection: #leftToRight; 7 | wrapCentering: #center; 8 | hResizing: #spaceFill; 9 | vResizing: #spaceFill; 10 | cellInset: 5; 11 | layoutInset: 30@0; 12 | color: Smalltalk ui theme backgroundColor; 13 | yourself. 14 | 15 | progressMorph 16 | addMorph: ('Updating critiques...' asMorph 17 | color: Smalltalk ui theme disabledTextColor; 18 | yourself) 19 | -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/BaselineOfQualityAssistant.class/instance/baseline..st: -------------------------------------------------------------------------------- 1 | api projectSpec 2 | baseline: spec 3 | 4 | spec 5 | for: #common 6 | do: [ spec 7 | preLoadDoIt: #preLoadDoIt; 8 | package: 'QualityAssistant' with: [ spec requires: 'Renraku' ]; 9 | package: 'QualityAssistant-Test' with: [ spec requires: 'QualityAssistant' ]; 10 | package: 'QualityAssistantRecording' with: [ spec requires: 'QualityAssistant' ]; 11 | postLoadDoIt: #installPlugin. 12 | spec baseline: 'Renraku' with: [ spec repository: 'github://Uko/Renraku:v0.15.2' ] ] -------------------------------------------------------------------------------- /QualityAssistant.package/Object.extension/instance/qaTextSegmentsDo..st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | qaTextSegmentsDo: aBlock 3 | 4 | self externalProperties do: [ :eprop | 5 | | segment interval | 6 | interval := eprop sourceAnchor providesInterval 7 | ifTrue: [ eprop sourceAnchor interval ] 8 | ifFalse: [ 0 to: -1 ]. 9 | 10 | segment := QARubTextSegmentMorph 11 | from: interval first 12 | to: interval last + 1. 13 | 14 | segment 15 | label: eprop title; 16 | icon: eprop icon; 17 | color: eprop color; 18 | critique: eprop; 19 | entity: self. 20 | 21 | aBlock value: segment ]. -------------------------------------------------------------------------------- /BaselineOfQualityAssistant.package/BaselineOfQualityAssistant.class/instance/removeCrapOf.from..st: -------------------------------------------------------------------------------- 1 | pre-post-load-do-its 2 | removeCrapOf: aPackageName from: classNames 3 | 4 | | package | 5 | package := (aPackageName asPackageIfAbsent: [ ^ self ]). 6 | 7 | classNames do: [ :className | 8 | self class environment 9 | at: className 10 | ifPresent: [ :class | 11 | class protocols 12 | select: [ :prot | 13 | prot asLowercase beginsWith: package methodCategoryPrefix ] 14 | thenDo: [ :prot | 15 | class removeProtocol: prot ] ] ]. 16 | 17 | package mcWorkingCopy modified: false -------------------------------------------------------------------------------- /QualityAssistant.package/ThemeIcons.extension/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "smallInformationIcon" : "YuriyTymchuk 5/25/2015 09:09", 4 | "thumbsDownIcon" : "YuriyTymchuk 8/21/2015 12:57", 5 | "thumbsUpIconContents" : "YuriyTymchuk 8/21/2015 13:15", 6 | "repairIcon" : "Uko 5/24/2015 23:46:14", 7 | "smallQAIcon" : "Uko 5/24/2015 23:46:14", 8 | "repairIconContents" : "Uko 5/24/2015 23:46:14", 9 | "thumbsUpIcon" : "YuriyTymchuk 8/21/2015 12:57", 10 | "tumbsDownIconContents" : "YuriyTymchuk 8/21/2015 13:16", 11 | "smallQAIconContents" : "Uko 5/24/2015 23:46:14" 12 | }, 13 | "class" : { } 14 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QAFeedbackMorph.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | super initialize. 4 | 5 | self 6 | layoutPolicy: TableLayout new; 7 | listDirection: #leftToRight; 8 | cellPositioning: #center; 9 | hResizing: #shrinkWrap; 10 | vResizing: #shrinkWrap; 11 | cellInset: 3; 12 | layoutInset: 3@0; 13 | cornerStyle: #rounded; 14 | color: Color transparent; 15 | borderColor: (Color black alpha: 0.1). 16 | 17 | self 18 | addMorphBack: (text := 'Helpful?' asMorph); 19 | addMorphBack: (self initializePositiveFeedback); 20 | addMorphBack: (self initializeNegativeFeedback) -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/initialize.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initialize 3 | super initialize. 4 | 5 | critiques := #(). 6 | 7 | self 8 | layoutPolicy: TableLayout new; 9 | listDirection: #leftToRight; 10 | cellPositioning: #center; 11 | hResizing: #shrinkWrap; 12 | vResizing: #rigid; 13 | height: 51; "because it fits 3 row list without showing scrollbars" 14 | cellInset: 3; 15 | color: Color transparent. 16 | 17 | self initializeList. 18 | self initializeProgress. 19 | self initializeUpdateTask. 20 | 21 | 22 | self addMorphBack: listMorph. 23 | 24 | self subscribe -------------------------------------------------------------------------------- /QualityAssistant.package/ThemeIcons.extension/instance/thumbsUpIconContents.st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | thumbsUpIconContents 3 | 4 | ^ 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAABY0lEQVQokY2RTStFcRDGfzP/cw5ObhZigZXr5dpZ2dvwAaxsRBaSIgt2vgJlI+/KQllZ8QGUjZQUpZAUsSCpK7nn/sfiiJu8TU1NM/P0zDwP/BVrTVmWWlaZr4tL2/onMJEeyrUfF7eWtoNfQQu5FpyN8mp5In//P8bphgpccZYKrcfYpO/i6n+MmXicMu0m7xNUZr6O5VvQYnMbTneBaowEs2HwB4TAC08MnZ0Ly60ZQt8A+sJj8Z5yaSTUDYQcib0/JODNpzfKM973BnimMB0DCsRuDrMuHDle7fMCbyAfelTiTQLEOjGJUCKwKiDzwVQaVlKJNitm66i8D8QD/kfBUlUEk1DBjkh+3/0GfaIEySFFrnECYgKU/ehuIFCwB5zbVwYuHxG2CQRMnhB28NzhBCJJDQslTbgBmWDg+Db1caWphjjMkvdXDJ7eMJetJZJ2zHUgNglsobbFc2GPkctbgDetr3ZCqo6gPwAAAABJRU5ErkJggg==' -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/initializeList.st: -------------------------------------------------------------------------------- 1 | initialization 2 | initializeList 3 | listMorph := NonfocusablePluggableIconListMorph new 4 | model: self; 5 | getListSelector: #getCritiques; 6 | setIndexSelector: #selected:; 7 | wrapSelector: #displayCritique:; 8 | hideHScrollBarIndefinitely: true; 9 | getIconSelector: #iconFor:at:; 10 | vResizing: #spaceFill; 11 | hResizing: #spaceFill; 12 | color: self theme backgroundColor; 13 | backgroundColoringBlockOrSelector: [ :item :index | 14 | index odd 15 | ifTrue: [ Smalltalk ui theme backgroundColor ] 16 | ifFalse: [ Smalltalk ui theme lightBackgroundColor ] ]; 17 | yourself. 18 | -------------------------------------------------------------------------------- /QualityAssistant.package/ThemeIcons.extension/instance/tumbsDownIconContents.st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | tumbsDownIconContents 3 | 4 | ^ 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAABmklEQVQokX3Qv2pUURDH8e/vnHPv/jGwGyO4NotIFJSILIuFpLLyAQRBsEln4ROkEQufwEax0d4HsLETFEVNhGiKKGKiJs26YeMS7t17xuJqkexmf82Bgc+cmRH/snf5dMssWbRoN710fQQPouyFnP/YqJ/a7O1unWsEvzDI9WZ2Zf2bAPrds7cDdtdLrWiQmVF1IhoU2GBkvBRsN5Ow1MvzJ3Pvvyyp1z3Tlrm1RJrJzTicRJAb3w1ezzh3Yy/G7WEIC85MV2puMgKI5TMCKDBSqVXNY8d506U42YzFgCAIilediVosa9OIF3ivcn8nlp2D5wIJ0ASSSmDaAjZj5IdDO0XU0yCUSOzLqMaytaKVI6QSWWQVC7eamf/ZT/7ca6ZVz7v13zJQrzN/vgaNTJaZ6YLEYycqwG4+YnFudWPt8CRBYHzY+PS/sNOd71fAanIMivhwEgJwYzsZdxreV4cxvirq/v5R5zpwj/7F9qyF9HPFuXRYjK6dWPn69ih44Meinh5z4uS+xWfT0Bg83u78MrHssEfTEMBf2XCor7p8mm8AAAAASUVORK5CYII=' -------------------------------------------------------------------------------- /QualityAssistant-Test.package/QACritiqueTest.class/instance/runWithMorphicDidalogPopping..st: -------------------------------------------------------------------------------- 1 | as yet unclassified 2 | runWithMorphicDidalogPopping: anAssertingBlock 3 | 4 | | semaphore worldSubmoprhs newMorphs closingProcess | 5 | 6 | semaphore := Semaphore new. 7 | 8 | worldSubmoprhs := World submorphs. 9 | closingProcess := [ 10 | [ worldSubmoprhs = World submorphs ] whileTrue: [ Processor yield ]. 11 | newMorphs := (World submorphs difference: worldSubmoprhs). 12 | self assert: newMorphs size equals: 1. 13 | newMorphs first close. 14 | semaphore signal ] fork. 15 | 16 | 17 | anAssertingBlock 18 | on: TestFailure 19 | do: [ :failure | 20 | closingProcess terminate. 21 | semaphore signal. 22 | failure pass. ]. 23 | 24 | semaphore wait. -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: smalltalk 2 | sudo: false 3 | os: 4 | - linux 5 | - osx 6 | smalltalk: 7 | - Pharo-6.0 8 | 9 | env: 10 | global: 11 | - secure: O+KogdhPw3592DTKsW9LeApL77ch3B46A/FD+IBVUjgb0sIjfdJcPm2nsThi7/7RgqQvG8P90dTJ6fAsR6IJFZhBfEeUDKanBIT1MRbnkQLRrlJ62OICjPdhu5+1vwAsIWRPkGTwgSNNbfhoeSU4hTNUYFxlM+qXG8365GWPxN4= 12 | - secure: fq1kZksqHvsTREEaGrDgTEkfhslD0mgpMBcLB034OyM5hfabCpcuRsx87851WVQBoCFu2AoKSBfDRNc5SWN2cQJf9tjRLxzGKio/6/X43vSLLT/w0V6/saeGHmZZeCCVbukruFTaYjBEWCbO708c1A/Scs2nIyw7dHyMyHVGjPU= 13 | 14 | 15 | before_deploy: 16 | - ".utility/prepareDeploy.sh" 17 | 18 | deploy: 19 | provider: script 20 | skip_cleanup: true 21 | script: ".utility/flatDeploy.sh" 22 | on: 23 | smalltalk: Pharo-6.0 24 | condition: "$TRAVIS_OS_NAME = osx" 25 | all_branches: true 26 | tags: true 27 | -------------------------------------------------------------------------------- /QualityAssistant.package/ThemeIcons.extension/instance/repairIconContents.st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | repairIconContents 3 | 4 | ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACEElEQVR42mP4//8/AyUYTNja 5 | 2qJgu+Y1Eg6taw/YtaxxQpdDxlgNsGlapeDUteGWx4Qt/117Nv6ya12TSbQBlg0rNRw61j/x 6 | mrz9v/+sPf99pu7879i5oXbSpElR5eXlN6urq7/n5ORM8/DwYABhFAPMapcZ2bSufe06Yet/ 7 | nxm7//vO3PPfY/L28unTp7MA8beampp/QDofphnFAKPKJbaWjas+OPZs/u8+ecd/jyk7/4fV 8 | TriZmZnJBdTEXVlZ+Q/IngvTCBRjBLpkIdwA09plj2071v936t/y33nC1n/h5Z0fgBr+A3EA 9 | ELNADZgDdKmvj48PG9CAKUCxl3ADzOtX7rDr3PjfvnvTX+vWdclAxepAnAjEQItyLkydOvU/ 10 | EP/LysqaVVBQsLmuru5/WVnZBbgBJjXLG61a1/4xb1odBwoPkDOBmgXj4uIeTJ48+T/QRhD+ 11 | B9T0FRiYf4GGvQDyXeEG6JcucjOuXhYBiw2QAbGxsWdBNsM0Aw08GBoayoU1EGEak5OTW6uq 12 | qj4C8QeoRjCOjo6+mZqaWgQ0JBgUsDgNAAbMa6CGPiDugWmOiIg4HB8fLwYNk+dAvAdmCIYB 13 | paWl54GamKFR1Qc08BnMNqAmVSB+Co0dsCEYBgA1CUFpDiBeWFFR8Qg56UJjB2ZIO9a80NHR 14 | IQcM6etA2x8DnV6Dnv6BGtWAeCmKCyjBAMWc9s7ZKakLAAAAAElFTkSuQmCC' -------------------------------------------------------------------------------- /.utility/prepareDeploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # exit on first encountered error 4 | set -o errexit 5 | 6 | # variables that we use 7 | readonly REPO_OWNER="YuriyTymchuk" 8 | readonly PROJECT_NAME="ScrapYard" 9 | readonly PACKAGE_NAME="ConfigurationOfFlatQA" 10 | 11 | 12 | #set the author name or it will get crazy… 13 | $SMALLTALK_CI_VM $SMALLTALK_CI_IMAGE eval --save "Author fullName: 'JohnSnow'" > /dev/null 14 | 15 | # load the conf package 16 | $SMALLTALK_CI_VM $SMALLTALK_CI_IMAGE eval --save "\ 17 | | repo | \ 18 | repo := MCSmalltalkhubRepository \ 19 | owner: '$REPO_OWNER' \ 20 | project: '$PROJECT_NAME' \ 21 | user: '$HUB_USER' \ 22 | password: '$HUB_PASS'. \ 23 | \ 24 | MCRepositoryGroup default repositories \ 25 | detect: [ :each | each = repo ] \ 26 | ifFound: [ :other | other become: repo ]. \ 27 | \ 28 | Gofer new \ 29 | repository: repo; \ 30 | package: '$PACKAGE_NAME'; \ 31 | load." > /dev/null 32 | -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPlugin.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "display" : "YuriyTymchuk 8/21/2015 12:11", 4 | "morph" : "YuriyTymchuk 9/8/2015 11:13", 5 | "methodSelected:" : "Uko 9/23/2015 11:00:55", 6 | "packageSelected:" : "YuriyTymchuk 1/14/2016 00:17", 7 | "otherSelected:" : "Uko 9/23/2015 11:00:55", 8 | "currentEntity" : "Uko 9/23/2015 11:00:55", 9 | "registerTo:" : "YuriyTymchuk 5/30/2016 17:16", 10 | "critiqueSelected:" : "YuriyTymchuk 5/30/2016 17:16", 11 | "critiqueBanned:" : "YuriyTymchuk 5/30/2016 17:16", 12 | "classSelected:" : "YuriyTymchuk 10/9/2015 17:45", 13 | "updateMorph" : "hn 4/20/2016 11:09" 14 | }, 15 | "class" : { 16 | "install" : "YuriyTymchuk 1/19/2016 16:22", 17 | "possiblePositions" : "Uko 5/24/2015 23:46:14", 18 | "isInstalled" : "YuriyTymchuk 1/19/2016 16:21", 19 | "pluginName" : "Uko 5/24/2015 23:46:14", 20 | "uninstall" : "Uko 5/24/2015 23:46:14", 21 | "unload" : "YuriyTymchuk 11/23/2015 14:14", 22 | "defaultPosition" : "Uko 5/24/2015 23:46:14" 23 | } 24 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Yuriy Tymchuk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/instance/displayCritique..st: -------------------------------------------------------------------------------- 1 | list-morph 2 | displayCritique: aCritique 3 | | listItem | 4 | 5 | listItem := Morph new 6 | layoutPolicy: TableLayout new; 7 | listDirection: #leftToRight; 8 | cellPositioning: #center; 9 | hResizing: #spaceFill; 10 | vResizing: #shrinkWrap; 11 | cellInset: 5; 12 | color: Color transparent; 13 | layoutInset: (Margin left: 0 top: 0 right: 10 bottom: 0); 14 | yourself. 15 | 16 | listItem addMorph: aCritique title asStringMorph. 17 | 18 | aCritique actions do: [ :action | listItem addMorphBack: ( 19 | IconicButton new 20 | target: action; 21 | labelGraphic: action icon; 22 | actionSelector: #actOnCritic:ofEntity:; 23 | arguments: { aCritique . entity }; 24 | color: Color transparent; 25 | helpText: action description; 26 | extent: 16 @ 16; 27 | borderWidth: 0; 28 | yourself) ]. 29 | 30 | aCritique isCritic ifTrue: [ 31 | listItem addMorphBack: (Morph new 32 | color: Color transparent; 33 | hResizing: #spaceFill; 34 | height: 5; 35 | yourself). 36 | 37 | listItem addMorphBack: (QAFeedbackMorph new critique: aCritique) ]. 38 | 39 | ^ listItem -------------------------------------------------------------------------------- /QualityAssistant.package/QARubTextSegmentMorph.class/instance/addItemToMenu..st: -------------------------------------------------------------------------------- 1 | actions 2 | addItemToMenu: aMenu 3 | 4 | | listItem | 5 | 6 | listItem := QARubMenuItemMorph new 7 | layoutPolicy: TableLayout new; 8 | listDirection: #leftToRight; 9 | cellPositioning: #center; 10 | hResizing: #spaceFill; 11 | vResizing: #shrinkWrap; 12 | cellInset: 5; 13 | color: Color transparent; 14 | "layoutInset: (Margin left: 0 top: 0 right: 10 bottom: 0);" 15 | yourself. 16 | 17 | listItem addMorphBack: (ImageMorph withForm: critique icon). 18 | listItem addMorphBack: critique title asStringMorph. 19 | 20 | critique actions do: [ :action | listItem addMorphBack: ( 21 | IconicButton new 22 | target: action; 23 | labelGraphic: action icon; 24 | actionSelector: #actOnCritic:ofEntity:; 25 | arguments: { critique . entity }; 26 | color: Color transparent; 27 | helpText: action description; 28 | extent: 16 @ 16; 29 | borderWidth: 0; 30 | yourself) ]. 31 | 32 | critique isCritic ifTrue: [ 33 | listItem addMorphBack: (Morph new 34 | color: Color transparent; 35 | hResizing: #spaceFill; 36 | height: 5; 37 | yourself). 38 | 39 | listItem addMorphBack: (QAFeedbackMorph new critique: critique) ]. 40 | 41 | 42 | 43 | ^ aMenu addMenuItem: listItem -------------------------------------------------------------------------------- /QualityAssistant.package/QANautilusPluginMorph.class/methodProperties.json: -------------------------------------------------------------------------------- 1 | { 2 | "instance" : { 3 | "setTaskAction" : "YuriyTymchuk 5/30/2016 17:20", 4 | "initialize" : "YuriyTymchuk 4/7/2017 00:24", 5 | "intoWorld:" : "Uko 11/19/2015 17:20:20", 6 | "updateList" : "YuriyTymchuk 4/7/2017 00:25", 7 | "iconMaxSize" : "Uko 5/24/2015 23:46:14", 8 | "iconFor:at:" : "Uko 5/24/2015 23:46:14", 9 | "entity:" : "Uko 5/24/2015 23:46:14", 10 | "taskCompleted" : "YuriyTymchuk 5/30/2016 17:25", 11 | "outOfWorld:" : "Uko 11/19/2015 17:20:20", 12 | "allowToSelect" : "Uko 5/24/2015 23:46:14", 13 | "themeChanged" : "HenrikNergaard 3/6/2017 10:41", 14 | "subscribe" : "YuriyTymchuk 8/9/2015 00:19", 15 | "displayCritique:" : "YuriyTymchuk 5/30/2016 17:30", 16 | "methodModified:" : "YuriyTymchuk 8/9/2015 00:12", 17 | "initializeProgress" : "YuriyTymchuk 5/30/2016 17:18", 18 | "pluginDelegate" : "Uko 5/24/2015 23:46:14", 19 | "getCritiques" : "YuriyTymchuk 5/30/2016 17:20", 20 | "stopTask" : "Uko 11/19/2015 17:20:20", 21 | "pluginDelegate:" : "Uko 5/24/2015 23:46:14", 22 | "selected:" : "YuriyTymchuk 5/30/2016 17:24", 23 | "initializeUpdateTask" : "YuriyTymchuk 1/19/2016 11:55", 24 | "entity" : "Uko 5/24/2015 23:46:14", 25 | "classCommented:" : "YuriyTymchuk 8/9/2015 00:27", 26 | "excecuteTask" : "hn 4/20/2016 11:05", 27 | "adoptPaneColor:" : "Uko 5/24/2015 23:46:14", 28 | "initializeList" : "YuriyTymchuk 5/30/2016 17:18" 29 | }, 30 | "class" : { } 31 | } -------------------------------------------------------------------------------- /QualityAssistant.package/QAFeedbackMorph.class/instance/fireDialogWithFeedback..st: -------------------------------------------------------------------------------- 1 | initialization 2 | fireDialogWithFeedback: aBoolean 3 | 4 | | comment | 5 | 6 | ^ ((GLMFormBrick new 7 | color: Smalltalk ui theme textColor negated; 8 | width: 400; 9 | vShrinkWrap; 10 | label: [ :header | header 11 | text: (aBoolean 12 | ifTrue: [ 'Positive' ] 13 | ifFalse: [ 'Negative' ]), ' Feedback'; 14 | hSpaceFill; 15 | fontSize: 16 ]; 16 | text: [ :criticText | criticText 17 | text: 'about critique: ', (critique description surroundedBy: '"'); 18 | hSpaceFill; 19 | margin: 0 ]; 20 | label: [ :commentText | commentText 21 | hSpaceFill; 22 | text: 'Comment (optional):'; 23 | marginTop: 10 ]; 24 | addBrickBack: ( 25 | comment := GLMRubScrolledTextBrick new 26 | borderWidth: 1; 27 | borderColor: Smalltalk ui theme textColor; 28 | hSpaceFill; 29 | height: 150; 30 | yourself); 31 | 32 | with: [ :form | form 33 | addBrickBack: (GLMBrick new 34 | useHorizontalLinearLayout; 35 | hShrinkWrap; 36 | vShrinkWrap; 37 | hAlign: #right; 38 | addBrickBack: (form newButton 39 | marginRight: 3; 40 | text: 'Send'; 41 | when: #onClicked do: [ 42 | form window delete. 43 | self finalizeFeedback: aBoolean withComment: comment text asString ]); 44 | addBrickBack: (form newButton 45 | marginLeft: 3; 46 | text: 'Cancel'; 47 | when: #onClicked do: [ form window delete ]); 48 | yourself) 49 | ]; 50 | asBrickedMorph) 51 | openInWindowLabeled: '') beUnresizeable in: [ :window | 52 | self window modalLockTo: window ] -------------------------------------------------------------------------------- /QualityAssistant.package/ThemeIcons.extension/instance/smallQAIconContents.st: -------------------------------------------------------------------------------- 1 | *qualityAssistant 2 | smallQAIconContents 3 | 4 | ^ ' 5 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE2PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xNjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxkYzpzdWJqZWN0PgogICAgICAgICAgICA8cmRmOkJhZy8+CiAgICAgICAgIDwvZGM6c3ViamVjdD4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDMtMjRUMTE6MDM6OTc8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPlBpeGVsbWF0b3IgMy4zLjE8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Ct6L88gAAAHISURBVDgRxZK/S8NQEMeTNAk1oJvS6iAIgoOCIG4OLi4O/gtCEX+MOqlIW0sVcXIUCk66KLi5KLiIo+DiIohr0E1QpGkaP9/iK7VKVw8ud+/uvnffdy+W9d9itxMoFouZVCo1niTJKLpOPkH38B+w9+TDVkyzAYkpgMv1en3GcZw+1KrVao1a13Ut4tIX27YvCR7m8/lbJW2A/dgCgByFrkAq/ksAW2oWx3EEoyP8bZfCO9/3MwStarX6xtknkTbTWxsBsqIosmjkwXaJmjkHJ0MwJDlP8Rg6AYMDGP2ioem6GhjDMusC1EUXuNNFy7TVUqnUAyBnmKghLCvUnGEz2C2YjLhMe8pms1rMD6HxMbmcgpqMf1ooFJZNEbt7oMGNQ6D5EiYpy8RmXMtDrvQxQoN7hjxrB0NhGM6ahLHaie4rwReDSZOTLZfLg5gBm7vqR3lFNz3Pu2ah3fiL6AqgxmgxQD9plKfpObaP/C6xae1AdHs5VHjGdxI+rDyzPM4NBpg0dfsssCifGkdP734/SSyaaKB6ErGmtouGIV1ogh+DTYnBGoENtPnuatZJ1JwaB+yO/oMKgQ8Aw6jXCWhyYCL8xyAITr4Ak1nwl6ws9bYAAAAASUVORK5CYII=' -------------------------------------------------------------------------------- /QualityAssistantRecording.package/monticello.meta/version: -------------------------------------------------------------------------------- 1 | (name 'QualityAssistantRecording-Uko.28' message 'Added manifest with unloading 2 | ' id 'fb2108eb-5551-530c-ade9-d6e322604fa1' date '5 September 2016' time '11:24:39 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.27' message 'Moved Spotter/Inspector settings to Renraku 3 | ' id '6f767fa5-ab34-5090-ad45-4ffbec088ad9' date '3 September 2016' time '1:10:50 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.26' message 'Updated logging for ReAbstractRule 4 | ' id '59b99a78-d04a-5f67-a1ce-b8113f5adc69' date '12 July 2016' time '4:15:20 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.25' message 'Moved error-skipping to Renraku 5 | ' id '39b18efe-bda1-506e-862e-a555d3e85220' date '14 June 2016' time '7:12:08 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.24' message 'Removed last ReCritic* ocurance 6 | ' id 'a52af44b-0922-5181-9b47-58b851a6b9fa' date '2 June 2016' time '8:29:49 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.23' message 'QARecorder critic->critique renaming 7 | ' id '9a6bda32-a500-5862-b84b-d549cb0e596e' date '30 May 2016' time '5:51:48 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.22' message 'Updated recorder version on 1.1 (with timestamp) 8 | ' id '2472d999-af2c-51b5-8d12-de79a42a96f0' date '15 March 2016' time '12:15:59 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.21' message 'Added timestamp to recorded events 9 | ' id '18dd5720-3954-5e8d-9740-552dbeb78735' date '14 March 2016' time '11:48:42 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.20' message 'Improved settings order 10 | ' id 'dd041ce0-ed2f-5687-b9da-1953feebaaac' date '9 March 2016' time '10:32:58 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.19' message 'Removed leftover method from QAR settings 11 | ' id '1a3399be-ff00-584e-a087-3d4cf6cd6a07' date '9 March 2016' time '8:58:57 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.18' message 'Optimized recorded data 12 | ' id 'c9ba012f-0467-56a5-9ccd-95d8373a5d5d' date '9 March 2016' time '8:55:22 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.17' message 'Added obfuscation marker to recorded events. Removed the event hierarchy 13 | ' id '762ede19-958f-50bf-ba4e-bc44f6cf9d92' date '9 March 2016' time '1:30:30 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.16' message 'Updated meta recording 14 | ' id 'ecf882c7-a3ba-522b-94d0-1fec019e322d' date '9 March 2016' time '1:11:25 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.15' message 'Changed the whole data structure that is collected by QAR 15 | ' id 'ca8606e0-595f-556d-8c86-5ffccc3ac040' date '9 March 2016' time '1:05:34 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.14' message 'Inproved error handling in recorder 16 | ' id 'b5bb5b2b-da2a-5869-b4d3-199734d72127' date '8 March 2016' time '3:26:04 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.13' message 'Added meta logging to QARecorder 17 | ' id 'c5e7a630-11f0-5982-bec0-21b478c1b35b' date '8 March 2016' time '3:25:21 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.12' message 'Hide errors from collector iif not in debug mode 18 | ' id '8f10a062-df7f-59d0-9717-9eec848c3d5a' date '4 March 2016' time '5:54:21 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.11' message 'Added support to record more events. Minor fixes 19 | ' id '12f7653d-c7bb-5b79-99b7-e8abc4e352fa' date '10 February 2016' time '6:34:51 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.10' message 'Added "as collected" method to CompiledMethod. Fixed "as collected" for AST 20 | ' id '46881f27-838a-5fb5-967a-194e7f2b5635' date '20 January 2016' time '7:02:48 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.9' message 'Updated to include all entities provided by renraku 21 | ' id '58da3aab-abdf-5512-be23-04e9bf5eaf8f' date '19 January 2016' time '4:06:26 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.8' message 'Impremented u. instance of the collector to be lazily instantiated and weakly referenced 22 | ' id '37ea8465-790e-5e29-b17d-b2dd5ff5eece' date '12 January 2016' time '11:08:18 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.7' message 'Changed initialization to overcome GTEventRecorder cleanup. 23 | ' id '2ec91e31-b4f4-5d09-8845-4558b61d2fea' date '8 January 2016' time '5:54:10 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.6' message 'Revamped logging to use ring, new collector features 24 | ' id '35d9cf20-9de5-51b5-a28b-555bfa19f720' date '8 December 2015' time '1:30 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.5' message 'added cattegory to the collector 25 | ' id 'f6669718-99ff-599e-9350-825292097ee0' date '19 November 2015' time '10:52:04 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.4' message 'Moved to the new event collector 26 | ' id '050664c0-de68-5eb4-a738-3ee6bf16d1b4' date '4 November 2015' time '3:23:41 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.3' message 'Changes subscription to weak 27 | ' id '32f9cf05-dff3-5348-80e4-e273e205a4a2' date '28 October 2015' time '7:09:24 pm' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.2' message 'Added milliseconds extension 28 | ' id '1c41978f-c833-5ffd-9c81-029c4ab92257' date '30 August 2015' time '12:17:11 am' author 'Uko' ancestors ((name 'QualityAssistantRecording-Uko.1' message 'initial commit 29 | ' id '90976c36-4381-53d0-b603-b7a52c4be7fb' date '30 August 2015' time '12:12:35 am' author 'Uko' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ()) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Quality Assistant [![Build Status](https://travis-ci.org/Uko/QualityAssistant.svg?branch=master)](https://travis-ci.org/Uko/QualityAssistant) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.809410.svg)](https://doi.org/10.5281/zenodo.809410) 2 | ===================== 3 | 4 | Hi, I'm your personal quality assistant. I run SmallLint rules on the code that you modify, and notify you about the critics right in the system browser. If you find any bugs in me please [report them](https://github.com/Uko/QualityAssistant/issues). 5 | 6 | ![logo](graphics/logo100.png) 7 | 8 | - [Installation](#installation) 9 | - [In Nautilus](#in-nautilus) 10 | - [Critics Details](#critics-details) 11 | - [In Inspector](#in-inspector) 12 | - [In Spotter](#in-spotter) 13 | - [Story Behind the Name](#story-behind-the-name) 14 | 15 | Installation 16 | ------------ 17 | :exclamation: QualityAssistant comes pre-installed with **Pharo5** (from 23.07.2015 v50185) 18 | 19 | The easiest way to install is to use **Configuration Browser**. Otherwise you can execute the following script. 20 | 21 | ```Smalltalk 22 | Metacello new 23 | smalltalkhubUser: 'Pharo' 24 | project: 'MetaRepoForPharo40'; 25 | configuration: 'QualityAssistant'; 26 | get; 27 | load 28 | ``` 29 | 30 | In Nautilus 31 | ----- 32 | Quality Assistant uses Nautilus plugin to notify users about the critics in their code. The plugin is automatically activated and will be available in all browsers **opened after** loading Quality Assistant. By default the plugin is positioned at the bottom of Nautilus browser, and will display a list of critics for a selected class or method. 33 | 34 | ![nautilus demo](graphics/readmeImages/nautilusDemo.png) 35 | 36 | ###Critics Details 37 | 38 | If possible, the critic text will be prefixed with the _name_ of the faulty part (variable, message, method, etc…). These prefixes as well as **source code highlights** are **not implemented** for many critics, although it is possible to do it. If you will find such a case, please report it here: https://github.com/Uko/Renraku/issues. 39 | 40 | ####Severity levels 41 | There are 3 severity levels of critics that are displayed at the left side of the list: 42 | 43 | * ![eclipse small info icon](graphics/readmeImages/infoIconEcl.png) 44 | ![glamour small info icon](graphics/readmeImages/infoIconGlm.png) 45 | ![ idea small info icon](graphics/readmeImages/infoIconIde.png) 46 | Information 47 | * ![eclipse small warning icon](graphics/readmeImages/warnIconEcl.png) 48 | ![glamour small warning icon](graphics/readmeImages/warnIconGlm.png) 49 | ![ idea small warning icon](graphics/readmeImages/warnIconIde.png) 50 | Warning 51 | * ![eclipse small error icon](graphics/readmeImages/errIconEcl.png) 52 | ![glamour small error icon](graphics/readmeImages/errIconGlm.png) 53 | ![ idea small error icon](graphics/readmeImages/errIconIde.png) 54 | Error 55 | 56 | ####Actions 57 | ![eclipse small question icon](graphics/readmeImages/questIconEcl.png) 58 | ![glamour small question icon](graphics/readmeImages/questIconGlm.png) 59 | ![ idea small question icon](graphics/readmeImages/questIconIde.png) 60 | **Rationale**. Clicking on the question mark will bring up the rationale on the critic. 61 | 62 | ![eclipse small cancel icon](graphics/readmeImages/cnclIconEcl.png) 63 | ![glamour small cancel icon](graphics/readmeImages/cnclIconGlm.png) 64 | ![ idea small cancel icon](graphics/readmeImages/cnclIconIde.png) 65 | **Ban**. Allows you to ban the validation of the current class or method by the rule of the critic. I.e. the critic will not be reported any more. When banning a critic for a method, you can decide to ban it on the class level, so the policy will apply to all the methods of a class. _This functionality is implemented on top of Manifest false positives_. 66 | 67 | ![repair icon](graphics/readmeImages/repairIcon.png) **Autofix**. Some critics provide a solution to the issue reported by them. By pressing "autofix" button you will open a diff preview of the changes that will happen if you apply the proposed issue resolution. However, **previewing changes** (i.e. before-after diff) is **not** as **nice** as it was. Sorry for inconveniences, I hope that we will have a solution for this in the future. 68 | ![](graphics/readmeImages/autofixPrompt.png) 69 | 70 | 71 | _:exclamation: Now the plugins in Inspector and Spotter can be toggled in **settings** (QualityAssistant group) and are **disabled** by default._ 72 | ![inspector demo](graphics/readmeImages/settingsDemo.png) 73 | 74 | In Inspector 75 | ------------ 76 | If you inspect a method or a class which has critics, you will see a tab with a red circler and a number corresponding to critics amount. A critics presentation pane contains a list of critics prefixed with icons that represent severity and tagged with the group they belong to. A critic itself provides a source code presentetion and a description of itself. 77 | 78 | ![inspector demo](graphics/readmeImages/inspectorDemo.png) 79 | 80 | In Spotter 81 | ---------- 82 | 83 | While diving into a class of a method inside Spotter you can see the related critics in the _QA Critics_ group. 84 | 85 | ![spotter demo](graphics/readmeImages/spotterDemo.png) 86 | 87 | 88 | Story Behind the Name 89 | --------------------- 90 | 91 | Definitely, the idea behind Quality Assistant is to have a bot that assists you with the quality of your code. But there is also the other side of the Moon. 92 | 93 | In Ukraine we are used to call quality assurance engineers just QAs. And we are using it so much that we start to decline it in our own language. So you can think about QA as a word like _"cuey"_ (Ukr: _"кюей"_) instead of abbreviation. And so it's common to say: _"the QA will check this"_ or _"a QA has found a bug"_ or even _"our QA has a birthday today"_. 94 | 95 | In the first prototypes of Quality Assistant there was a global variable `QA` and so you could ask it: 96 | 97 | ```Smalltalk 98 | QA revalidate: aMethod 99 | ``` 100 | 101 | ```Smalltalk 102 | QA criticsOf: aClass 103 | ``` 104 | 105 | This way you have an artificial quality assurance engineer, that you can talk to. And that guy (or girl) knows something about the quality of your code ;) 106 | -------------------------------------------------------------------------------- /graphics/logo.graffle: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ActiveLayerIndex 6 | 0 7 | ApplicationVersion 8 | 9 | com.omnigroup.OmniGraffle6 10 | 156.11.0.206384 11 | 12 | AutoAdjust 13 | 14 | BackgroundGraphic 15 | 16 | Bounds 17 | {{0, 0}, {867, 698}} 18 | Class 19 | SolidGraphic 20 | ID 21 | 2 22 | Style 23 | 24 | stroke 25 | 26 | Draws 27 | NO 28 | 29 | 30 | 31 | BaseZoom 32 | 0 33 | CanvasOrigin 34 | {0, 0} 35 | CanvasSize 36 | {867, 698} 37 | ColumnAlign 38 | 1 39 | ColumnSpacing 40 | 36 41 | CreationDate 42 | 2014-10-21 15:52:13 +0000 43 | Creator 44 | Yuriy Tymchuk 45 | DisplayScale 46 | 1.0 pt = 1.0 pt 47 | ExportLineEnds 48 | 49 | 50 | Gap 51 | 0.5 52 | LineGap 53 | 1 54 | Name 55 | UML2Socket 56 | Path 57 | 58 | elements 59 | 60 | 61 | element 62 | MOVETO 63 | point 64 | {1, 6} 65 | 66 | 67 | control1 68 | {8, 6} 69 | control2 70 | {8, -6} 71 | element 72 | CURVETO 73 | point 74 | {1, -6} 75 | 76 | 77 | 78 | ShouldExport 79 | YES 80 | Width 81 | 7 82 | 83 | 84 | FileType 85 | flat 86 | GraphDocumentVersion 87 | 11 88 | GraphicsList 89 | 90 | 91 | Class 92 | LineGraphic 93 | FontInfo 94 | 95 | Color 96 | 97 | w 98 | 0 99 | 100 | Font 101 | Helvetica 102 | Size 103 | 12 104 | 105 | ID 106 | 57 107 | Points 108 | 109 | {297, 203} 110 | {278.5, 248.88235294117646} 111 | {232, 268} 112 | 113 | Style 114 | 115 | stroke 116 | 117 | Cap 118 | 2 119 | Color 120 | 121 | b 122 | 0.196078 123 | g 124 | 0.196078 125 | r 126 | 0.196078 127 | 128 | HeadArrow 129 | UML2Socket 130 | Legacy 131 | 132 | LineType 133 | 1 134 | Pattern 135 | 24 136 | TailArrow 137 | 0 138 | Width 139 | 6 140 | 141 | 142 | 143 | 144 | Bounds 145 | {{150, 210}, {100, 8}} 146 | Class 147 | ShapedGraphic 148 | FontInfo 149 | 150 | Color 151 | 152 | w 153 | 0 154 | 155 | Font 156 | Helvetica 157 | Size 158 | 12 159 | 160 | ID 161 | 55 162 | Shape 163 | Rectangle 164 | Style 165 | 166 | fill 167 | 168 | Color 169 | 170 | b 171 | 0.196078 172 | g 173 | 0.196078 174 | r 175 | 0.196078 176 | 177 | 178 | shadow 179 | 180 | Beneath 181 | YES 182 | Color 183 | 184 | a 185 | 0.2 186 | b 187 | 0 188 | g 189 | 0 190 | r 191 | 0 192 | 193 | Draws 194 | NO 195 | Fuzziness 196 | 2.9887564182281494 197 | 198 | stroke 199 | 200 | Draws 201 | NO 202 | Width 203 | 3 204 | 205 | 206 | Text 207 | 208 | VerticalPad 209 | 0 210 | 211 | 212 | 213 | Bounds 214 | {{140, 201}, {120, 8}} 215 | Class 216 | ShapedGraphic 217 | FontInfo 218 | 219 | Color 220 | 221 | w 222 | 0 223 | 224 | Font 225 | Helvetica 226 | Size 227 | 12 228 | 229 | ID 230 | 5 231 | Shape 232 | Rectangle 233 | Style 234 | 235 | fill 236 | 237 | Color 238 | 239 | b 240 | 0.196078 241 | g 242 | 0.196078 243 | r 244 | 0.196078 245 | 246 | 247 | shadow 248 | 249 | Beneath 250 | YES 251 | Color 252 | 253 | a 254 | 0.2 255 | b 256 | 0 257 | g 258 | 0 259 | r 260 | 0 261 | 262 | Draws 263 | NO 264 | Fuzziness 265 | 2.9887564182281494 266 | 267 | stroke 268 | 269 | Draws 270 | NO 271 | Width 272 | 3 273 | 274 | 275 | Text 276 | 277 | VerticalPad 278 | 0 279 | 280 | 281 | 282 | Class 283 | Group 284 | Graphics 285 | 286 | 287 | Class 288 | LineGraphic 289 | FontInfo 290 | 291 | Color 292 | 293 | w 294 | 0 295 | 296 | Font 297 | Helvetica 298 | Size 299 | 12 300 | 301 | ID 302 | 43 303 | Points 304 | 305 | {207.64341433322994, 284.21863871559322} 306 | {190.10856846166689, 248.26687686362655} 307 | {198.87599139744844, 266.24275778960987} 308 | 309 | Style 310 | 311 | stroke 312 | 313 | Color 314 | 315 | b 316 | 0.196078 317 | g 318 | 0.196078 319 | r 320 | 0.196078 321 | 322 | HeadArrow 323 | 0 324 | Legacy 325 | 326 | LineType 327 | 1 328 | TailArrow 329 | 0 330 | Width 331 | 4 332 | 333 | 334 | 335 | 336 | Class 337 | LineGraphic 338 | FontInfo 339 | 340 | Color 341 | 342 | w 343 | 0 344 | 345 | Font 346 | Helvetica 347 | Size 348 | 12 349 | 350 | ID 351 | 44 352 | Points 353 | 354 | {233.94967900202136, 269.71931324247208} 355 | {225.26913112330828, 265.60858477596292} 356 | {218.49509814698303, 272.25030723596205} 357 | 358 | Style 359 | 360 | stroke 361 | 362 | Color 363 | 364 | b 365 | 0.196078 366 | g 367 | 0.196078 368 | r 369 | 0.196078 370 | 371 | HeadArrow 372 | 0 373 | Legacy 374 | 375 | LineType 376 | 1 377 | TailArrow 378 | 0 379 | Width 380 | 4 381 | 382 | 383 | 384 | 385 | Class 386 | LineGraphic 387 | FontInfo 388 | 389 | Color 390 | 391 | w 392 | 0 393 | 394 | Font 395 | Helvetica 396 | Size 397 | 12 398 | 399 | ID 400 | 45 401 | Points 402 | 403 | {180.0220362240714, 296.02158204981686} 404 | {182.12701690094829, 286.65039982183856} 405 | {191.53127675800798, 285.40144163963436} 406 | 407 | Style 408 | 409 | stroke 410 | 411 | Color 412 | 413 | b 414 | 0.196078 415 | g 416 | 0.196078 417 | r 418 | 0.196078 419 | 420 | HeadArrow 421 | 0 422 | Legacy 423 | 424 | LineType 425 | 1 426 | TailArrow 427 | 0 428 | Width 429 | 4 430 | 431 | 432 | 433 | 434 | Class 435 | LineGraphic 436 | FontInfo 437 | 438 | Color 439 | 440 | w 441 | 0 442 | 443 | Font 444 | Helvetica 445 | Size 446 | 12 447 | 448 | ID 449 | 46 450 | Points 451 | 452 | {231.67094821100753, 251.36019055150228} 453 | {221.63118338648519, 249.02499842487029} 454 | {217.29024347022087, 258.37412890012746} 455 | 456 | Style 457 | 458 | stroke 459 | 460 | Color 461 | 462 | b 463 | 0.196078 464 | g 465 | 0.196078 466 | r 467 | 0.196078 468 | 469 | HeadArrow 470 | 0 471 | Legacy 472 | 473 | LineType 474 | 1 475 | TailArrow 476 | 0 477 | Width 478 | 4 479 | 480 | 481 | 482 | 483 | Class 484 | LineGraphic 485 | FontInfo 486 | 487 | Color 488 | 489 | w 490 | 0 491 | 492 | Font 493 | Helvetica 494 | Size 495 | 12 496 | 497 | ID 498 | 47 499 | Points 500 | 501 | {166.9577768774675, 282.92291312031574} 502 | {171.29871679373181, 273.5737826450586} 503 | {181.33848161825415, 275.90897477169057} 504 | 505 | Style 506 | 507 | stroke 508 | 509 | Color 510 | 511 | b 512 | 0.196078 513 | g 514 | 0.196078 515 | r 516 | 0.196078 517 | 518 | HeadArrow 519 | 0 520 | Legacy 521 | 522 | LineType 523 | 1 524 | TailArrow 525 | 0 526 | Width 527 | 4 528 | 529 | 530 | 531 | 532 | Class 533 | LineGraphic 534 | FontInfo 535 | 536 | Color 537 | 538 | w 539 | 0 540 | 541 | Font 542 | Helvetica 543 | Size 544 | 12 545 | 546 | ID 547 | 48 548 | Points 549 | 550 | {219.04506001119273, 239.16031566830046} 551 | {208.98324343394941, 239.06108278105589} 552 | {205.54109756398421, 247.97184210952403} 553 | 554 | Style 555 | 556 | stroke 557 | 558 | Color 559 | 560 | b 561 | 0.196078 562 | g 563 | 0.196078 564 | r 565 | 0.196078 566 | 567 | HeadArrow 568 | 0 569 | Legacy 570 | 571 | LineType 572 | 1 573 | TailArrow 574 | 0 575 | Width 576 | 4 577 | 578 | 579 | 580 | 581 | Class 582 | LineGraphic 583 | FontInfo 584 | 585 | Color 586 | 587 | w 588 | 0 589 | 590 | Font 591 | Helvetica 592 | Size 593 | 12 594 | 595 | ID 596 | 49 597 | Points 598 | 599 | {164.21862318694357, 265.90095562243414} 600 | {170.33509944308517, 257.91104209298624} 601 | {179.47607022130836, 260.68460536640725} 602 | 603 | Style 604 | 605 | stroke 606 | 607 | Color 608 | 609 | b 610 | 0.196078 611 | g 612 | 0.196078 613 | r 614 | 0.196078 615 | 616 | HeadArrow 617 | 0 618 | Legacy 619 | 620 | LineType 621 | 1 622 | TailArrow 623 | 0 624 | Width 625 | 4 626 | 627 | 628 | 629 | 630 | Bounds 631 | {{177.91671272772152, 233.77290663213068}, {20, 20}} 632 | Class 633 | ShapedGraphic 634 | FontInfo 635 | 636 | Color 637 | 638 | w 639 | 0 640 | 641 | Font 642 | Helvetica 643 | Size 644 | 12 645 | 646 | ID 647 | 50 648 | Rotation 649 | 334 650 | Shape 651 | Circle 652 | Style 653 | 654 | fill 655 | 656 | Color 657 | 658 | b 659 | 0.196078 660 | g 661 | 0.196078 662 | r 663 | 0.196078 664 | 665 | 666 | shadow 667 | 668 | Draws 669 | NO 670 | 671 | stroke 672 | 673 | Color 674 | 675 | b 676 | 0.196078 677 | g 678 | 0.196078 679 | r 680 | 0.196078 681 | 682 | Draws 683 | NO 684 | Width 685 | 0.0 686 | 687 | 688 | Text 689 | 690 | VerticalPad 691 | 0 692 | 693 | 694 | 695 | Bounds 696 | {{178.87599139744844, 246.24275778960987}, {40, 40}} 697 | Class 698 | ShapedGraphic 699 | FontInfo 700 | 701 | Color 702 | 703 | w 704 | 0 705 | 706 | Font 707 | Helvetica 708 | Size 709 | 12 710 | 711 | ID 712 | 51 713 | Rotation 714 | 334 715 | Shape 716 | Circle 717 | Style 718 | 719 | fill 720 | 721 | Draws 722 | NO 723 | 724 | shadow 725 | 726 | Draws 727 | NO 728 | 729 | stroke 730 | 731 | Color 732 | 733 | b 734 | 0.196078 735 | g 736 | 0.196078 737 | r 738 | 0.196078 739 | 740 | Width 741 | 5 742 | 743 | 744 | Text 745 | 746 | VerticalPad 747 | 0 748 | 749 | 750 | 751 | ID 752 | 42 753 | Rotation 754 | 334 755 | 756 | 757 | Class 758 | LineGraphic 759 | FontInfo 760 | 761 | Color 762 | 763 | w 764 | 0 765 | 766 | Font 767 | Helvetica 768 | Size 769 | 12 770 | 771 | ID 772 | 30 773 | Points 774 | 775 | {103, 203} 776 | {121.5, 248.88235294117646} 777 | {168, 268} 778 | 779 | Style 780 | 781 | stroke 782 | 783 | Cap 784 | 2 785 | Color 786 | 787 | b 788 | 0.196078 789 | g 790 | 0.196078 791 | r 792 | 0.196078 793 | 794 | HeadArrow 795 | UML2Socket 796 | Legacy 797 | 798 | LineType 799 | 1 800 | Pattern 801 | 24 802 | TailArrow 803 | 0 804 | Width 805 | 6 806 | 807 | 808 | 809 | 810 | Bounds 811 | {{220, 140}, {40, 40}} 812 | Class 813 | ShapedGraphic 814 | FontInfo 815 | 816 | Color 817 | 818 | w 819 | 0 820 | 821 | Font 822 | Helvetica 823 | Size 824 | 12 825 | 826 | ID 827 | 59 828 | Shape 829 | Circle 830 | Style 831 | 832 | shadow 833 | 834 | Draws 835 | NO 836 | 837 | stroke 838 | 839 | Draws 840 | NO 841 | Width 842 | 0.0 843 | 844 | 845 | Text 846 | 847 | VerticalPad 848 | 0 849 | 850 | 851 | 852 | Bounds 853 | {{140, 130}, {50, 50}} 854 | Class 855 | ShapedGraphic 856 | FontInfo 857 | 858 | Color 859 | 860 | w 861 | 0 862 | 863 | Font 864 | Helvetica 865 | Size 866 | 12 867 | 868 | ID 869 | 60 870 | Shape 871 | Circle 872 | Style 873 | 874 | shadow 875 | 876 | Draws 877 | NO 878 | 879 | stroke 880 | 881 | Draws 882 | NO 883 | Width 884 | 0.0 885 | 886 | 887 | Text 888 | 889 | VerticalPad 890 | 0 891 | 892 | 893 | 894 | Bounds 895 | {{100, 100}, {200, 200}} 896 | Class 897 | ShapedGraphic 898 | FontInfo 899 | 900 | Color 901 | 902 | w 903 | 0 904 | 905 | Font 906 | Helvetica 907 | Size 908 | 12 909 | 910 | ID 911 | 61 912 | Shape 913 | AdjustableWedge 914 | ShapeData 915 | 916 | endAngle 917 | 90 918 | startAngle 919 | 270 920 | 921 | Style 922 | 923 | fill 924 | 925 | Color 926 | 927 | b 928 | 0.196078 929 | g 930 | 0.196078 931 | r 932 | 0.196078 933 | 934 | 935 | shadow 936 | 937 | Draws 938 | NO 939 | 940 | stroke 941 | 942 | Draws 943 | NO 944 | Width 945 | 0.0 946 | 947 | 948 | Text 949 | 950 | VerticalPad 951 | 0 952 | 953 | TextRelativeArea 954 | {{0.10000000000000001, 0.14999999999999999}, {0.80000000000000004, 0.69999999999999996}} 955 | 956 | 957 | GridInfo 958 | 959 | GridSpacing 960 | 10 961 | MajorGridSpacing 962 | 10 963 | ShowsGrid 964 | YES 965 | SnapsToGrid 966 | YES 967 | 968 | GuidesLocked 969 | NO 970 | GuidesVisible 971 | YES 972 | HPages 973 | 2 974 | ImageCounter 975 | 1 976 | KeepToScale 977 | 978 | Layers 979 | 980 | 981 | Lock 982 | NO 983 | Name 984 | Layer 1 985 | Print 986 | YES 987 | View 988 | YES 989 | 990 | 991 | LayoutInfo 992 | 993 | Animate 994 | NO 995 | circoMinDist 996 | 18 997 | circoSeparation 998 | 0.0 999 | layoutEngine 1000 | dot 1001 | neatoLineLength 1002 | 0.20000000298023224 1003 | neatoSeparation 1004 | 0.0 1005 | twopiSeparation 1006 | 0.0 1007 | 1008 | LinksVisible 1009 | NO 1010 | MagnetsVisible 1011 | NO 1012 | MasterSheets 1013 | 1014 | ModificationDate 1015 | 2014-10-21 16:50:22 +0000 1016 | Modifier 1017 | Yuriy Tymchuk 1018 | NotesVisible 1019 | NO 1020 | Orientation 1021 | 2 1022 | OriginVisible 1023 | NO 1024 | PageBreaks 1025 | NO 1026 | PrintInfo 1027 | 1028 | NSBottomMargin 1029 | 1030 | float 1031 | 41 1032 | 1033 | NSHorizonalPagination 1034 | 1035 | coded 1036 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG 1037 | 1038 | NSLeftMargin 1039 | 1040 | float 1041 | 18 1042 | 1043 | NSPaperName 1044 | 1045 | string 1046 | na-letter 1047 | 1048 | NSPaperSize 1049 | 1050 | size 1051 | {612.00003004074097, 792} 1052 | 1053 | NSPrintReverseOrientation 1054 | 1055 | coded 1056 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG 1057 | 1058 | NSRightMargin 1059 | 1060 | float 1061 | 18 1062 | 1063 | NSTopMargin 1064 | 1065 | float 1066 | 18 1067 | 1068 | 1069 | PrintOnePage 1070 | 1071 | ReadOnly 1072 | NO 1073 | RowAlign 1074 | 1 1075 | RowSpacing 1076 | 36 1077 | SheetTitle 1078 | Canvas 1 1079 | SmartAlignmentGuidesActive 1080 | YES 1081 | SmartDistanceGuidesActive 1082 | YES 1083 | UniqueID 1084 | 1 1085 | UseEntirePage 1086 | 1087 | VPages 1088 | 1 1089 | WindowInfo 1090 | 1091 | BottomSlabHeight 1092 | 496 1093 | CurrentSheet 1094 | 0 1095 | Expanded_Canvases 1096 | 1097 | Frame 1098 | {{5, 34}, {1414, 843}} 1099 | ShowInfo 1100 | 1101 | ShowRuler 1102 | 1103 | Sidebar 1104 | 1105 | SidebarWidth 1106 | 230 1107 | VisibleRegion 1108 | {{-1300, -1047}, {3468, 2792}} 1109 | Zoom 1110 | 0.25 1111 | ZoomValues 1112 | 1113 | 1114 | Canvas 1 1115 | 0.25 1116 | 1 1117 | 1118 | 1119 | 1120 | 1121 | 1122 | --------------------------------------------------------------------------------