Skip to content

Commit

Permalink
customizing diagram for #43
Browse files Browse the repository at this point in the history
  • Loading branch information
fdodino committed Nov 24, 2023
1 parent 2f68b74 commit d9122c9
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 11 deletions.
24 changes: 19 additions & 5 deletions src/commands/run.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import http from 'http'
import logger from 'loglevel'
import { join, relative } from 'path'
import { Server, Socket } from 'socket.io'
import { Environment, link, Name, parse, RuntimeObject, WollokException } from 'wollok-ts'
import { Environment, link, Name, Package, parse, RuntimeObject, WollokException } from 'wollok-ts'
import interpret, { Interpreter } from 'wollok-ts/dist/interpreter/interpreter'
import natives from 'wollok-ts/dist/wre/wre.natives'
import { ENTER, buildEnvironmentForProject, failureDescription, handleError, isImageFile, publicPath, readPackageProperties, serverError, successDescription, validateEnvironment, valueDescription } from '../utils'
Expand All @@ -32,7 +32,6 @@ const DEFAULT_PORT = '4200'
export default async function (programFQN: Name, options: Options): Promise<void> {
const { project, game } = options
try {
// TODO: validate port if game if set
logger.info(`Running ${valueDescription(programFQN)} ${runner(game)} on ${valueDescription(project)}`)
options.assets = game ? getAssetsFolder(options) : ''
if (game) {
Expand All @@ -46,7 +45,8 @@ export default async function (programFQN: Name, options: Options): Promise<void

const ioGame: Server | undefined = initializeGameClient(options)
const interpreter = game ? getGameInterpreter(environment, ioGame!) : interpret(environment, { ...natives })
await initializeDynamicDiagram(options, interpreter)
const programPackage = environment.getNodeByFQN<Package>(programFQN).parent as Package
await initializeDynamicDiagram(programPackage, options, interpreter)

interpreter.run(programFQN)
eventsFor(ioGame!, interpreter, options)
Expand Down Expand Up @@ -128,7 +128,8 @@ export const initializeGameClient = ({ project, assets, port, game }: Options):
return io

Check warning on line 128 in src/commands/run.ts

View check run for this annotation

Codecov / codecov/patch

src/commands/run.ts#L126-L128

Added lines #L126 - L128 were not covered by tests
}

export async function initializeDynamicDiagram(options: Options, interpreter: Interpreter): Promise<void> {
// TODO: change to an object with a reload function
export async function initializeDynamicDiagram(programPackage: Package, options: Options, interpreter: Interpreter): Promise<void> {
if (!options.startDiagram) return

const app = express()
Expand All @@ -144,7 +145,7 @@ export async function initializeDynamicDiagram(options: Options, interpreter: In
})
const connectionListener = (interpreter: Interpreter) => (socket: Socket) => {
socket.emit('initDiagram', options)
socket.emit('updateDiagram', getDataDiagram(interpreter))
socket.emit('updateDiagram', getDataDiagram(interpreter, programPackage))

Check warning on line 148 in src/commands/run.ts

View check run for this annotation

Codecov / codecov/patch

src/commands/run.ts#L146-L148

Added lines #L146 - L148 were not covered by tests
}
const currentConnectionListener = connectionListener(interpreter)
io.on('connection', currentConnectionListener)

Check warning on line 151 in src/commands/run.ts

View check run for this annotation

Codecov / codecov/patch

src/commands/run.ts#L150-L151

Added lines #L150 - L151 were not covered by tests
Expand All @@ -158,6 +159,19 @@ export async function initializeDynamicDiagram(options: Options, interpreter: In
server.addListener('listening', () => {
logger.info(successDescription('Dynamic diagram available at: ' + bold(`http://localhost:${currentPort}`)))

Check warning on line 160 in src/commands/run.ts

View check run for this annotation

Codecov / codecov/patch

src/commands/run.ts#L157-L160

Added lines #L157 - L160 were not covered by tests
})

// return {
// onReload: (interpreter: Interpreter) => {
// io.off('connection', currentConnectionListener)
// currentConnectionListener = connectionListener(interpreter)
// io.on('connection', currentConnectionListener)

// io.emit('updateDiagram', getDataDiagram(interpreter))
// },
// enabled: true,
// app,
// server,
// }
}


Expand Down
13 changes: 7 additions & 6 deletions src/services/diagram-generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ const WOLLOK_BASE_MODULES = 'wollok.'

const SELF = 'self'

function getImportedDefinitionsFromConsole(interpreter: Interpreter): Entity[] {
const replPackage = replNode(interpreter.evaluation.environment)
function getImportedDefinitions(interpreter: Interpreter, rootFQN?: Package): Entity[] {
const environment = interpreter.evaluation.environment
const importedPackage = rootFQN ?? replNode(environment)
return [
...replPackage.members,
...replPackage.imports.flatMap(resolveImport),
...importedPackage.members,
...importedPackage.imports.flatMap(resolveImport),
]
}

Expand All @@ -27,8 +28,8 @@ function resolveImport(imp: Import): Entity[] {
: [importedEntity]
}

export function getDataDiagram(interpreter: Interpreter): ElementDefinition[] {
const importedFromConsole = getImportedDefinitionsFromConsole(interpreter)
export function getDataDiagram(interpreter: Interpreter, rootFQN?: Package): ElementDefinition[] {
const importedFromConsole = getImportedDefinitions(interpreter, rootFQN)
const currentFrame = interpreter.evaluation.currentFrame
const objects = new Map(Array.from(currentFrame.locals.keys()).map((name) => [name, currentFrame.get(name)]))

Expand Down

0 comments on commit d9122c9

Please sign in to comment.