notes and comments...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2020-05-08 18:07:21 +03:00
parent c73b453205
commit 027ccd8e86

View File

@ -54,20 +54,21 @@ function(text, tab_size, keep_tabs){
KEEP_TABS KEEP_TABS
: keep_tabs) : keep_tabs)
* tab_size * tab_size
tab_size = ' '.repeat(tab_size) // prepare text...
text = tab_size != '' ? var tab = ' '.repeat(tab_size)
text.replace(/\t/g, tab_size) text = tab != '' ?
text.replace(/\t/g, tab)
: text : text
var lines = text.trim().split(/\n/) var lines = text.trim().split(/\n/)
// count common indent...
var l = lines var l = lines
.reduce(function(l, e, i){ .reduce(function(l, e, i){
var indent = e.length - e.trimLeft().length var indent = e.length - e.trimLeft().length
return e.trim().length == 0 return e.trim().length == 0
// ignore 0 indent of first/last lines... // ignore 0 indent of first line...
|| (i == 0 && indent == 0) ? || (i == 0 && indent == 0) ?
l l
// last line -- ... // last line -- ignore keep_tabs if lower indent...
: i == lines.length-1 && indent > l ? : i == lines.length-1 && indent > l ?
Math.max(l-keep_tabs, 0) Math.max(l-keep_tabs, 0)
// initial state... // initial state...
@ -75,7 +76,7 @@ function(text, tab_size, keep_tabs){
indent indent
// min... // min...
: Math.min(l, indent) }, -1) : Math.min(l, indent) }, -1)
// normalize...
return lines return lines
.map(function(line, i){ .map(function(line, i){
return i == 0 ? return i == 0 ?
@ -415,6 +416,8 @@ function(base, object){
// //
// //
// NOTE: this is the opposite to mixin(..) // NOTE: this is the opposite to mixin(..)
// NOTE: this used mixins(..) / match(..) to find the relevant mixins,
// see those for more info...
var mixout = var mixout =
module.mixout = module.mixout =
function(base, ...objects){ function(base, ...objects){
@ -471,7 +474,8 @@ function(base, ...objects){
// Example: // Example:
// // new is optional... // // new is optional...
// var l = new makeRawInstance(null, Array, 'a', 'b', 'c') // var l = new makeRawInstance(null, Array, 'a', 'b', 'c')
// NOTE: the following are not the same: // NOTE: the following are not the same in structure but functionally
// are identical:
// var C = Constructor('C', function(){ .. }) // var C = Constructor('C', function(){ .. })
// and // and
// var C2 = Constructor('C2', { __call__: function(){ .. } }) // var C2 = Constructor('C2', { __call__: function(){ .. } })
@ -502,7 +506,9 @@ function(context, constructor, ...args){
: /\[native code\]/.test(constructor.toString()) ? : /\[native code\]/.test(constructor.toString()) ?
Reflect.construct(constructor, args) Reflect.construct(constructor, args)
// callable instance... // callable instance...
// NOTE: we need to isolate the callable from instances... // NOTE: we need to isolate the callable from instances, thus we
// reference 'constructor' directly rather than using
// 'this.constructor'...
: (constructor.prototype instanceof Function : (constructor.prototype instanceof Function
|| constructor.prototype.__call__ instanceof Function) ? || constructor.prototype.__call__ instanceof Function) ?
_mirror_doc( _mirror_doc(
@ -649,21 +655,6 @@ function(context, constructor, ...args){
// //
// //
// //
// Motivation:
// The general motivation here is to standardise the constructor
// protocol and make a single simple way to go with minimal variation.
// This is due to the JavaScript base protocol though quite simple,
// being too flexible making it very involved to produce objects in a
// consistent manner by hand, especially in long running projects,
// in turn spreading all the refactoring over multiple sites and styles.
//
// This removes part of the flexibility and in return gives us:
// - single, well defined protocol
// - one single spot where all the "magic" happens
// - full support for existing JavaScript ways of doing things
// - easy refactoring without touching the client code
//
//
// NOTE: this sets the proto's .constructor attribute, thus rendering it // NOTE: this sets the proto's .constructor attribute, thus rendering it
// not reusable, to use the same prototype for multiple objects // not reusable, to use the same prototype for multiple objects
// clone it via. Object.create(..) or copy it... // clone it via. Object.create(..) or copy it...