From 530fc1a8c566410d54ce455383d4f96f7718111f Mon Sep 17 00:00:00 2001 From: Alexander Sohn <39831045+Sohn123@users.noreply.github.com> Date: Thu, 9 Jun 2022 21:51:17 +0200 Subject: [PATCH] Add a Linter to the CI to make codestyle more consistent. --- .github/workflows/ci-linter.yml | 20 +++++++ .smalltalk.lint.ston | 17 ++++++ .squot | 3 +- packages/.filetree | 2 + .../instance/baseline..st | 9 ++- packages/Tests-SVG-Linter.package/.filetree | 4 ++ .../Tests-SVG-Linter.package/.squot-contents | 5 ++ .../SVGLinterTests.class/README.md | 1 + .../instance/arbitraryCodeRule..st | 4 ++ .../instance/arbitraryCodeRule.plugIn..st | 16 +++++ .../instance/classTestObjects..st | 4 ++ .../instance/classTestObjects.st | 4 ++ .../SVGLinterTests.class/instance/classes..st | 4 ++ .../SVGLinterTests.class/instance/classes.st | 4 ++ .../instance/environmentFor.withRule..st | 6 ++ .../instance/hasTrailingWhitespaces..st | 4 ++ .../instance/initialize.st | 10 ++++ .../instance/isLineWithOnlyTabsAndSpaces..st | 4 ++ .../instance/methodTestObjects.st | 4 ++ .../instance/methodsLinesDo..st | 11 ++++ .../methodsLinesDo.excludeClasses..st | 9 +++ .../instance/testAssertOrder.st | 15 +++++ .../instance/testCorrectClassPrefix.st | 18 ++++++ .../instance/testDefaultValuesOnClassSide.st | 8 +++ .../instance/testIfTrueReturnsRule.st | 5 ++ .../instance/testInstanceVarAccess.st | 4 ++ .../instance/testLongMethods.st | 4 ++ .../instance/testMethodHasEmptyLine.st | 5 ++ .../instance/testMethodNameIsLowerCase.st | 9 +++ .../testMethodNoConsecutiveEmptyLines.st | 7 +++ .../instance/testMethodNoEmptyLineAtEnd.st | 4 ++ .../testMethodNoTrailingWhitespaces.st | 5 ++ ...stMethodNoTwoWhitespacesNextToEachOther.st | 5 ++ .../testMethodParamsHaveMeaningfulNames.st | 4 ++ .../instance/testNoClassComments.st | 4 ++ .../instance/testNoDotAfterReturn.st | 10 ++++ .../instance/testNoUnclassifiedMethods.st | 5 ++ .../instance/testNoUnconditionalRecursion.st | 5 ++ .../instance/testSmallLintContains.st | 5 ++ .../testTemporaryVariableCapitalization.st | 5 ++ ...estsmallLintClassVariableCapitalization.st | 5 ++ .../testsmallLintCodeCruftLeftInMethods.st | 5 ++ .../testsmallLintCollectSelectNotUsed.st | 5 ++ .../instance/testsmallLintConsistencyCheck.st | 5 ++ .../testsmallLintDefinesEqualNotHash.st | 5 ++ .../testsmallLintEmptyExceptionHandler.st | 5 ++ .../instance/testsmallLintEqualNotUsed.st | 5 ++ .../testsmallLintFloatEqualityComparison.st | 5 ++ .../testsmallLintLiteralArrayCharacters.st | 5 ++ .../testsmallLintMethodModifierOverride.st | 5 ++ ...testsmallLintMissingTranslationsInMenus.st | 5 ++ .../testsmallLintModifiesCollection.st | 5 ++ ...testsmallLintOnlyReadOrWrittenTemporary.st | 4 ++ .../testsmallLintReturnsBooleanAndOther.st | 5 ++ ...estsmallLintSendsUnknownMessageToGlobal.st | 5 ++ .../instance/testsmallLintSizeCheck.st | 5 ++ .../testsmallLintStringConcatenation.st | 5 ++ .../testsmallLintTempVarOverridesInstVar.st | 5 ++ ...mallLintTemporaryVariableCapitalization.st | 5 ++ .../testsmallLintTempsReadBeforeWritten.st | 5 ++ .../instance/testsmallLintUnoptimizedAndOr.st | 5 ++ .../instance/testsmallLintUnpackagedCode.st | 5 ++ .../instance/testsmallLintUsesAdd.st | 5 ++ .../instance/testsmallLintUsesTrue.st | 5 ++ .../methodProperties.json | 60 +++++++++++++++++++ .../SVGLinterTests.class/properties.json | 15 +++++ .../SVGScopedEnvironment.class/README.md | 1 + .../class/newFor.test.plugIn..st | 4 ++ .../instance/fetchClasses..st | 7 +++ .../initializeForClasses.test.plugIn..st | 10 ++++ .../instance/loadTest.plugIn..st | 6 ++ .../instance/systemClasses..st | 4 ++ .../methodProperties.json | 8 +++ .../properties.json | 14 +++++ .../monticello.meta/categories.st | 1 + .../monticello.meta/initializers.st | 0 .../Tests-SVG-Linter.package/properties.json | 2 + scripts/preLoading.st | 1 + 78 files changed, 521 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/ci-linter.yml create mode 100644 .smalltalk.lint.ston create mode 100644 packages/.filetree create mode 100644 packages/Tests-SVG-Linter.package/.filetree create mode 100644 packages/Tests-SVG-Linter.package/.squot-contents create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/README.md create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/arbitraryCodeRule..st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/arbitraryCodeRule.plugIn..st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classTestObjects..st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classTestObjects.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classes..st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classes.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/environmentFor.withRule..st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/hasTrailingWhitespaces..st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/initialize.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/isLineWithOnlyTabsAndSpaces..st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/methodTestObjects.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/methodsLinesDo..st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/methodsLinesDo.excludeClasses..st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testAssertOrder.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testCorrectClassPrefix.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testDefaultValuesOnClassSide.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testIfTrueReturnsRule.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testInstanceVarAccess.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testLongMethods.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodHasEmptyLine.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNameIsLowerCase.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoConsecutiveEmptyLines.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoEmptyLineAtEnd.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoTrailingWhitespaces.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoTwoWhitespacesNextToEachOther.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodParamsHaveMeaningfulNames.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoClassComments.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoDotAfterReturn.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoUnclassifiedMethods.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoUnconditionalRecursion.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testSmallLintContains.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testTemporaryVariableCapitalization.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintClassVariableCapitalization.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintCodeCruftLeftInMethods.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintCollectSelectNotUsed.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintConsistencyCheck.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintDefinesEqualNotHash.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintEmptyExceptionHandler.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintEqualNotUsed.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintFloatEqualityComparison.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintLiteralArrayCharacters.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintMethodModifierOverride.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintMissingTranslationsInMenus.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintModifiesCollection.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintOnlyReadOrWrittenTemporary.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintReturnsBooleanAndOther.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintSendsUnknownMessageToGlobal.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintSizeCheck.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintStringConcatenation.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintTempVarOverridesInstVar.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintTemporaryVariableCapitalization.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintTempsReadBeforeWritten.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUnoptimizedAndOr.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUnpackagedCode.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUsesAdd.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUsesTrue.st create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/methodProperties.json create mode 100644 packages/Tests-SVG-Linter.package/SVGLinterTests.class/properties.json create mode 100644 packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/README.md create mode 100644 packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/class/newFor.test.plugIn..st create mode 100644 packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/fetchClasses..st create mode 100644 packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/initializeForClasses.test.plugIn..st create mode 100644 packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/loadTest.plugIn..st create mode 100644 packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/systemClasses..st create mode 100644 packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/methodProperties.json create mode 100644 packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/properties.json create mode 100644 packages/Tests-SVG-Linter.package/monticello.meta/categories.st create mode 100644 packages/Tests-SVG-Linter.package/monticello.meta/initializers.st create mode 100644 packages/Tests-SVG-Linter.package/properties.json create mode 100644 scripts/preLoading.st diff --git a/.github/workflows/ci-linter.yml b/.github/workflows/ci-linter.yml new file mode 100644 index 00000000..f8e4e89e --- /dev/null +++ b/.github/workflows/ci-linter.yml @@ -0,0 +1,20 @@ +name: CI-Lint + +on: [push, pull_request] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ ubuntu-latest ] + smalltalk: [ Squeak64-5.3 ] + name: ${{ matrix.smalltalk }} on ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - uses: hpi-swa/setup-smalltalkCI@v1 + with: + smalltalk-version: ${{ matrix.smalltalk }} + - run: smalltalkci -s ${{ matrix.smalltalk }} .smalltalk.lint.ston + shell: bash + timeout-minutes: 15 diff --git a/.smalltalk.lint.ston b/.smalltalk.lint.ston new file mode 100644 index 00000000..73abbddc --- /dev/null +++ b/.smalltalk.lint.ston @@ -0,0 +1,17 @@ +SmalltalkCISpec { + #loading : [ + SCIMetacelloLoadSpec { + #baseline : 'SVGMorph', + #platforms : [ #squeak ], + #directory : 'packages', + #load : [ 'linter' ], + #useLatestMetacello : true + } + ], + #preLoading : [ + 'scripts/preLoading.st' + ], + #testing : { + #classes : [ #SVGLinterTests ] + } +} diff --git a/.squot b/.squot index 15d96d17..83f50724 100644 --- a/.squot +++ b/.squot @@ -3,5 +3,6 @@ OrderedDictionary { 'packages/Tests-SVG-Editor.package' : #SquotCypressCodeSerializer, 'packages/Tests-SVG-Morphic.package' : #SquotCypressCodeSerializer, 'packages/SVG-Editor.package' : #SquotCypressCodeSerializer, - 'packages/SVG-Morphic.package' : #SquotCypressCodeSerializer + 'packages/SVG-Morphic.package' : #SquotCypressCodeSerializer, + 'packages/Tests-SVG-Linter.package' : #SquotCypressCodeSerializer } \ No newline at end of file diff --git a/packages/.filetree b/packages/.filetree new file mode 100644 index 00000000..1616d042 --- /dev/null +++ b/packages/.filetree @@ -0,0 +1,2 @@ +{"propertyFileExtension" : ".json", +"packageExtension" : ".package" } \ No newline at end of file diff --git a/packages/BaselineOfSVGMorph.package/BaselineOfSVGMorph.class/instance/baseline..st b/packages/BaselineOfSVGMorph.package/BaselineOfSVGMorph.class/instance/baseline..st index 660707b2..56be6d8d 100644 --- a/packages/BaselineOfSVGMorph.package/BaselineOfSVGMorph.class/instance/baseline..st +++ b/packages/BaselineOfSVGMorph.package/BaselineOfSVGMorph.class/instance/baseline..st @@ -6,13 +6,18 @@ baseline: spec spec package: 'SVG-Morphic'; package: 'SVG-Editor' with: [spec requires: #('core')]; + package: 'Tests-SVG-Linter' with: [spec requires: #('core' 'editor' 'swalinter')]; package: 'Tests-SVG-Morphic' with: [spec requires: #('core' 'mtf')]; package: 'Tests-SVG-Editor' with: [spec requires: #('editor' 'mtf')]; - baseline: 'MorphicTestingFramework' with: [spec repository: 'github://hpi-swa-teaching/Morphic-Testing-Framework:master/packages']. + baseline: 'MorphicTestingFramework' with: [spec repository: 'github://hpi-swa-teaching/Morphic-Testing-Framework:master/packages']; + baseline: 'SwaLint' with: [spec repository: 'github://hpi-swa-teaching/SwaLint:develop/packages']. spec group: 'default' with: #('SVG-Morphic' 'SVG-Editor' 'Tests-SVG-Morphic' 'Tests-SVG-Editor'); group: 'core' with: #('SVG-Morphic'); + group: 'linter' with: #('Tests-SVG-Linter'); group: 'editor' with: #('SVG-Editor'); - group: 'tests' with: #('Tests-SVG-Morphic' 'Tests-SVG-Editor')]; + group: 'tests' with: #('Tests-SVG-Morphic' 'Tests-SVG-Editor'); group: 'mtf' with: #('MorphicTestingFramework'); + group: 'swalinter' with: #('SwaLint'); yourself . +] diff --git a/packages/Tests-SVG-Linter.package/.filetree b/packages/Tests-SVG-Linter.package/.filetree new file mode 100644 index 00000000..8998102c --- /dev/null +++ b/packages/Tests-SVG-Linter.package/.filetree @@ -0,0 +1,4 @@ +{ + "noMethodMetaData" : true, + "separateMethodMetaAndSource" : false, + "useCypressPropertiesFile" : true } diff --git a/packages/Tests-SVG-Linter.package/.squot-contents b/packages/Tests-SVG-Linter.package/.squot-contents new file mode 100644 index 00000000..239ddebb --- /dev/null +++ b/packages/Tests-SVG-Linter.package/.squot-contents @@ -0,0 +1,5 @@ +SquotTrackedObjectMetadata { + #objectClassName : #PackageInfo, + #objectsReplacedByNames : true, + #serializer : #SquotCypressCodeSerializer +} \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/README.md b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/README.md new file mode 100644 index 00000000..8941c409 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/README.md @@ -0,0 +1 @@ +LinterTests is the PR validation mechanism used to enforce linter compliance before merge. Individual rules are added as tests and required to have zero offenses. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/arbitraryCodeRule..st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/arbitraryCodeRule..st new file mode 100644 index 00000000..9d576ccb --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/arbitraryCodeRule..st @@ -0,0 +1,4 @@ +private +arbitraryCodeRule: aRule + + self arbitraryCodeRule: aRule plugIn: SLSmallLintPlugIn. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/arbitraryCodeRule.plugIn..st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/arbitraryCodeRule.plugIn..st new file mode 100644 index 00000000..5b6e7615 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/arbitraryCodeRule.plugIn..st @@ -0,0 +1,16 @@ +private +arbitraryCodeRule: aRule plugIn: aPlugIn + + | failures failingTestObjects result | + + failingTestObjects := OrderedCollection new. + failures := ((SLTestRunner new environment: (self environmentFor: aPlugIn withRule: aRule)) + runOnTests: {aRule} + andTestObjects: self classTestObjects) select: [:testObject | + result := testObject resultOf: aRule. + result isSummary + ifTrue: [ + failingTestObjects addAll: (testObject methods select: [:each | result summarizingCondition value: (each resultOf: result summarizedTest)]). + result > 0] + ifFalse: [result isNegative]]. + self assert: failures isEmpty description: 'Failures in: ', failures asString \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classTestObjects..st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classTestObjects..st new file mode 100644 index 00000000..9a6bedcb --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classTestObjects..st @@ -0,0 +1,4 @@ +accessing +classTestObjects: aCollection + + classTestObjects := aCollection. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classTestObjects.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classTestObjects.st new file mode 100644 index 00000000..36399521 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classTestObjects.st @@ -0,0 +1,4 @@ +accessing +classTestObjects + + ^ classTestObjects \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classes..st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classes..st new file mode 100644 index 00000000..5588a601 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classes..st @@ -0,0 +1,4 @@ +accessing +classes: aCollection + + classes := aCollection. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classes.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classes.st new file mode 100644 index 00000000..bf311ec7 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/classes.st @@ -0,0 +1,4 @@ +accessing +classes + + ^ classes \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/environmentFor.withRule..st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/environmentFor.withRule..st new file mode 100644 index 00000000..a6b189c7 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/environmentFor.withRule..st @@ -0,0 +1,6 @@ +private +environmentFor: aPlugIn withRule: aRule + + ^ aPlugIn = SLSmallLintPlugIn + ifTrue: [SVGScopedEnvironment newFor: self classTestObjects test: aRule plugIn: SLSmallLintPlugIn] + ifFalse: [SLDefaultEnvironment new] \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/hasTrailingWhitespaces..st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/hasTrailingWhitespaces..st new file mode 100644 index 00000000..191372a5 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/hasTrailingWhitespaces..st @@ -0,0 +1,4 @@ +private +hasTrailingWhitespaces: aString + + ^ (self isLineWithOnlyTabsAndSpaces: aString) not and: [aString last = Character space or: [aString last = Character tab]] \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/initialize.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/initialize.st new file mode 100644 index 00000000..b1dd45d1 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/initialize.st @@ -0,0 +1,10 @@ +initialization +initialize + + super initialize. + + self + classes: ((SystemNavigation default allClasses + select: [:aClass | + (aClass class category beginsWith: 'SVG')])); + classTestObjects: (self classes collect: [:anObject | anObject as: SLTestObject]). diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/isLineWithOnlyTabsAndSpaces..st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/isLineWithOnlyTabsAndSpaces..st new file mode 100644 index 00000000..d709d9c1 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/isLineWithOnlyTabsAndSpaces..st @@ -0,0 +1,4 @@ +private +isLineWithOnlyTabsAndSpaces: aString + + ^ aString isEmpty or: [aString allSatisfy: [:aChar | aChar = Character space or: [aChar = Character tab]]] \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/methodTestObjects.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/methodTestObjects.st new file mode 100644 index 00000000..c3c5e528 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/methodTestObjects.st @@ -0,0 +1,4 @@ +accessing +methodTestObjects + + ^ (self classTestObjects collect: [:aClassTestObject | aClassTestObject methods]) flatten \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/methodsLinesDo..st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/methodsLinesDo..st new file mode 100644 index 00000000..993abbb8 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/methodsLinesDo..st @@ -0,0 +1,11 @@ +private +methodsLinesDo: aBlock + + self methodTestObjects do: [:aSLMethodTestObject | + | lines | + lines := aSLMethodTestObject sourceCode string lines. + ((lines size >= 2) and: [lines second includesSubstring: '"@linter-ignore"']) + ifFalse: [ + aBlock value: lines + ] + ] \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/methodsLinesDo.excludeClasses..st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/methodsLinesDo.excludeClasses..st new file mode 100644 index 00000000..211702fd --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/methodsLinesDo.excludeClasses..st @@ -0,0 +1,9 @@ +private +methodsLinesDo: aBlock excludeClasses: aCollection + + self methodTestObjects do: [:aSLMethodTestObject | + (aCollection includes: (aSLMethodTestObject parent testClass)) + ifFalse: [ + aBlock value: aSLMethodTestObject sourceCode string lines + ] + ] \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testAssertOrder.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testAssertOrder.st new file mode 100644 index 00000000..de932836 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testAssertOrder.st @@ -0,0 +1,15 @@ +tests +testAssertOrder + + "Checks if the arguments of assert: equals: are passed in the right order. + A Constant should be the first argument, otherwise the arguments appear + in the wrong order in the title of the debugger error message." + self methodsLinesDo: [:lines | + lines do: [:line | + (line matchesRegex: '.*self assert\: .*equals\: .*') ifTrue: [ + | firstWordAfterEquals | + firstWordAfterEquals := (((line splitBy: 'equals: ') second) splitBy: ' ') first. + [self assert: ((Compiler evaluate: firstWordAfterEquals) isNil).] on: Error do: [''] + ] + ] + ] \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testCorrectClassPrefix.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testCorrectClassPrefix.st new file mode 100644 index 00000000..5a5bb847 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testCorrectClassPrefix.st @@ -0,0 +1,18 @@ +tests +testCorrectClassPrefix + + self classes do: [:aClass | + (aClass class category endsWith: 'Client-Core') + ifTrue: [self assert: (aClass class name beginsWith: 'TCC')]. + + (aClass class category endsWith: 'Client-UI') + ifTrue: [self assert: (aClass class name beginsWith: 'TCU')]. + + (aClass class category endsWith: 'Tests-Core') + ifTrue: [self assert: (aClass class name beginsWith: 'TCTC')]. + + (aClass class category endsWith: 'Tests-UI') + ifTrue: [self assert: (aClass class name beginsWith: 'TCTU')]. + + (aClass class category endsWith: 'Tests-Misc') + ifTrue: [self assert: (aClass class name beginsWith: 'TCTM')]]. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testDefaultValuesOnClassSide.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testDefaultValuesOnClassSide.st new file mode 100644 index 00000000..a816ebaa --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testDefaultValuesOnClassSide.st @@ -0,0 +1,8 @@ +tests +testDefaultValuesOnClassSide + + self methodTestObjects + reject: [:method | method methodName = 'defaultTimeout'] + thenDo: [:method | (method methodName beginsWith: 'default') ifTrue: + [self assert: method classSide] + ]. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testIfTrueReturnsRule.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testIfTrueReturnsRule.st new file mode 100644 index 00000000..51276b1c --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testIfTrueReturnsRule.st @@ -0,0 +1,5 @@ +tests +testIfTrueReturnsRule + + "replace IfTrue ifFalse branches with the shorter bool equivalent if possible" + self arbitraryCodeRule: #ifTrueReturnsRule: plugIn: SLRBImportPlugIn. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testInstanceVarAccess.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testInstanceVarAccess.st new file mode 100644 index 00000000..a06ce102 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testInstanceVarAccess.st @@ -0,0 +1,4 @@ +tests +testInstanceVarAccess + + self arbitraryCodeRule: #instanceVariableAccessIsConsistent: plugIn: SLSwaMetricsPlugIn. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testLongMethods.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testLongMethods.st new file mode 100644 index 00000000..44545b16 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testLongMethods.st @@ -0,0 +1,4 @@ +tests +testLongMethods + + self methodsLinesDo: [:lines | self assert: lines size <= 20] \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodHasEmptyLine.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodHasEmptyLine.st new file mode 100644 index 00000000..6584a270 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodHasEmptyLine.st @@ -0,0 +1,5 @@ +tests +testMethodHasEmptyLine + + "also rejects method with tabs or spaces in second line" + self methodsLinesDo: [:lines | self assert: (lines size < 2 or: [self isLineWithOnlyTabsAndSpaces: lines second])]. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNameIsLowerCase.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNameIsLowerCase.st new file mode 100644 index 00000000..145023a5 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNameIsLowerCase.st @@ -0,0 +1,9 @@ +tests +testMethodNameIsLowerCase + + self methodsLinesDo: [:lines | + | firstChar | + firstChar := lines first first. + firstChar isLetter + ifTrue: [self assert: firstChar isLowercase] + ]. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoConsecutiveEmptyLines.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoConsecutiveEmptyLines.st new file mode 100644 index 00000000..827e581e --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoConsecutiveEmptyLines.st @@ -0,0 +1,7 @@ +tests +testMethodNoConsecutiveEmptyLines + + self methodsLinesDo: [:lines | + 1 to: lines size -1 do: [:index | + self assert: ((self isLineWithOnlyTabsAndSpaces: (lines at: index)) + and: [self isLineWithOnlyTabsAndSpaces: (lines at: index + 1)]) not]]. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoEmptyLineAtEnd.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoEmptyLineAtEnd.st new file mode 100644 index 00000000..f45b5424 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoEmptyLineAtEnd.st @@ -0,0 +1,4 @@ +tests +testMethodNoEmptyLineAtEnd + + self methodsLinesDo: [:lines | self assert: (self isLineWithOnlyTabsAndSpaces: lines last) not]. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoTrailingWhitespaces.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoTrailingWhitespaces.st new file mode 100644 index 00000000..32a13bfb --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoTrailingWhitespaces.st @@ -0,0 +1,5 @@ +tests +testMethodNoTrailingWhitespaces + + self methodsLinesDo: [:lines | + lines do: [:aLine | self assert: (self hasTrailingWhitespaces: aLine) not]]. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoTwoWhitespacesNextToEachOther.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoTwoWhitespacesNextToEachOther.st new file mode 100644 index 00000000..347fc46e --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodNoTwoWhitespacesNextToEachOther.st @@ -0,0 +1,5 @@ +tests +testMethodNoTwoWhitespacesNextToEachOther + + self methodsLinesDo: [:lines | + lines do: [:aLine | self assert: (aLine includesSubstring: String space, String space) not]]. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodParamsHaveMeaningfulNames.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodParamsHaveMeaningfulNames.st new file mode 100644 index 00000000..9a4390cb --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testMethodParamsHaveMeaningfulNames.st @@ -0,0 +1,4 @@ +tests +testMethodParamsHaveMeaningfulNames + + self methodsLinesDo: [:lines | self assert: (lines first includesSubstring: 'anObject') not]. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoClassComments.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoClassComments.st new file mode 100644 index 00000000..b3754299 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoClassComments.st @@ -0,0 +1,4 @@ +tests +testNoClassComments + + self arbitraryCodeRule: #noClassComments: plugIn: SLSwaMetricsPlugIn. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoDotAfterReturn.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoDotAfterReturn.st new file mode 100644 index 00000000..0228dea8 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoDotAfterReturn.st @@ -0,0 +1,10 @@ +tests +testNoDotAfterReturn + + | code | + + self methodTestObjects do: [:aSLMethodTestObject | + code := aSLMethodTestObject sourceCode string. + + "may return nil, so deny: is not an option" + self assert: (SLCodingStylesPlugIn new hasDotAfterReturn: code) ~= true]. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoUnclassifiedMethods.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoUnclassifiedMethods.st new file mode 100644 index 00000000..5aa3d677 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoUnclassifiedMethods.st @@ -0,0 +1,5 @@ +tests +testNoUnclassifiedMethods + + "all methods have to be classified" + self arbitraryCodeRule: #smallLintUnclassifiedMethods. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoUnconditionalRecursion.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoUnconditionalRecursion.st new file mode 100644 index 00000000..386d9947 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testNoUnconditionalRecursion.st @@ -0,0 +1,5 @@ +tests +testNoUnconditionalRecursion + + "Infinite recursion is forbidden" + self arbitraryCodeRule: #smallLintUnconditionalRecursion. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testSmallLintContains.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testSmallLintContains.st new file mode 100644 index 00000000..27797a62 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testSmallLintContains.st @@ -0,0 +1,5 @@ +tests +testSmallLintContains + + "Use contains instead of detect: ifNone:" + self arbitraryCodeRule: #smallLintContains. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testTemporaryVariableCapitalization.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testTemporaryVariableCapitalization.st new file mode 100644 index 00000000..2a0fadd2 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testTemporaryVariableCapitalization.st @@ -0,0 +1,5 @@ +tests +testTemporaryVariableCapitalization + + "temporary variables should start with lowercase letters" + self arbitraryCodeRule: #smallLintTemporaryVariableCapitalization. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintClassVariableCapitalization.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintClassVariableCapitalization.st new file mode 100644 index 00000000..18d7fc5d --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintClassVariableCapitalization.st @@ -0,0 +1,5 @@ +tests +testsmallLintClassVariableCapitalization + + "Class vars are pascalcase" + self arbitraryCodeRule: #smallLintClassVariableCapitalization. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintCodeCruftLeftInMethods.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintCodeCruftLeftInMethods.st new file mode 100644 index 00000000..baa3f970 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintCodeCruftLeftInMethods.st @@ -0,0 +1,5 @@ +tests +testsmallLintCodeCruftLeftInMethods + + "remove debugger breaks etc from code, otherwise this test fails" + self arbitraryCodeRule: #smallLintCodeCruftLeftInMethods. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintCollectSelectNotUsed.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintCollectSelectNotUsed.st new file mode 100644 index 00000000..9e5c3c09 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintCollectSelectNotUsed.st @@ -0,0 +1,5 @@ +tests +testsmallLintCollectSelectNotUsed + + "prefer collect and select to manual list manipulation and aggregation" + self arbitraryCodeRule: #smallLintCollectSelectNotUsed. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintConsistencyCheck.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintConsistencyCheck.st new file mode 100644 index 00000000..d196b631 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintConsistencyCheck.st @@ -0,0 +1,5 @@ +tests +testsmallLintConsistencyCheck + + "isEmpty, isNil and First should be preferred to size = 0, = nil, at: 1" + self arbitraryCodeRule: #smallLintConsistencyCheck. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintDefinesEqualNotHash.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintDefinesEqualNotHash.st new file mode 100644 index 00000000..5da472cc --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintDefinesEqualNotHash.st @@ -0,0 +1,5 @@ +tests +testsmallLintDefinesEqualNotHash + + "Menu items should be translated somehow. will be evergreen until we sell this as a feature" + self arbitraryCodeRule: #smallLintDefinesEqualNotHash. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintEmptyExceptionHandler.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintEmptyExceptionHandler.st new file mode 100644 index 00000000..431168ea --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintEmptyExceptionHandler.st @@ -0,0 +1,5 @@ +tests +testsmallLintEmptyExceptionHandler + + "tests for empty exception handling blocks" + self arbitraryCodeRule: #smallLintEmptyExceptionHandler. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintEqualNotUsed.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintEqualNotUsed.st new file mode 100644 index 00000000..ae4da4e3 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintEqualNotUsed.st @@ -0,0 +1,5 @@ +tests +testsmallLintEqualNotUsed + + "results of an equal call are ignored" + self arbitraryCodeRule: #smallLintEqualNotUsed. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintFloatEqualityComparison.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintFloatEqualityComparison.st new file mode 100644 index 00000000..e25ed975 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintFloatEqualityComparison.st @@ -0,0 +1,5 @@ +tests +testsmallLintFloatEqualityComparison + + "All float comparisons should use equals and not =" + self arbitraryCodeRule: #smallLintFloatEqualityComparison. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintLiteralArrayCharacters.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintLiteralArrayCharacters.st new file mode 100644 index 00000000..2afd2bda --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintLiteralArrayCharacters.st @@ -0,0 +1,5 @@ +tests +testsmallLintLiteralArrayCharacters + + "literal char arrays should be strings" + self arbitraryCodeRule: #smallLintLiteralArrayCharacters. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintMethodModifierOverride.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintMethodModifierOverride.st new file mode 100644 index 00000000..426638de --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintMethodModifierOverride.st @@ -0,0 +1,5 @@ +tests +testsmallLintMethodModifierOverride + + "Checks that messages marked as override actually override something" + self arbitraryCodeRule: #smallLintMethodModifierOverride. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintMissingTranslationsInMenus.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintMissingTranslationsInMenus.st new file mode 100644 index 00000000..20f53cd2 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintMissingTranslationsInMenus.st @@ -0,0 +1,5 @@ +tests +testsmallLintMissingTranslationsInMenus + + "Menu items should be translated somehow. will be evergreen until we sell this as a feature" + self arbitraryCodeRule: #smallLintMissingTranslationsInMenus. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintModifiesCollection.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintModifiesCollection.st new file mode 100644 index 00000000..9d8fd790 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintModifiesCollection.st @@ -0,0 +1,5 @@ +tests +testsmallLintModifiesCollection + + "Non threadsafe and tracking iterators are used in squeak, so modifying collections while iterating over them does not work" + self arbitraryCodeRule: #smallLintModifiesCollection. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintOnlyReadOrWrittenTemporary.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintOnlyReadOrWrittenTemporary.st new file mode 100644 index 00000000..d7616c7e --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintOnlyReadOrWrittenTemporary.st @@ -0,0 +1,4 @@ +tests +testsmallLintOnlyReadOrWrittenTemporary + + self arbitraryCodeRule: #smallLintOnlyReadOrWrittenTemporary. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintReturnsBooleanAndOther.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintReturnsBooleanAndOther.st new file mode 100644 index 00000000..cdb233a0 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintReturnsBooleanAndOther.st @@ -0,0 +1,5 @@ +tests +testsmallLintReturnsBooleanAndOther + + "When one return type is a bool, all should be. obviously" + self arbitraryCodeRule: #smallLintReturnsBooleanAndOther. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintSendsUnknownMessageToGlobal.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintSendsUnknownMessageToGlobal.st new file mode 100644 index 00000000..f987ddc6 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintSendsUnknownMessageToGlobal.st @@ -0,0 +1,5 @@ +tests +testsmallLintSendsUnknownMessageToGlobal + + "Globals can be checked to implement a message with this test." + self arbitraryCodeRule: #smallLintSendsUnknownMessageToGlobal. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintSizeCheck.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintSizeCheck.st new file mode 100644 index 00000000..2b9fd541 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintSizeCheck.st @@ -0,0 +1,5 @@ +tests +testsmallLintSizeCheck + + "Checking size is irrelevant if you only enumerate." + self arbitraryCodeRule: #smallLintSizeCheck. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintStringConcatenation.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintStringConcatenation.st new file mode 100644 index 00000000..d90cebcf --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintStringConcatenation.st @@ -0,0 +1,5 @@ +tests +testsmallLintStringConcatenation + + "strings should be streamed when possible instead of concatted, as the runtime is better" + self arbitraryCodeRule: #smallLintStringConcatenation. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintTempVarOverridesInstVar.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintTempVarOverridesInstVar.st new file mode 100644 index 00000000..b9835663 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintTempVarOverridesInstVar.st @@ -0,0 +1,5 @@ +tests +testsmallLintTempVarOverridesInstVar + + "temp vars override the instance vars in scope which leads to easy bugs. choose different names!" + self arbitraryCodeRule: #smallLintTempVarOverridesInstVar. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintTemporaryVariableCapitalization.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintTemporaryVariableCapitalization.st new file mode 100644 index 00000000..8d3600d1 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintTemporaryVariableCapitalization.st @@ -0,0 +1,5 @@ +tests +testsmallLintTemporaryVariableCapitalization + + "temporary variables should be lowercase" + self arbitraryCodeRule: #smallLintTemporaryVariableCapitalization. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintTempsReadBeforeWritten.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintTempsReadBeforeWritten.st new file mode 100644 index 00000000..7b9082e1 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintTempsReadBeforeWritten.st @@ -0,0 +1,5 @@ +tests +testsmallLintTempsReadBeforeWritten + + "Temp vars should be initialized before being written" + self arbitraryCodeRule: #smallLintTempsReadBeforeWritten. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUnoptimizedAndOr.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUnoptimizedAndOr.st new file mode 100644 index 00000000..b7c64379 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUnoptimizedAndOr.st @@ -0,0 +1,5 @@ +tests +testsmallLintUnoptimizedAndOr + + "dont use nested ands, have them all at the top level" + self arbitraryCodeRule: #smallLintUnoptimizedAndOr. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUnpackagedCode.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUnpackagedCode.st new file mode 100644 index 00000000..17e2c572 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUnpackagedCode.st @@ -0,0 +1,5 @@ +tests +testsmallLintUnpackagedCode + + "All of our code should be in a monticello package." + self arbitraryCodeRule: #smallLintUnpackagedCode. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUsesAdd.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUsesAdd.st new file mode 100644 index 00000000..f372439f --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUsesAdd.st @@ -0,0 +1,5 @@ +tests +testsmallLintUsesAdd + + "Adding to a list returns the added elements. These can be ignored, as they are alread available as parameter" + self arbitraryCodeRule: #smallLintUsesAdd. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUsesTrue.st b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUsesTrue.st new file mode 100644 index 00000000..53e40908 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/instance/testsmallLintUsesTrue.st @@ -0,0 +1,5 @@ +tests +testsmallLintUsesTrue + + "There is a difference between true and True, and we should use true?" + self arbitraryCodeRule: #smallLintUsesTrue. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/methodProperties.json b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/methodProperties.json new file mode 100644 index 00000000..f73e4f89 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/methodProperties.json @@ -0,0 +1,60 @@ +{ + "class" : { + }, + "instance" : { + "arbitraryCodeRule:" : "js 6/13/2020 18:04", + "arbitraryCodeRule:plugIn:" : "JB 5/31/2021 08:57", + "classTestObjects" : "js 6/13/2020 13:28", + "classTestObjects:" : "js 6/13/2020 13:28", + "classes" : "js 6/13/2020 11:38", + "classes:" : "js 6/13/2020 11:38", + "environmentFor:withRule:" : "JB 6/7/2021 09:29", + "hasTrailingWhitespaces:" : "JB 6/10/2021 22:45", + "initialize" : "ct 10/7/2020 19:31", + "isLineWithOnlyTabsAndSpaces:" : "j 7/16/2020 12:30", + "methodTestObjects" : "js 6/13/2020 14:06", + "methodsLinesDo:" : "pk 6/19/2021 18:20", + "methodsLinesDo:excludeClasses:" : "JB 6/10/2021 22:45", + "testAssertOrder" : "JB 6/10/2021 22:44", + "testCorrectClassPrefix" : "JB 6/7/2021 09:25", + "testDefaultValuesOnClassSide" : "JB 6/11/2021 15:28", + "testIfTrueReturnsRule" : "js 6/13/2020 18:35", + "testInstanceVarAccess" : "js 6/13/2020 16:54", + "testLongMethods" : "JB 6/10/2021 22:45", + "testMethodHasEmptyLine" : "j 7/16/2020 12:29", + "testMethodNameIsLowerCase" : "JB 6/13/2021 10:53", + "testMethodNoConsecutiveEmptyLines" : "RS 6/23/2021 15:53", + "testMethodNoEmptyLineAtEnd" : "j 7/16/2020 12:32", + "testMethodNoTrailingWhitespaces" : "JB 6/10/2021 22:45", + "testMethodNoTwoWhitespacesNextToEachOther" : "js 6/13/2020 18:56", + "testMethodParamsHaveMeaningfulNames" : "RS 6/6/2021 11:58", + "testNoClassComments" : "js 6/13/2020 17:09", + "testNoDotAfterReturn" : "pk 8/5/2021 21:31", + "testNoUnclassifiedMethods" : "js 6/13/2020 18:06", + "testNoUnconditionalRecursion" : "js 6/13/2020 11:44", + "testSmallLintContains" : "js 6/13/2020 18:36", + "testTemporaryVariableCapitalization" : "js 6/13/2020 18:09", + "testsmallLintClassVariableCapitalization" : "js 6/13/2020 18:37", + "testsmallLintCodeCruftLeftInMethods" : "js 6/13/2020 18:37", + "testsmallLintCollectSelectNotUsed" : "js 6/13/2020 18:07", + "testsmallLintConsistencyCheck" : "RS 5/6/2021 20:27", + "testsmallLintDefinesEqualNotHash" : "js 6/13/2020 18:37", + "testsmallLintEmptyExceptionHandler" : "js 6/13/2020 18:37", + "testsmallLintEqualNotUsed" : "js 6/13/2020 18:37", + "testsmallLintFloatEqualityComparison" : "js 6/13/2020 18:07", + "testsmallLintLiteralArrayCharacters" : "js 6/13/2020 18:37", + "testsmallLintMethodModifierOverride" : "js 6/13/2020 18:37", + "testsmallLintMissingTranslationsInMenus" : "js 6/13/2020 18:37", + "testsmallLintModifiesCollection" : "js 6/13/2020 18:38", + "testsmallLintOnlyReadOrWrittenTemporary" : "js 6/13/2020 19:21", + "testsmallLintReturnsBooleanAndOther" : "js 6/13/2020 18:38", + "testsmallLintSendsUnknownMessageToGlobal" : "pk 6/13/2021 11:07", + "testsmallLintSizeCheck" : "js 6/13/2020 18:38", + "testsmallLintStringConcatenation" : "js 6/13/2020 18:38", + "testsmallLintTempVarOverridesInstVar" : "js 6/13/2020 18:38", + "testsmallLintTemporaryVariableCapitalization" : "js 6/13/2020 18:56", + "testsmallLintTempsReadBeforeWritten" : "js 6/13/2020 18:38", + "testsmallLintUnoptimizedAndOr" : "js 6/13/2020 18:39", + "testsmallLintUnpackagedCode" : "js 6/13/2020 18:39", + "testsmallLintUsesAdd" : "js 6/13/2020 18:39", + "testsmallLintUsesTrue" : "js 6/13/2020 18:39" } } diff --git a/packages/Tests-SVG-Linter.package/SVGLinterTests.class/properties.json b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/properties.json new file mode 100644 index 00000000..3b52ef07 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGLinterTests.class/properties.json @@ -0,0 +1,15 @@ +{ + "category" : "Tests-SVG-Linter", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "AS", + "instvars" : [ + "classes", + "classTestObjects" ], + "name" : "SVGLinterTests", + "pools" : [ + ], + "super" : "TestCase", + "type" : "normal" } diff --git a/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/README.md b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/README.md new file mode 100644 index 00000000..8615eabd --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/README.md @@ -0,0 +1 @@ +a scoped environment to run single tests faster \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/class/newFor.test.plugIn..st b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/class/newFor.test.plugIn..st new file mode 100644 index 00000000..e3274556 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/class/newFor.test.plugIn..st @@ -0,0 +1,4 @@ +instance creation +newFor: aCollection test: aSymbol plugIn: aPlugin + + ^ self basicNew initializeForClasses: aCollection test: aSymbol plugIn: aPlugin \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/fetchClasses..st b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/fetchClasses..st new file mode 100644 index 00000000..bd80a84f --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/fetchClasses..st @@ -0,0 +1,7 @@ +testing +fetchClasses: aCollection + + aCollection do: [ :aClass | + aClass category ifNotNil: [ + (self category: aClass category) + add: aClass name]]. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/initializeForClasses.test.plugIn..st b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/initializeForClasses.test.plugIn..st new file mode 100644 index 00000000..58725f94 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/initializeForClasses.test.plugIn..st @@ -0,0 +1,10 @@ +initialization +initializeForClasses: aCollection test: aSymbol plugIn: aPlugin + + super initialize. + self systemClasses: Dictionary new. + + self + initializeInstanceVariables; + loadTest: aSymbol plugIn: aPlugin; + fetchClasses: aCollection. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/loadTest.plugIn..st b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/loadTest.plugIn..st new file mode 100644 index 00000000..3cdca478 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/loadTest.plugIn..st @@ -0,0 +1,6 @@ +testing +loadTest: aSymbol plugIn: aPlugin + + self addTest: (SLTestData newFromDefault + symbol: aSymbol; + plugIn: aPlugin). \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/systemClasses..st b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/systemClasses..st new file mode 100644 index 00000000..0695db44 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/instance/systemClasses..st @@ -0,0 +1,4 @@ +accessing +systemClasses: aCollection + + systemClasses := aCollection. \ No newline at end of file diff --git a/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/methodProperties.json b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/methodProperties.json new file mode 100644 index 00000000..91258d4b --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/methodProperties.json @@ -0,0 +1,8 @@ +{ + "class" : { + "newFor:test:plugIn:" : "js 6/13/2020 16:40" }, + "instance" : { + "fetchClasses:" : "js 6/13/2020 18:39", + "initializeForClasses:test:plugIn:" : "js 6/13/2020 18:23", + "loadTest:plugIn:" : "js 6/13/2020 19:18", + "systemClasses:" : "js 6/13/2020 17:49" } } diff --git a/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/properties.json b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/properties.json new file mode 100644 index 00000000..2cb64054 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/SVGScopedEnvironment.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "Tests-SVG-Linter", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "js 6/13/2020 17:24", + "instvars" : [ + ], + "name" : "SVGScopedEnvironment", + "pools" : [ + ], + "super" : "SLEnvironment", + "type" : "normal" } diff --git a/packages/Tests-SVG-Linter.package/monticello.meta/categories.st b/packages/Tests-SVG-Linter.package/monticello.meta/categories.st new file mode 100644 index 00000000..207911d9 --- /dev/null +++ b/packages/Tests-SVG-Linter.package/monticello.meta/categories.st @@ -0,0 +1 @@ +SystemOrganization addCategory: #'Tests-SVG-Linter'! diff --git a/packages/Tests-SVG-Linter.package/monticello.meta/initializers.st b/packages/Tests-SVG-Linter.package/monticello.meta/initializers.st new file mode 100644 index 00000000..e69de29b diff --git a/packages/Tests-SVG-Linter.package/properties.json b/packages/Tests-SVG-Linter.package/properties.json new file mode 100644 index 00000000..f037444a --- /dev/null +++ b/packages/Tests-SVG-Linter.package/properties.json @@ -0,0 +1,2 @@ +{ + } diff --git a/scripts/preLoading.st b/scripts/preLoading.st new file mode 100644 index 00000000..c5fc268d --- /dev/null +++ b/scripts/preLoading.st @@ -0,0 +1 @@ +Deprecation showDeprecationWarnings: false.