[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-smalltalk] [PATCH 15/15] tooling: Introduce a helper for a Montice
From: |
Holger Hans Peter Freyther |
Subject: |
[Help-smalltalk] [PATCH 15/15] tooling: Introduce a helper for a Monticello export |
Date: |
Mon, 8 Apr 2013 11:30:31 +0200 |
The category of classes and extensions should match the package
name. Create a small class that is checking this on a package and
print the errors.
2013-03-30 Holger Hans Peter Freyther <address@hidden>
* Lint/Monticello.st: Added Monticello class for linting.
* Parser/EmittedClass.st: Reimplement >>#isEmittedClass,
>>#methodsToEmit,
>>#classMethodsToEmit, #>>isComplete.
* Parser/EmittedEntity.st: Added >>#isEmittedClass.
* Parser/Loader.st: Add >>#stuffToEmit selector.
* TODO: Add work item.
* package.xml: Add the Lint/Monticello.st.
---
packages/tooling/ChangeLog | 10 ++
packages/tooling/Lint/Monticello.st | 151 ++++++++++++++++++++++++++++++
packages/tooling/Makefile.frag | 2 +-
packages/tooling/Parser/EmittedClass.st | 20 ++++
packages/tooling/Parser/EmittedEntity.st | 4 +
packages/tooling/Parser/Loader.st | 5 +
packages/tooling/TODO | 11 +++
packages/tooling/package.xml | 2 +
8 files changed, 204 insertions(+), 1 deletion(-)
create mode 100644 packages/tooling/Lint/Monticello.st
diff --git a/packages/tooling/ChangeLog b/packages/tooling/ChangeLog
index 8c85f31..a1a8760 100644
--- a/packages/tooling/ChangeLog
+++ b/packages/tooling/ChangeLog
@@ -1,5 +1,15 @@
2013-03-30 Holger Hans Peter Freyther <address@hidden>
+ * Lint/Monticello.st: Added Monticello class for linting.
+ * Parser/EmittedClass.st: Reimplement >>#isEmittedClass,
>>#methodsToEmit,
+ >>#classMethodsToEmit, #>>isComplete.
+ * Parser/EmittedEntity.st: Added >>#isEmittedClass.
+ * Parser/Loader.st: Add >>#stuffToEmit selector.
+ * TODO: Add work item.
+ * package.xml: Add the Lint/Monticello.st.
+
+2013-03-30 Holger Hans Peter Freyther <address@hidden>
+
* Makefile.frag: Added.
* Parser/EmittedClass.st: Added from scripts/Convert.st.
* Parser/EmittedComments.st: Added from scripts/Convert.st.
diff --git a/packages/tooling/Lint/Monticello.st
b/packages/tooling/Lint/Monticello.st
new file mode 100644
index 0000000..3c7a45c
--- /dev/null
+++ b/packages/tooling/Lint/Monticello.st
@@ -0,0 +1,151 @@
+"======================================================================
+|
+| Linting for Monticello export
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 2013 Free Software Foundation, Inc.
+| Written by Holger Hans Peter Freyther.
+|
+| This file is part of the GNU Smalltalk class library.
+|
+| The GNU Smalltalk class library is free software; you can redistribute it
+| and/or modify it under the terms of the GNU Lesser General Public License
+| as published by the Free Software Foundation; either version 2.1, or (at
+| your option) any later version.
+|
+| The GNU Smalltalk class library is distributed in the hope that it will be
+| useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
+| General Public License for more details.
+|
+| You should have received a copy of the GNU Lesser General Public License
+| along with the GNU Smalltalk class library; see the file COPYING.LIB.
+| If not, write to the Free Software Foundation, 59 Temple Place - Suite
+| 330, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+
+Tooling.EmittedClass extend [
+ isComplete [
+ <category: 'accessing'>
+ ^ isComplete
+ ]
+
+ methodsToEmit [
+ <category: 'accessing'>
+ ^ methodsToEmit
+ ]
+
+ classMethodsToEmit [
+ <category: 'accessing'>
+ ^ classMethodsToEmit
+ ]
+
+ isComplete [
+ <category: 'accessing'>
+ ^ isComplete
+ ]
+]
+
+Object subclass: Monticello [
+ | loader package errors |
+ <category: 'Tooling-Lint-Monticello'>
+
+ Monticello class >> lint: aPackage [
+ "Work on a given package."
+ ^ self new
+ loadPackage: aPackage;
+ lint.
+ ]
+
+ loadPackage: aPackage [
+ package := aPackage.
+ loader := Tooling.Loader new.
+
+ self lintFiles: aPackage fileIns.
+ aPackage test ifNotNil: [
+ self lintFiles: aPackage test fileIns].
+ ]
+
+ lintFiles: aList [
+ | files |
+
+ files := package fullPathsOf: aList.
+ files do: [:each | | file |
+ file := each open: FileStream read.
+ loader parseSmalltalkStream: file with: STInST.GSTFileInParser.
+ file close.
+ ]
+ ]
+
+ loader [
+ <category: 'private'>
+ ^ loader
+ ]
+
+ lint [
+ <category: 'lint'>
+ "TODO: this should use the visitor..."
+ loader stuffToEmit do: [:each |
+ each isEmittedClass ifTrue: [self lintClass: each]].
+ ]
+
+ lintClass: aClass [
+ <category: 'lint'>
+ aClass isComplete
+ ifTrue: [self lintCompleteClass: aClass]
+ ifFalse: [self lintExtension: aClass].
+ ]
+
+ lintCompleteClass: aClass [
+ <category: 'lint'>
+ "Check if the package name is in the category"
+ (aClass forClass category startsWith: package name)
+ ifFalse: [self addError: 'Class does not begin with package name'
+ for: aClass forClass].
+ ]
+
+ lintExtension: aClass [
+ <category: 'lint'>
+
+ aClass methodsToEmit do: [:each |
+ self lintExtensionMethod: each on: aClass].
+ aClass classMethodsToEmit do: [:each |
+ self lintExtensionMethod: each on: aClass ].
+ ]
+
+ lintExtensionMethod: aSymbol on: aClass [
+ | method |
+ <category: 'lint'>
+ method := aClass forClass >> aSymbol.
+ (method methodCategory startsWith: ('*', package name))
+ ifFalse: [self addError: 'Method does not beging with
*package-name'
+ for: aClass forClass method: aSymbol].
+ ]
+
+ addError: aString for: aClass method: aMethod [
+ <category: 'error-handling'>
+ self errors add: '%1 on %2>>%3' % {aString. aClass name asString.
aMethod}.
+ ]
+
+ addError: aString for: aClass [
+ <category: 'error-handling'>
+ self errors add: '%1 on %2' % {aString. aClass name asString}.
+ ]
+
+ errors [
+ <category: 'error-handling'>
+ ^ errors ifNil: [errors := OrderedCollection new].
+ ]
+
+ printErrors [
+ <category: 'error-handling'>
+ self errors do: [:each |
+ Transcript nextPutAll: each; nl.]
+ ]
+]
diff --git a/packages/tooling/Makefile.frag b/packages/tooling/Makefile.frag
index 01d8d86..0083a52 100644
--- a/packages/tooling/Makefile.frag
+++ b/packages/tooling/Makefile.frag
@@ -1,5 +1,5 @@
Tooling_FILES = \
-packages/tooling/Parser/EmittedEntity.st
packages/tooling/Parser/EmittedClass.st
packages/tooling/Parser/EmittedComments.st
packages/tooling/Parser/EmittedEval.st packages/tooling/Parser/Loader.st
packages/tooling/Lint/Monticello.st
+packages/tooling/Parser/EmittedEntity.st
packages/tooling/Parser/EmittedClass.st
packages/tooling/Parser/EmittedComments.st
packages/tooling/Parser/EmittedEval.st packages/tooling/Parser/Loader.st
packages/tooling/Lint/Monticello.st
$(Tooling_FILES):
$(srcdir)/packages/tooling/stamp-classes: $(Tooling_FILES)
touch $(srcdir)/packages/tooling/stamp-classes
diff --git a/packages/tooling/Parser/EmittedClass.st
b/packages/tooling/Parser/EmittedClass.st
index 9a2cb13..0db74eb 100644
--- a/packages/tooling/Parser/EmittedClass.st
+++ b/packages/tooling/Parser/EmittedClass.st
@@ -82,4 +82,24 @@ EmittedEntity subclass: EmittedClass [
completeFileOut: isComplete;
fileOutSelectors: methodsToEmit classSelectors: classMethodsToEmit.
]
+
+ isEmittedClass [
+ <category: 'accessing'>
+ ^ true
+ ]
+
+ methodsToEmit [
+ <category: 'accessing'>
+ ^ methodsToEmit
+ ]
+
+ classMethodsToEmit [
+ <category: 'accessing'>
+ ^ classMethodsToEmit
+ ]
+
+ isComplete [
+ <category: 'accessing'>
+ ^ isComplete
+ ]
]
diff --git a/packages/tooling/Parser/EmittedEntity.st
b/packages/tooling/Parser/EmittedEntity.st
index aeb6928..9bdcf73 100644
--- a/packages/tooling/Parser/EmittedEntity.st
+++ b/packages/tooling/Parser/EmittedEntity.st
@@ -36,4 +36,8 @@ Object subclass: EmittedEntity [
emitTo: aStream filteredBy: aBlock [
self subclassResponsibility
]
+
+ isEmittedClass [
+ ^ false
+ ]
]
diff --git a/packages/tooling/Parser/Loader.st
b/packages/tooling/Parser/Loader.st
index 6b64301..c8fb0ec 100644
--- a/packages/tooling/Parser/Loader.st
+++ b/packages/tooling/Parser/Loader.st
@@ -232,4 +232,9 @@ STInST.STClassLoader subclass: Loader [
ifTrue: [ stuffToEmit last addMethod: aMethod ]
ifFalse: [ stuffToEmit add: ((EmittedClass forExtension:
currentClass) addMethod: aMethod) ]
]
+
+ stuffToEmit [
+ <category: 'accessing'>
+ ^ stuffToEmit
+ ]
]
diff --git a/packages/tooling/TODO b/packages/tooling/TODO
index bc29fe6..193c08a 100644
--- a/packages/tooling/TODO
+++ b/packages/tooling/TODO
@@ -1,2 +1,13 @@
* Make the Loader have a Converter subclass and use a Visitor instead
of the calls to emitTo:.
+
+* The following is shown as a a single class
+ Object subclass: Foo [
+ signal []
+ ]
+
+ Foo extend [
+ signalTwo []
+ ]
+
+ It should be two EmittedClass
diff --git a/packages/tooling/package.xml b/packages/tooling/package.xml
index ff3c23f..2bda19d 100644
--- a/packages/tooling/package.xml
+++ b/packages/tooling/package.xml
@@ -8,4 +8,6 @@
<filein>Parser/EmittedComments.st</filein>
<filein>Parser/EmittedEval.st</filein>
<filein>Parser/Loader.st</filein>
+
+ <filein>Lint/Monticello.st</filein>
</package>
--
1.7.10.4
- Re: [Help-smalltalk] [PATCH 02/15] misc: Fix compiler warnings in libgst., (continued)
- [Help-smalltalk] [PATCH 07/15] stinst: Fix parsing of negated numbers with the new RBNumberLiteralToken, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 05/15] kernel: Introduce the DirPackage packages to help with development, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 10/15] gtktools: Move GtkListModel from VisualGST to GTKTools, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 09/15] gtktools: Introduce a GTKTools package with helper classes, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 15/15] tooling: Introduce a helper for a Monticello export,
Holger Hans Peter Freyther <=
- [Help-smalltalk] [PATCH 11/15] gtktools: Move the GtkSideBarWidget from VisualGST to GTKTools, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 14/15] tooling: Introduce a new package for tooling helpers, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 12/15] gtktools: Move model classes from VisualGST to GTKTools, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 13/15] gtktools: Move the Clock/Tetris to the GTKTools, Holger Hans Peter Freyther, 2013/04/08
- Re: [Help-smalltalk] [PATCH 01/15] opcode: Remove the copy of the binutils code from the repository, Paolo Bonzini, 2013/04/14