Skip to content
mrseanryan edited this page Jan 18, 2019 · 4 revisions

Home

tslint-folders Done

Tasks that are done, will be moved here.


  • fix: bug in diagram

mfe: services AND vm should have flow to model, utils but flows are only originating from vm - should be from the cluster

(similar): main: only DME has flows to utils, sdkH. but should originate from the cluster

  • loosen up the peer deps to match tslint - UP MINOR -
  • make other rules configurable, without breaking config (cover via test sub-folders named by version) -

  • false positives from ban with utils: also add ban to PackageFolder so can override ?

  • add banBlacklist=["utils"]

  • make the importWhitelist also apply to Text format


notes

config:

  • config from tslint-folders.json that's imported by tslint.json

  • throw if config has circ reference

  • 'separable package' - import no recognised packages : no special case needed (simply no children)


  • model internal folders:

components viewmodels models services utils

-- PackageSubFolder : PackageFolder

  • container: Package (no hierarchy of sub folders)

  • can import any PackageNode children of container

  • if importing a recognised PackageSubFolder (from container.allowedFolders)

then only allow if in this.allowedFolders


model dumping

[x] - yarn docs outputs a text graph

dump to simple text format

so don't need dot to ascii

format:

packageName1 --> packageName2, packageName3
folder1 --> folder2, folder3
folder2 --> folder3
folder3
  • md format?
  • dot as alt format could also be useful

  • jpg format (internally dot -> jpg) in separate project tslint-folders-diagrams to control npm size

yarn docs tslint.json Dot

