Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion doc-uml/FamixTypeScript-traits.puml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion doc-uml/FamixTypeScript-traits.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion doc-uml/FamixTypeScript.puml
Original file line number Diff line number Diff line change
@@ -1 +1 @@
@startumlhide empty membersskinparam class { BackgroundColor white ArrowColor black BorderColor darkGray}class SourceLanguage <<(C,white)>> #CCFFFF {}class ParameterConcretization <<(C,white)>> #CCFFFF {}class implicitVariable <<(C,white)>> #CCFFFF {}class ParameterType <<(C,white)>> #CCFFFF {}class SourceAnchor <<(C,white)>> #CCFFFF {}class JSDoc <<(C,white)>> #CCFFFF {}class Comment <<(C,white)>> #CCFFFF { Boolean isJSDoc}class ParametricInterface <<(C,white)>> #CCFFFF {}class SourceTextAnchor <<(C,white)>> #CCFFFF {}class FamixTypeScriptModel <<(C,white)>> #CCFFFF {}class BehaviouralEntity <<(C,white)>> #CCFFFF {}class PrimitiveType <<(C,white)>> #CCFFFF {}class Parameter <<(C,white)>> #CCFFFF {}class Type <<(C,white)>> #CCFFFF {}class Alias <<(C,white)>> #CCFFFF {}class Entity <<(C,white)>> #CCFFFF {}class Namespace <<(C,white)>> #CCFFFF {}class ContainerEntity <<(C,white)>> #CCFFFF {}class Property <<(C,white)>> #CCFFFF { Boolean isJavaScriptPrivate Boolean isDefinitelyAssigned Boolean isOptional Boolean readOnly}class Enum <<(C,white)>> #CCFFFF {}class Interface <<(C,white)>> #CCFFFF {}class Folder <<(C,white)>> #CCFFFF {}class ParametricMethod <<(C,white)>> #CCFFFF {}class Invocation <<(C,white)>> #CCFFFF {}class ImportClause <<(C,white)>> #CCFFFF {}class NamedEntity <<(C,white)>> #CCFFFF {}class Variable <<(C,white)>> #CCFFFF {}class ParametricFunction <<(C,white)>> #CCFFFF {}class Decorator <<(C,white)>> #CCFFFF { String expression}class Access <<(C,white)>> #CCFFFF {}class Class <<(C,white)>> #CCFFFF {}class TWithInterfaces <<(T,white)>> #CCFFFF {}class TEntityCreator <<(T,white)>> #CCFFFF {}class Method <<(C,white)>> #CCFFFF {}class File <<(C,white)>> #CCFFFF {}class Module <<(C,white)>> #CCFFFF {}class IndexedFileAnchor <<(C,white)>> #CCFFFF {}class EnumValue <<(C,white)>> #CCFFFF {}class SourcedEntity <<(C,white)>> #CCFFFF {}class TClassMetrics <<(T,white)>> #CCFFFF {}class ArrowFunction <<(C,white)>> #CCFFFF {}class Concretization <<(C,white)>> #CCFFFF {}class Inheritance <<(C,white)>> #CCFFFF {}class StructuralEntity <<(C,white)>> #CCFFFF {}class Accessor <<(C,white)>> #CCFFFF {}class Reference <<(C,white)>> #CCFFFF {}class ScriptEntity <<(C,white)>> #CCFFFF {}class Implementation <<(C,white)>> #CCFFFF {}class ScopingEntity <<(C,white)>> #CCFFFF {}class ParametricClass <<(C,white)>> #CCFFFF {}class Function <<(C,white)>> #CCFFFF {}class ParametricArrowFunction <<(C,white)>> #CCFFFF {}Entity <|-- SourceLanguageEntity <|-- ParameterConcretizationType <|-- ParameterTypeVariable <|-- implicitVariableEntity <|-- SourceAnchorSourcedEntity <|-- JSDocSourcedEntity <|-- CommentInterface <|-- ParametricInterfaceSourceAnchor <|-- SourceTextAnchorContainerEntity <|-- BehaviouralEntityType <|-- PrimitiveTypeNamedEntity <|-- AliasStructuralEntity <|-- ParameterContainerEntity <|-- TypeNamedEntity <|-- ContainerEntityScopingEntity <|-- NamespaceStructuralEntity <|-- PropertyType <|-- EnumType <|-- InterfaceNamedEntity <|-- FolderEntity <|-- InvocationSourcedEntity <|-- NamedEntityMethod <|-- ParametricMethodEntity <|-- ImportClauseStructuralEntity <|-- VariableFunction <|-- ParametricFunctionNamedEntity <|-- DecoratorEntity <|-- AccessType <|-- ClassBehaviouralEntity <|-- MethodNamedEntity <|-- FileScriptEntity <|-- ModuleSourceAnchor <|-- IndexedFileAnchorEntity <|-- SourcedEntityBehaviouralEntity <|-- ArrowFunctionEntity <|-- ConcretizationStructuralEntity <|-- EnumValueEntity <|-- InheritanceNamedEntity <|-- StructuralEntityMethod <|-- AccessorEntity <|-- ReferenceScopingEntity <|-- ScriptEntityEntity <|-- ImplementationContainerEntity <|-- ScopingEntityClass <|-- ParametricClassBehaviouralEntity <|-- FunctionArrowFunction <|-- ParametricArrowFunctionTEntityCreator <|.. FamixTypeScriptModelTWithInterfaces <|.. ContainerEntityTClassMetrics <|.. ClassNamedEntity "decoratedEntity" -- "decorators*" Decorator@enduml
@startumlhide empty membersskinparam class { BackgroundColor white ArrowColor black BorderColor darkGray}class Parameter <<(C,white)>> #CCFFFF {}class Alias <<(C,white)>> #CCFFFF {}class Type <<(C,white)>> #CCFFFF {}class BehaviouralEntity <<(C,white)>> #CCFFFF {}class SourceLanguage <<(C,white)>> #CCFFFF {}class TEntityCreator <<(T,white)>> #CCFFFF {}class SourcedEntity <<(C,white)>> #CCFFFF {}class ContainerEntity <<(C,white)>> #CCFFFF {}class Access <<(C,white)>> #CCFFFF {}class ParametricInterface <<(C,white)>> #CCFFFF {}class TWithInterfaces <<(T,white)>> #CCFFFF {}class Decorator <<(C,white)>> #CCFFFF { String expression}class Function <<(C,white)>> #CCFFFF {}class Variable <<(C,white)>> #CCFFFF {}class Namespace <<(C,white)>> #CCFFFF {}class Implementation <<(C,white)>> #CCFFFF {}class Folder <<(C,white)>> #CCFFFF {}class StructuralEntity <<(C,white)>> #CCFFFF {}class ScriptEntity <<(C,white)>> #CCFFFF {}class NamedEntity <<(C,white)>> #CCFFFF {}class JSDoc <<(C,white)>> #CCFFFF {}class ParameterConcretization <<(C,white)>> #CCFFFF {}class File <<(C,white)>> #CCFFFF {}class Module <<(C,white)>> #CCFFFF {}class ParametricClass <<(C,white)>> #CCFFFF {}class ParametricFunction <<(C,white)>> #CCFFFF {}class Method <<(C,white)>> #CCFFFF {}class PrimitiveType <<(C,white)>> #CCFFFF {}class implicitVariable <<(C,white)>> #CCFFFF {}class Property <<(C,white)>> #CCFFFF { Boolean isDefinitelyAssigned Boolean readOnly Boolean isOptional Boolean isJavaScriptPrivate}class Concretization <<(C,white)>> #CCFFFF {}class Invocation <<(C,white)>> #CCFFFF {}class FamixTypeScriptModel <<(C,white)>> #CCFFFF {}class ImportClause <<(C,white)>> #CCFFFF {}class ParametricMethod <<(C,white)>> #CCFFFF {}class Inheritance <<(C,white)>> #CCFFFF {}class Reference <<(C,white)>> #CCFFFF {}class Enum <<(C,white)>> #CCFFFF {}class IndexedFileAnchor <<(C,white)>> #CCFFFF {}class ScopingEntity <<(C,white)>> #CCFFFF {}class Comment <<(C,white)>> #CCFFFF { Boolean isJSDoc}class EnumValue <<(C,white)>> #CCFFFF {}class Accessor <<(C,white)>> #CCFFFF {}class SourceTextAnchor <<(C,white)>> #CCFFFF {}class TClassMetrics <<(T,white)>> #CCFFFF {}class Entity <<(C,white)>> #CCFFFF {}class ParametricArrowFunction <<(C,white)>> #CCFFFF {}class Class <<(C,white)>> #CCFFFF {}class TFunctionMetrics <<(T,white)>> #CCFFFF {}class ParameterType <<(C,white)>> #CCFFFF {}class Interface <<(C,white)>> #CCFFFF {}class ArrowFunction <<(C,white)>> #CCFFFF {}class SourceAnchor <<(C,white)>> #CCFFFF {}StructuralEntity <|-- ParameterNamedEntity <|-- AliasContainerEntity <|-- TypeContainerEntity <|-- BehaviouralEntityEntity <|-- SourceLanguageEntity <|-- SourcedEntityNamedEntity <|-- ContainerEntityEntity <|-- AccessInterface <|-- ParametricInterfaceNamedEntity <|-- DecoratorBehaviouralEntity <|-- FunctionStructuralEntity <|-- VariableScopingEntity <|-- NamespaceEntity <|-- ImplementationNamedEntity <|-- FolderNamedEntity <|-- StructuralEntityScopingEntity <|-- ScriptEntitySourcedEntity <|-- NamedEntitySourcedEntity <|-- JSDocNamedEntity <|-- FileEntity <|-- ParameterConcretizationScriptEntity <|-- ModuleClass <|-- ParametricClassFunction <|-- ParametricFunctionBehaviouralEntity <|-- MethodType <|-- PrimitiveTypeStructuralEntity <|-- PropertyEntity <|-- ConcretizationEntity <|-- InvocationVariable <|-- implicitVariableEntity <|-- ImportClauseMethod <|-- ParametricMethodEntity <|-- InheritanceEntity <|-- ReferenceType <|-- EnumContainerEntity <|-- ScopingEntitySourceAnchor <|-- IndexedFileAnchorSourcedEntity <|-- CommentStructuralEntity <|-- EnumValueSourceAnchor <|-- SourceTextAnchorArrowFunction <|-- ParametricArrowFunctionMethod <|-- AccessorType <|-- ClassType <|-- ParameterTypeType <|-- InterfaceBehaviouralEntity <|-- ArrowFunctionEntity <|-- SourceAnchorTWithInterfaces <|.. ContainerEntityTFunctionMetrics <|.. FunctionTEntityCreator <|.. FamixTypeScriptModelTClassMetrics <|.. ClassTFunctionMetrics <|.. ArrowFunctionDecorator "decorators*" -- "decoratedEntity" NamedEntity@enduml
Expand Down
2 changes: 1 addition & 1 deletion doc-uml/FamixTypeScript.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ I represent a TypeScript arrow function.
Class {
#name : 'FamixTypeScriptArrowFunction',
#superclass : 'FamixTypeScriptBehaviouralEntity',
#traits : 'FamixTDefinedInModule + FamixTFunction + FamixTImportable + FamixTInvocable',
#classTraits : 'FamixTDefinedInModule classTrait + FamixTFunction classTrait + FamixTImportable classTrait + FamixTInvocable classTrait',
#traits : 'FamixTDefinedInModule + FamixTFunction + FamixTImportable + FamixTInvocable + FamixTypeScriptTFunctionMetrics',
#classTraits : 'FamixTDefinedInModule classTrait + FamixTFunction classTrait + FamixTImportable classTrait + FamixTInvocable classTrait + FamixTypeScriptTFunctionMetrics classTrait',
#category : 'Famix-TypeScript-Entities-Entities',
#package : 'Famix-TypeScript-Entities',
#tag : 'Entities'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ I represent a TypeScript function.
Class {
#name : 'FamixTypeScriptFunction',
#superclass : 'FamixTypeScriptBehaviouralEntity',
#traits : 'FamixTDefinedInModule + FamixTFunction + FamixTImportable + FamixTInvocable',
#classTraits : 'FamixTDefinedInModule classTrait + FamixTFunction classTrait + FamixTImportable classTrait + FamixTInvocable classTrait',
#traits : 'FamixTDefinedInModule + FamixTFunction + FamixTImportable + FamixTInvocable + FamixTypeScriptTFunctionMetrics',
#classTraits : 'FamixTDefinedInModule classTrait + FamixTFunction classTrait + FamixTImportable classTrait + FamixTInvocable classTrait + FamixTypeScriptTFunctionMetrics classTrait',
#category : 'Famix-TypeScript-Entities-Entities',
#package : 'Famix-TypeScript-Entities',
#tag : 'Entities'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
Trait {
#name : 'FamixTypeScriptTFunctionMetrics',
#category : 'Famix-TypeScript-Entities-Traits',
#package : 'Famix-TypeScript-Entities',
#tag : 'Traits'
}

{ #category : 'meta' }
FamixTypeScriptTFunctionMetrics classSide >> annotation [

<FMClass: #TFunctionMetrics super: #Object>
<package: #FamixTypeScript>
<generated>
^ self
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Extension { #name : 'FamixTypeScriptTFunctionMetrics' }

{ #category : '*Famix-TypeScript-Extensions' }
FamixTypeScriptTFunctionMetrics >> cyclomaticComplexity [
<FMProperty: #cyclomaticComplexity type: #Number>
<FMComment: 'The number of linear-independent paths through a method.'>
^ self lookUpPropertyNamed: #cyclomaticComplexity computedAs: [ self computeCyclomaticComplexity ]
]

{ #category : '*Famix-TypeScript-Extensions' }
FamixTypeScriptTFunctionMetrics >> cyclomaticComplexity: aNumber [
self cacheAt: #cyclomaticComplexity put: aNumber
]
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Extension { #name : #FamixTWithSourceLanguages }
Extension { #name : 'FamixTWithSourceLanguages' }

{ #category : #'*Famix-TypeScript-Generator' }
{ #category : '*Famix-TypeScript-Generator' }
FamixTWithSourceLanguages >> formattedSourceText [
^ self sourceLanguage
ifNotNil: [ :language | language format: self sourceText from: self ]
Expand Down
41 changes: 23 additions & 18 deletions src/Famix-TypeScript-Generator/FamixTypeScriptGenerator.class.st
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Class {
#name : #FamixTypeScriptGenerator,
#superclass : #FamixBasicInfrastructureGenerator,
#name : 'FamixTypeScriptGenerator',
#superclass : 'FamixBasicInfrastructureGenerator',
#instVars : [
'access',
'class',
Expand Down Expand Up @@ -44,30 +44,32 @@ Class {
'parametricClass',
'parametricInterface',
'concretization',
'parameterConcretization'
'parameterConcretization',
'tTypeScriptFunctionMetrics'
],
#category : #'Famix-TypeScript-Generator'
#category : 'Famix-TypeScript-Generator',
#package : 'Famix-TypeScript-Generator'
}

{ #category : #accessing }
{ #category : 'accessing' }
FamixTypeScriptGenerator class >> packageName [

^ #'Famix-TypeScript-Entities'
]

{ #category : #accessing }
{ #category : 'accessing' }
FamixTypeScriptGenerator class >> packageNameForAnnotations [

^ #'FamixTypeScript'
]

{ #category : #accessing }
{ #category : 'accessing' }
FamixTypeScriptGenerator class >> prefix [

^ #'FamixTypeScript'
]

{ #category : #accessing }
{ #category : 'accessing' }
FamixTypeScriptGenerator class >> translationDictionary [

| classNames associations |
Expand All @@ -79,7 +81,7 @@ FamixTypeScriptGenerator class >> translationDictionary [
^ Dictionary newFrom: associations.
]

{ #category : #comments }
{ #category : 'comments' }
FamixTypeScriptGenerator >> commentForConcretization [
"To verify"
^ '## Relations
Expand Down Expand Up @@ -113,7 +115,7 @@ FamixTypeScriptGenerator >> commentForConcretization [
'
]

{ #category : #'as yet unclassified' }
{ #category : 'as yet unclassified' }
FamixTypeScriptGenerator >> commentForParameterConcretization [
^ '## Relations
======================
Expand Down Expand Up @@ -146,7 +148,7 @@ FamixTypeScriptGenerator >> commentForParameterConcretization [
'
]

{ #category : #comments }
{ #category : 'comments' }
FamixTypeScriptGenerator >> commentForTCanBeInterface [
^ 'I allow an entity to be an interface abstraction
ex:
Expand All @@ -158,13 +160,13 @@ public interface Flyable {
```'
]

{ #category : #definition }
{ #category : 'definition' }
FamixTypeScriptGenerator >> commentForTWithInterfaces [

^ 'I can contain interfaces (Packages, Methods, Classes...)'
]

{ #category : #definition }
{ #category : 'definition' }
FamixTypeScriptGenerator >> defineClasses [

super defineClasses.
Expand Down Expand Up @@ -221,7 +223,7 @@ FamixTypeScriptGenerator >> defineClasses [
"self defineComments."
]

{ #category : #definition }
{ #category : 'definition' }
FamixTypeScriptGenerator >> defineHierarchy [

super defineHierarchy.
Expand Down Expand Up @@ -283,6 +285,7 @@ FamixTypeScriptGenerator >> defineHierarchy [
function --|> #TDefinedInModule.
function --|> #TInvocable.
function --|> #TImportable.
function --|> #TFunctionMetrics.

parametricFunction --|> function.
parametricFunction --|> #TParametricEntity.
Expand All @@ -292,6 +295,7 @@ FamixTypeScriptGenerator >> defineHierarchy [
arrowFunction --|> #TDefinedInModule.
arrowFunction --|> #TInvocable.
arrowFunction --|> #TImportable.
arrowFunction --|> #TFunctionMetrics. "Duplicate code for adding cyclomatic complexity"

parametricArrowFunction --|> arrowFunction.
parametricArrowFunction --|> #TParametricEntity.
Expand Down Expand Up @@ -416,7 +420,7 @@ FamixTypeScriptGenerator >> defineHierarchy [
parameterType --|> #TWithInheritances.
]

{ #category : #definition }
{ #category : 'definition' }
FamixTypeScriptGenerator >> defineProperties [

super defineProperties.
Expand Down Expand Up @@ -444,23 +448,24 @@ FamixTypeScriptGenerator >> defineProperties [
comment: 'Method is a setter'"
]

{ #category : #definition }
{ #category : 'definition' }
FamixTypeScriptGenerator >> defineRelations [
super defineRelations.
(decorator property: #decoratedEntity) *- (namedEntity property: #decorators).
]

{ #category : #definition }
{ #category : 'definition' }
FamixTypeScriptGenerator >> defineTraits [

super defineTraits.
tWithInterfaces := builder newTraitNamed: #TWithInterfaces.
tWithInterfaces comment: self commentForTWithInterfaces.

tTypeScriptClassMetrics := builder newTraitNamed: #TClassMetrics.
tTypeScriptFunctionMetrics := builder newTraitNamed: #TFunctionMetrics.
]

{ #category : #definition }
{ #category : 'definition' }
FamixTypeScriptGenerator >> newBuilder [

^ super newBuilder
Expand Down
2 changes: 1 addition & 1 deletion src/Famix-TypeScript-Generator/package.st
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Package { #name : #'Famix-TypeScript-Generator' }
Package { #name : 'Famix-TypeScript-Generator' }
Loading