typeScript/javascript spreadsheet parser, with formulas.
git clone https://git.vogt.world/spreadsheet.git
Log | Files | README.md
← Commit log
[README.md] cleaning up TODOs and outlining type plan
Ben Vogt <[email protected]>
2017-05-04 03:47:33
2 file(s) changed, 33 insertions(+), 31 deletions(-)
  1diff --git a/README.md b/README.md
  2index 82e43fd..cf4338d 100644
  3--- a/README.md
  4+++ b/README.md
  5@@ -4,48 +4,60 @@ TypeScript/javascript implementation of a spreadsheet.
  6 ## TODO
  7 Things I should do.
  9-### SUM and SUMA should be different, and I'm pretty sure they're currently the same.
 10-And the same for MAX, MAXA, COUNT, COUNTA, etc. Look these over.
 12+### SUM and SUMA should be different.
 15+### MAX and MAXA should be different.
 18+### COUNT and COUNTA should be different.
 21+### All formulas should used TypeCaster to pull parameters from `values`
 24 ### Criteria evaluations should escape reg-ex characters
 25 http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
 28 ### functions that throw errors should usually be able to include their caller in the error
 29 e.g. "SUM expects number values...", or "This function expects number values..."
 31-### Dollar functions have special types
 32-Although dollar functions look like they just format `number`s, it seems like they have a special type under the hood.
 33-This means that we should do dollar->number casting in all casting functions. For now, just using number primitive.
 34-See `DOLLAR` function for more info.
 36 ### Error formatting
 37 Pass name of calling formula into all functions that throw user-facing errors, or have some sort of error mapper.
 39-### Dates have special types
 40-* Like dollars, dates are special types, but can be compared as if they're primitives. For example, this statement is
 41-valid inside a cell: `=DATE(1992, 6, 6) > =DATE(1992, 6, 10)`. We should check types and and have Date-to-number
 42-conversion inside parser.js.
 43-* The same rule applies for time-types. It seems like under the hood, times are represented using a number between
 44-0 and 1, exclusive on the end. When comparing them, this: `=TIME(12, 0, 0) = 0.5` evaluates to TRUE, and
 45-`=TIME(12, 0, 0) <> 0.5` evaluates to FALSE.
 46-* Furthermore, it appears that Cells themselves have types. If a cell contains `=TIME(12, 0, 0) + 0.1`, the result will
 47-not be displayed as a decimal, but instead as a time, eg: "1:12:00 AM". However, you can force the application to display it as
 48-a different type.
 49-* The automatic display type for a Cell seems to be inherited from it's most complex type: [ExcelDate, ExcelTime,
 50-number, boolean, string].
 52+### Cells should have `formatAs` fields.
 53+Instead of having non-primitives, (i.e. ExcelDate, ExcelTime, Dollar), cells should have formats based on the
 54+highest-order type that was used during the compilation and execution of a cell's dependency. For example, `DATE` might
 55+return a number, but the cell that called `DATE` would be aware of it calling a formula that returns an non-primative
 56+type, and would display the returned number as a Date. If you're using `DATE` in conjunction with `DOLLAR` it would
 57+still display the returned value as a Date. The heirarhchy would look like: [ExcelDate, ExcelTime, Dollar, number,
 58+boolean, string]. Advantages to this would include not having to cast down when using primitive operators,
 59+and flexibility in display. It would also simplify the types themselves, by having types be constants and just having
 60+helpers to convert, display, and do normal operations with them.
 63 ### Test all ExcelDate functions
 64 Right now we're just using the number of days since 1900, but we should check the other functions.
 67 ### Verify that all N-times ({2,9}) are correct, and we're not parsing numbers too big.
 70 ### Scrape jsdocs for functions, put in simple index.html, doc.md files to serve up simple documentation
 73 ### Numbers with commas in them should still parse to numbers.
 76 ### Ensure all formulas are tested inside of SheetFormulaTest.ts
 79 ### Test all functions in src/Utilities
 82 ### Sheet.ts and parser.js should be able to concatenate strings
 83 E.g. `=COUNTIFS(A7:A24, ">6", B7:B24, "<"&DATE(1969,7,20))`
 84\ No newline at end of file
 85diff --git a/src/Formulas/Financial.ts b/src/Formulas/Financial.ts
 86index 1affc70..151fad5 100644
 87--- a/src/Formulas/Financial.ts
 88+++ b/src/Formulas/Financial.ts
 89@@ -138,14 +138,6 @@ var DB = function (...values) : number {
 90  * @param values[1] places - [ OPTIONAL - 2 by default ] - The number of decimal places to display.
 91  * @returns {number} dollars
 92  * @constructor
 93- * TODO: In GS and Excel, Dollar values are primitive types at a certain level, meaning you can do =DOLLAR(10) + 10
 94- * TODO(cont.) and the result will be 20. Right now, JS allows you to inherit from primitives so you can use operators
 95- * TODO(cont.) on them (eg: new Number(10) + 10 == 20) but TS does not. So for now, Dollar values will be represented
 96- * TODO(cont.) with the primitive number type. At some point TS might allow me to suppress the warnings with
 97- * TODO(cont.) https://github.com/Microsoft/TypeScript/issues/9448 or
 98- * TODO(cont.) https://github.com/Microsoft/TypeScript/issues/11051
 99- *
100- * TODO: Also, this does not do local-specific, as is.
101  */
102 var DOLLAR = function (...values) : number {
103   ArgsChecker.checkLengthWithin(values, 1, 2);