BEGIN diagram notes

  • the diagram is too crowded!

  • ... group pkgs with same incomings. use points or invisible nodes

  • try compound=true

  • try graph [ concentrate=true ...

not true! - // note: compound and concentrate do NOT work together? (would see error from dot)

  • fix new bug in optimizer: only replace edge from cluster if valid for ALL nodes in cluster

  • add -clusterFromTslintJson, diagramCluster=<cluster name> to tslint.json - then GraphOptimizer can cluster by that name

  • style * package a bit like external

  • test with, w/o the optimizer

  • add -disableGraphOptimizer

  • add -package=<package importPath> to out for that package only (hides topLevel cluster)

  • (cosmetic) add -packageShape=box|oval|octagon|component|cyclinder|box3d|folder (default is oval) -subFolderShape=box|oval|octagon|component|cyclinder|box3d|folder (default is folder)

  • consume


  • improve optimizer

  • add -importBlacklist=<package name,package name> to filter the imports (the referenced packages)

  • add -showImportAnyAsNodeNotEdges - renders * as 1 edge to an "(any)" node

  • try: strict digraph x { ...

ref: https://graphviz.gitlab.io/faq/#FaqMerge

  • n/a - concentrate does this! try add multiple invisible points to give layouter flexibility:

  • n/a other graphviz diagram type?

  • n/a try 'rank' to group nodes (need hint from tslint.json?) { rank=same; b, c, d }

  • n/a try group (avoids edge crossings?)

  • add invisible.point - but concentrate does this!

/_ graph with invisible points _/
digraph G {
d1 [shape=point,width=0.01,height=0.01];
{a, b, c} -> d1 [dir=none];
d1 -> d;
d -> e;
}

END diagram notes


TODO disallow import [relative, src] from recognised package

extend the main rule, using the config:

  • import from recognised package should not include /src/ by adding a ban prop into PackageFolder:

    ```
    "ban": ["{PACKAGE}/src/", "/{PACKAGE}/"]
    ```
    
  • (see ban prop) import from recognised package should not be relative (like /myPackage/)


TODO make the 'test' rules be configurable

  • make configurable, without breaking config (cover via test sub-folders named by version)

  • make rule customisable: tsf-folders-test-with-breakpoint by adding an includePaths: string[] prop and a debugTokens: ["browser.debug"]

  • make rule customisable: tsf-folders-disabled-tests by adding an includePaths: string[] prop and a ban: ["it.only", "it.skip","describe.only","describe.skip"]


TODO ts versions

  • support typescript 3

  • tslint 5.11.0 is not at 3 yet!

  "peerDependencies": {
    "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev"
  },
  • loosen up the peer reps to match tslint
  • ts version history:

https://github.com/Microsoft/TypeScript/commits/master/package.json

  • version to match ts ? else confusing. but need minor to make a breaking change!
-- tsf 2.900m.p = ts 2.9
-- tsf 3.000m.p = ts 3.0
-- tsf 3.100m.p = ts 3.1
-- tsf 3.200m.p = ts 3.2
where m = minor, p = patch
  • add above summary to readme

  • branch like versions/tsf2.9

  • pub to npm as normal, with correct peer deps

  • dev on feature/x -> master

  • can rebase version branches onto master, as needed (bash script)

  • do NOT dev on version branch

  • doc in readme

  • how does tslint manage it?

  • is tslint version more important? But less so for user


Older DONE

TODOs that are done

  • setup basic tslint, with standard rules to lint its source
  • re-make test data - packages
  • remove refs to sdk
  • re-make unit tests
  • config in tslint.json
  • merge tests for 'tsf-folders-imports-from-self' into 'tsf-folders-imports-between-packages'
  • replace ignoreTests, ignoreFolders with ignorePaths: regex[]. also add to main rule
  • model as a graph
  • list TODOs for the new tslint props
  • publish to npm (dist only, not source), consume
  • yarn docs (generates a 'graph')
  • publish to npm (dist only, not source), consume

if OK to open-source:

  • update readme: node_modules/tslint-folders/tools -> node_modules/tslint-folders/dist/tools

  • make this repo public (URL same?)

  • publish to npm with the source

  • consume

  • Add isThirdParty flag to PackageConfig so is not listed by docs.

  • add keywords to package.json for npm

  • rename isThirdParty to isExternal

  • new rule tsf-folders-file-names [see branch 'feature/file-name-casing'] allowing multiple values. see palantir file-name-casing

  • add tests for sub-folders (under todo-area). include false positives: similar folders under package with no sub folders configured (contact-area).

  • publish to npm (with source), consume

  • allow disable check on sub folders

  • add test where sub folders are below another folder

  • bad import from sub folder should be warning not error

  • rename rules to tsf- to avoid rules failing to load in projects that use other rule packages

  • up minor version, pub

  • ts-node can be dev dep?

  • consume

  • allow gen doc w/o sub folders

  • add Dot format

  • add DotStyled allow any case

  • add example to generate png

  • add the missing options -dotColorScheme=path to pick up colors

  • doc the new options - at least set them in package.json

  • refactor

  • add -outpath=<path to output file>

  • n/a -orientation=<landscape|portrait> -> landscape=true (default, due to sub-folder clusters)

  • n/a (future - filtering avoids this) some way to have 'portrait' layout? (rankdir does not really work)

  • add diagram output


  • avoid jest including testHarness

migration to github

  • move todo.md to this Wiki

  • add semantic-release, like tslint-ban-snippets - but with travis -> npm disabled

  • run tslint tests via jest - like tslint-ban-snippets
  • solve circular dep flagged in yarn test:prod
  • travis build, release notes etc.
  • up readme on how to consume - since path to rule.js is different ? - ref tslint-ban-snippets
  • fork to 2nd project tslint-folders-diagrams

  • setup that project, removing the rules

  • remove the diagrams from this project (breaking change!)

  • add coverage to readme

  • up readme to ref tslint-folders-diagrams

  • clean up, publish

  • finish and publish the diagrams project (consuming this one)

  • consume in WM!

  • review vs:

https://github.com/mrseanryan/tslint-ban-snippets

https://github.com/Microsoft/vscode-json-languageservice

https://github.com/ismailhabib/actrix