Giter VIP home page Giter VIP logo

dalehenrich / tode Goto Github PK

View Code? Open in Web Editor NEW
33.0 10.0 16.0 26.3 MB

tODE - the Object-centric Development Environment. Smalltalk. development, deconstructed and a development environment for GemStone/S. Part of the GsDevKit tool set.

Home Page: https://github.com/GsDevKit/gsDevKitHome#open-source-development-kit-for-gemstones-64-bit-

License: MIT License

Smalltalk 99.95% Shell 0.05%
smalltalk gemstone

tode's Introduction

tODE: the Object-centric Development Environment Build Status

Installation and Setup

See the GsDevKit_home project for tODE and GemStone/S 64 installation instructions.

Additional Information

Here's a video of my Smalltalks 2013 presentation tODE: And Now For Something Completely Different.

Smalltalks 2015: Announcing GsDevKit_home And tODE (video, slides)

Here's a recent screen shot:

Questions? Gitter

  1. Gitter chat
  2. tODE mailing list

Here are some posts from Stephen Ramsay that explain why I added command-line support to tODE (Stephen just says it better than i):

tode's People

Contributors

chisandrei avatar dalehenrich avatar dassi avatar fniephaus avatar gitter-badger avatar jupiterjones avatar marianopeck avatar pbm avatar pdebruic avatar stephaneggermont avatar talksmall avatar zecke avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tode's Issues

strip out old topez code

A lot of the TZ* classes are not used in the newer incarnation of tode/topez ... and a number of them should not be used if they are ...

  • low hanging fruit (just dump the classes)
  • rewrite eliminating old-style support (smooth)
  • nasty bits like the proxy boys that should not be used, but have been woven in (nastiness that must be done)

port to GemStone 2.4.x

time to make the move:

  • basic port
  • flesh out server-side tests and client-side tests
  • create client/server test ... fire up netldi and run tests over GCI

I would like to search for strings in source (and other things)

I'd like to be able to search for "TZfoo" in the source code (right now I have to use the Pharo Finder tool to do my searches. The search should be context specific. E.g., if i do:
cd /projects/Topez search TZGsEvaluator .
Should search the files in the Topez package for "TZGsEvaluator" and open a list of matching classes. We may want other ways of specifying the context as well (e.g., currently selected class/method whatever)

command (tokens) ought to be first class object

Before we get too many commands defined we should create a first class object for the command (as opposed to list of tokens)...then when we add options, etc. to the command line tool, we will have limited the damage in terms of the number of places that changes need to be made

"cat *" wedges topez

In the native client (blue pill) I did:
cd /topez/events/keys/ cat *

And the debugger pops up and I can niether abandon nor ignore it...

better monticello support needed

  • create repository (mr create)
  • list repositories (mr list)
  • list packages in repository (mr packages and mr versions)
  • list repositories in package repository group (mr group)
  • create package (mc create)
  • add repository to package (mr add)
  • remove repository from package (mr remove)
  • merge package (mc merge)
  • browse package (mc browse)
  • copy package from one repository to another (mc copy)
  • commit package (mc commit)
  • commit package in specific repository (mc save)
  • commit dirty packages in configuration (mm commit)
  • commit dirty packages in baseline (mm commit)
  • diff loaded package to package in repository (mc diff)
  • diff dirty packages in baseline (mm diff)
  • diff dirty packages in configuration (mm diff)
  • diff dirty packages in image (mc diff)
  • compare two package versions (mc compare)
  • revert package (mc revert)
  • list dirty packages (mc dirty)
  • CMD-v of method onto package (in pkgs window) adds method to package
  • CMD-v of class onto package (in pkgs window) adds class to package
  • CMD-x in? window removes method or class from package (perhaps have a not a package entry in pkgs window and use CMD-v?)
  • unload package (mc unload)
  • deletete working copy (mc delete)
  • recompile methods in package (mc recompile)
  • flush all caches (mc flush)
  • adopt ancestor (mc adopt)
  • load package (mc load)

revamp ston sharing model

Need to be able to share individual directory templates on a project by project basis but also need to make personal copies too stored in a different git repository ...

SessionDescription should be shared with server

Should probably pass a copy of SessionDescription to the server where some of the information in the SessionDescription can be used by the server ... backup directory...stone name and netldi information (netldi more so) can be used for establishing external sessions without having to guess at some of the settings ...

The idea was first posed a solution for Issue #46 ... but I've since come up with a better simpler solution.

Still want to consider this idea independently...

port to Pharo

the shell interface should be very straightforward ... even the basic window interface should port easily ...the gemstone client code is already functional in Pharo ... the real trick is to replace all the gci calls on both sides which should be accomplished by jiggering the client/server implementation a bit ... I think the debugger is the only chunk that will require significant work, but it's a pretty solvable problem...

`browse category`

browse category brings up list of categories clicking on a category brings up the window on list of classes in the category ...

browse category <category-name> brings up list of classes in category...

mc load should give file not found error

when loading a file from a directory and the file doesn't exist a String concatenation error is given rather than a file not found.

e.g.

mc load 1234.mcz /tmp

should say "error file not found: /tmp/1234.mcz" or some such

consistent protocol for TZTopez: compileMethod:...

Probably should use the same selectors for both of these:

  • TopezPharoSession>>compileMethod:class:isMeta:category:
  • TZGsTopez>>compileMethod:class:category:forMeta:

and the message might even deserve to be part of public protocol for TZTopez

rename github repository to tode

the name topez is too close to the name topaz and the project has mprphed into tode anyway, so now is as good a time as any to rename the project

Nice to have keybinding maps like emacs

It would be nice to have a lot more flexibility to map keystrokes to commands and have them on a per window (type) basis. Each emacs buffer has a keymap that is the aggregation of global bindings, mode-specific and buffer specific bindings. Something like that would make it nice to customize the many commands you want to bind and to allow per-user cusom topez.el ;^)

move #displayOn: logic into TDTopezServer

If you look at TDMonticelloTool>>mclist:

mclist
  "mc list <regex-pkg-pattern> "

  | pattern list stream displayPolicy |
  pattern := tokens size > 1
    ifTrue: [ tokens at: 2 ].
  list := self findMatchingPackages: pattern topez: topez.
  displayPolicy := topez displayPolicy
    compacted: true;
    yourself.
  stream := displayPolicy stream.
  list
    do: [ :pkg | 
      pkg displayOn: displayPolicy.
      stream cr ].
  ^ stream contents

You see that the command ends with displayPolicy and displayOn: for each of the elements ... I'm thinking that I need to move the displayOn: out to TDTopez server, or allow command object to independently set objOut.

That is the effect I want:

  • command control over format
  • set objIn to a real object not the Text object returned by the command

Perhaps the best is to return an instance of something like TDResult, where the text display and objIn are accessible ... then piping command results will work as well ...

revisit all halos

some of the halos, like .window and .man are still probably useful, a bunch of others are not ... I never use them and now that I'm using the navigator window to view the objects themselves, there's no need to create these dynamic structures ...

Works, but I get an error when loading into Pharo-1.4

After loading Metacello 1-b32 by running:

"Get the Metacello configuration"
Gofer new
gemsource: 'metacello';
package: 'ConfigurationOfMetacello';
load.

"Bootstrap Metacello 1.0-beta.32, using mcz files"
((Smalltalk at: #ConfigurationOfMetacello) project
version: '1.0-beta.32') load.

"Load the Preview version of Metacello from GitHub"
(Smalltalk at: #Metacello) new
configuration: 'MetacelloPreview';
version: #stable;
repository: 'github://dalehenrich/metacello-work:configuration';
load.

then loading topez by running:

Metacello new
baseline: 'Topez';
repository: 'github://dalehenrich/topez:master/packages';
load: 'Client'.

I'm given the error

This package depends on the following classes:
TZTopez
TZEvaluator
You must resolve these dependencies before you will be able to load these definitions:
TZNativeEvaluator
initialize
lintCmds
label
topezClientClass
TZNativeTopez
initialize
windowOffset
activeShout
addMethodElement:toElement:isMeta:
adornmentColor
classDefinition:
classElementForClass:
classMethod:
classNamesInMetacelloProject:
classSelectors:
classesInMetacelloProject:
continueWith:
deleteClassElement:
deleteMethodElement:
diffModifiedPackagesForProjectNamed:
doInSession:
evaluate:in:to:
executeString:receiver:
findMatchingClasses:
hierarchyOf:
implementorsOf:
instanceElementFor:level:
instanceSelectors:
messageElementFor:selector:messagePattern:
metacelloProjectNamed:
metacelloProjectNames
metacelloProjects
method:
methodElementFor:selector:
methodTemplateElementFor:isMeta:
rawInSession:
referencesTo:isMeta:in:
run:
runInInstance:
saveModifiedPackagesForProjectNamed:commitMessage:
selectClass:
send:to:withArgs:
sendersOf:
session
setCategory:
sourceForClassMethod:
sourceForMethod:
stackFor:
stepInto:
stepWith:level:
stylerClass
subclassesOf:
superclassesOf:
testClassesInMetacelloProject

Select Proceed to continue, or close this window to cancel the operation.

`man ?` ... search man pages

need a man search ...

while you are at it ... use a named window for manPages to avoid tons of manpages accumulating...

hitting 'Enter' in the shell after a failed Metacello load can be very annoying

If I load a Metacello package using a script and it fails and I abort the load and then switch to the shell and hit 'enter' tODE attempts to process all of the Metacello transcript output that is in the shell and throws and error for every line.

Maybe I'm loading things in a non-standard way but the only solution I have to the problem of an aborted load is to exit the session and sign in again.

If I do hit enter then I either have to 'abort' through all of the tODE errors or close the Pharo image without saving.

Oh, to load things I do this:

$ touch sh loadZinc
$ edit loadZinc

and then in load Zinc I'll put

MCPlatformSupport commitOnAlmostOutOfMemoryDuring:[ConfigurationOfZincHTTPComponents load].

class comments

probably should add class command:

  • class rename
  • class copy
  • class comment
  • class create (? create methods for instance variables, class instance variables)
  • class protocol (see Issue #27)

proceed/restart in debugger

Is there a command to proceed or restart in the debugger?

It looks like there isn't one defined in

TDStackClientListElementBuilder

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.