Variable flowrCapabilitiesConst
flowrCapabilities: {
capabilities: readonly [{
capabilities: readonly [{
capabilities: readonly [{
description: "_Recognize constructs like `a`, `plot`, ..._";
id: "name-normal";
name: "Normal";
supported: "fully";
}, {
description: "_Recognize `\"a\"`, `'plot'`, ..._";
id: "name-quoted";
name: "Quoted";
supported: "fully";
}, {
description: "_Recognize `` `a` ``, `` `plot` ``, ..._";
id: "name-escaped";
name: "Escaped";
supported: "fully";
}];
id: "form";
name: "Form";
}, {
capabilities: readonly [{
description: "_For example, tracking a big table of current identifier bindings_";
id: "global-scope";
name: "Global Scope";
supported: "fully";
}, {
description: "_For example, support function definition scopes_";
id: "lexicographic-scope";
name: "Lexicographic Scope";
supported: "fully";
}, {
description: "_Handling [function factories](https://adv-r.hadley.nz/function-factories.html) and friends._ Currently, we do not have enough tests to be sure.";
id: "closures";
name: "Closures";
supported: "partially";
}, {
description: "_For example, using `new.env` and friends_";
id: "dynamic-environment-resolution";
name: "Dynamic Environment Resolution";
supported: "not";
}, {
description: "_Handling side-effects by environments which are not copied when modified_";
id: "environment-sharing";
name: "Environment Sharing";
supported: "not";
}, {
description: "_Separating the resolution for functions and symbols._";
id: "search-type";
name: "Search Type";
supported: "fully";
}, {
description: "_Handling [R's search path](https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Search-path) as explained in [Advanced R](https://adv-r.hadley.nz/environments.html#search-path)._ Currently, _flowR_ does not support dynamic modifications with `attach`, `search`, or `fn_env` and tests are definitely missing. Yet, theoretically, the tooling is all there.";
id: "search-path";
name: "Search Path";
supported: "not";
}, {
description: "_Handling R's namespaces as explained in [Advanced R](https://adv-r.hadley.nz/environments.html#namespaces)_";
id: "namespaces";
name: "Namespaces";
supported: "not";
}, {
description: "_Resolving calls with `::` to their origin._ Accessing external files is allowed, although the name of packages etc. is not resolved correctly.";
id: "accessing-exported-names";
name: "Accessing Exported Names";
supported: "partially";
}, {
description: "_Similar to `::` but for internal names._";
id: "accessing-internal-names";
name: "Accessing Internal Names";
supported: "not";
}, {
description: "_Resolve libraries identified with `library`, `require`, `attachNamespace`, ... and attach them to the search path_";
id: "library-loading";
name: "Library Loading";
supported: "not";
}];
id: "resolution";
name: "Resolution";
}];
id: "names-and-identifiers";
name: "Names and Identifiers";
}, {
capabilities: readonly [{
capabilities: readonly [{
description: "_Recognize groups done with `(`, `{`, ... (more precisely, their default mapping to the primitive implementations)._";
id: "grouping";
name: "Grouping";
supported: "fully";
}, {
capabilities: readonly [{
description: "_Recognize and resolve calls like `f(3)`, `foo::bar(3, c(1,2))`, ..._";
id: "unnamed-arguments";
name: "Unnamed Arguments";
supported: "fully";
}, {
description: "_Essentially a special form of an unnamed argument as in `foo::bar(3, ,42)`, ..._";
id: "empty-arguments";
name: "Empty Arguments";
supported: "fully";
}, {
description: "_Recognize and resolve calls like `f(x = 3)`, `foo::bar(x = 3, y = 4)`, ..._";
id: "named-arguments";
name: "Named Arguments";
supported: "fully";
}, {
description: "_Recognize and resolve calls like `f('x' = 3)`, `foo::bar('x' = 3, \"y\" = 4)`, ..._";
id: "string-arguments";
name: "String Arguments";
supported: "fully";
}, {
description: "_Correctly bind arguments (including [`pmatch`](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/pmatch))._ Currently, we do not have a correct implementation for `pmatch`. Furthermore, more tests would be nice.";
id: "resolve-arguments";
name: "Resolve Arguments";
supported: "partially";
}, {
description: "_Handle side-effects of arguments (e.g., `f(x <- 3)`, `f(x = y <- 3)`, ...)._ We have not enough tests to be sure";
id: "side-effects-in-argument";
name: "Side-Effects in Argument";
supported: "partially";
}, {
description: "_Handle side-effects of function calls (e.g., `setXTo(3)`, ...) for example achieved with the super assignment._ We need more tests and handlings. Furthermore, we do not detect side effects with external files, network, logging, etc.";
id: "side-effects-in-function-call";
name: "Side-Effects in Function Call";
supported: "partially";
}];
description: "_Recognize and resolve calls like `f(x)`, `foo::bar(x, y)`, ..._";
id: "call-normal";
name: "Normal Call";
supported: "fully";
}, {
description: "_Recognize and resolve calls like `(function(x) x)(3)`, `factory(0)()`, ..._";
id: "call-anonymous";
name: "Anonymous Calls";
supported: "fully";
}, {
description: "_Recognize and resolve calls like `x + y`, `x %>% f(y)`, ..._";
id: "infix-calls";
name: "Infix Calls";
supported: "fully";
}, {
description: "_Handle cases like `print <- function(x) x`, `` `for` <- function(a,b,c) a``, ..._ Currently, we can not handle all of them there are no tests. Still wip as part of desugaring";
id: "redefinition-of-built-in-functions-primitives";
name: "Redefinition of Built-In Functions/primitives";
supported: "partially";
}, {
description: "_Support functions like `setwd` which have an impact on the subsequent program._";
id: "functions-with-global-side-effects";
name: "Functions with global side effects";
supported: "partially";
}, {
capabilities: readonly [{
description: "_Detect calls like `x[i]`, `x[i, ,b]`, `x[3][y]`, ... This does not include the real separation of cells, which is handled extra._";
id: "single-bracket-access";
name: "Single Bracket Access";
supported: "fully";
}, {
description: "_Detect calls like `x[[i]]`, `x[[i, b]]`, ... Similar to single bracket._";
id: "double-bracket-access";
name: "Double Bracket Access";
supported: "fully";
}, {
description: "_Detect calls like `x$y`, `x$\"y\"`, `x$y$z`, ..._";
id: "dollar-access";
name: "Dollar Access";
supported: "fully";
}, {
description: "_Detect calls like `x@y`, `x@y@z`, ..._";
id: "slot-access";
name: "Slot Access";
supported: "fully";
}, {
description: "_Detect calls like `x[i = 3]`, `x[[i=]]`, ..._";
id: "access-with-argument-names";
name: "Access with Argument-Names";
supported: "fully";
}, {
description: "_Detect calls like `x[]`, `x[2,,42]`, ..._";
id: "access-with-empty";
name: "Access with Empty";
supported: "fully";
}, {
description: "_Detect calls like `x[i > 3]`, `x[c(1,3)]`, ..._";
id: "subsetting";
name: "Subsetting";
supported: "fully";
}];
id: "index-access";
name: "Index Access";
}, {
capabilities: readonly [{
description: "_Recognize and resolve calls like `+3`, `-3`, ..._";
id: "unary-operator";
name: "Unary Operator";
supported: "fully";
}, {
capabilities: readonly [{
description: ...;
id: ...;
name: ...;
supported: ...;
}, {
description: ...;
id: ...;
name: ...;
supported: ...;
}, {
capabilities: ...;
id: ...;
name: ...;
}];
description: "_Recognize and resolve calls like `3 + 4`, `3 * 4`, ..._";
id: "binary-operator";
name: "Binary Operator";
supported: "fully";
}];
id: "operators";
name: "Operators";
}, {
capabilities: readonly [{
description: "_Handle `if (x) y else z`, `if (x) y`, ..._";
id: "if";
name: "if";
supported: "fully";
}, {
description: "_Handle `for (i in 1:3) print(i)`, ..._";
id: "for-loop";
name: "for loop";
supported: "fully";
}, {
description: "_Handle `while (x) b`, ..._";
id: "while-loop";
name: "while loop";
supported: "fully";
}, {
description: "_Handle `repeat {b; if (x) break}`, ..._";
id: "repeat-loop";
name: "repeat loop";
supported: "fully";
}, {
description: "_Handle `break` (including `break()`) ..._";
id: "break";
name: "break";
supported: "fully";
}, {
description: "_Handle `next` (including `next()`) ..._";
id: "next";
name: "next";
supported: "fully";
}, {
description: "_Handle `switch(3, \"a\", \"b\", \"c\")`, ..._";
id: "switch";
name: "switch";
supported: "fully";
}, {
description: "_Handle `return(3)`, ... in function definitions_";
id: "return";
name: "return";
supported: "fully";
}, {
description: "_Handle `try`, `stop`, ..._";
id: "exceptions";
name: "exceptions";
supported: "not";
}];
id: "control-flow";
name: "Control-Flow";
}, {
capabilities: readonly [{
description: "_Handle `function() 3`, ..._";
id: "normal-definition";
name: "Normal";
supported: "fully";
}, {
capabilities: readonly [{
description: ...;
id: ...;
name: ...;
supported: ...;
}, {
description: ...;
id: ...;
name: ...;
supported: ...;
}, {
description: ...;
id: ...;
name: ...;
supported: ...;
}, {
description: ...;
id: ...;
name: ...;
supported: ...;
}];
id: "formals";
name: "Formals";
}, {
description: "_Handle the return of `function() 3`, ..._";
id: "implicit-return";
name: "Implicit Return";
supported: "fully";
}, {
description: "_Support `\\(x) x`, ..._";
id: "lambda-syntax";
name: "Lambda Syntax";
supported: "fully";
}];
id: "function-definitions";
name: "Function Definitions";
}, {
capabilities: readonly [{
description: "_Handle `&&`, `||`, ..._";
id: "non-strict-logical-operators";
name: "Non-Strict Logical Operators";
supported: "fully";
}, {
description: "_Handle the [new (4.1) pipe and pipe-bind syntax](https://www.r-bloggers.com/2021/05/the-new-r-pipe/): `|>`, and `=>`._ We have not enough tests and do not support pipe-bind.";
id: "built-in-pipe-and-pipe-bind";
name: "Pipe and Pipe-Bind";
supported: "partially";
}, {
description: "_Handle `:`, `seq`, ... by gathering value information using abstract interpretation._";
id: "built-in-sequencing";
name: "Sequencing";
supported: "not";
}, {
description: "_Handle `.Internal`, `.Primitive`, ..._ In general we can not handle them as they refer to non-R code. We currently do not support them when used with the function.";
id: "built-in-internal-and-primitive-functions";
name: "Internal and Primitive Functions";
supported: "not";
}, {
description: "_Handle `options`, `getOption`, ..._ Currently, we do not support the function at all.";
id: "built-in-options";
name: "Options";
supported: "not";
}, {
description: "_Handle `help`, `?`, ..._ We do not support the function in a sensible way but just ignore it (although this does not happen resolved).";
id: "built-in-help";
name: "Help";
supported: "partially";
}, {
capabilities: readonly [{
description: ...;
id: ...;
name: ...;
supported: ...;
}, {
description: ...;
id: ...;
name: ...;
supported: ...;
}, {
description: ...;
id: ...;
name: ...;
supported: ...;
}, {
description: ...;
id: ...;
name: ...;
supported: ...;
}, {
description: ...;
id: ...;
name: ...;
supported: ...;
}];
id: "reflection-\"computing-on-the-language\"";
name: "Reflection / \"Computing on the Language\"";
}];
id: "important-built-ins";
name: "Important Built-Ins";
}];
id: "function-calls";
name: "Function Calls";
}, {
capabilities: readonly [{
description: "_Recognize numbers like `3`, `3.14`, `NA`, float-hex, ..._";
id: "numbers";
name: "Numbers";
supported: "fully";
}, {
capabilities: readonly [{
description: "_Recognize raw strings like `r\"(a)\"`, ..._";
id: "raw-strings";
name: "Raw Strings";
supported: "fully";
}];
description: "_Recognize strings like `\"a\"`, `'b'`, ..._";
id: "strings";
name: "Strings";
supported: "fully";
}, {
description: "_Recognize the logicals `TRUE` and `FALSE`, ..._";
id: "logical";
name: "Logical";
supported: "fully";
}, {
description: "_Recognize `NULL`_";
id: "null";
name: "NULL";
supported: "fully";
}, {
description: "_Recognize `Inf` and `NaN`_";
id: "inf-and-nan";
name: "Inf and NaN";
supported: "fully";
}];
id: "literal-values";
name: "Literal Values";
}];
id: "expressions";
name: "Expressions";
}, {
capabilities: readonly [{
description: "_Handle recycling of vectors as explained in [Advanced R](https://adv-r.hadley.nz/vectors-chap.html)._ We do not support recycling.";
id: "recycling";
name: "Recycling";
supported: "not";
}, {
description: "_Handle vectorized operations as explained in [Advanced R](https://adv-r.hadley.nz/perf-improve.html?q=vectorised#vectorise)._ We do not support vectorized operations.";
id: "vectorized-operator-or-functions";
name: "Vectorized Operator or Functions";
supported: "not";
}, {
description: "_Handle hooks like [`userhooks`](https://stat.ethz.ch/R-manual/R-devel/library/base/html/userhooks.html) and [`on.exit`](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/on.exit)._ We do not support hooks.";
id: "hooks";
name: "Hooks";
supported: "not";
}, {
description: "_Handle the precedence of operators as explained in the [Documentation](https://rdrr.io/r/base/Syntax.html)._ We handle the precedence of operators (implicitly with the parser).";
id: "precedence";
name: "Precedence";
supported: "fully";
}, {
capabilities: readonly [{
description: "_Handle [attributes](https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Attributes) like `attr`, `attributes`, ..._ We do not support attributes.";
id: "user-defined";
name: "User-Defined";
supported: "not";
}, {
description: "_Handle built-in attributes like `dim`, ..._ We do not support them.";
id: "built-in";
name: "Built-In";
supported: "not";
}];
id: "attributes";
name: "Attributes";
}];
id: "non-standard-evaluations-semantics";
name: "Non-Standard Evaluations/Semantics";
}, {
capabilities: readonly [{
description: "_Recognize and resolve primitive types like `numeric`, `character`, ..._ We do not support typing currently.";
id: "types-primitive";
name: "Primitive";
supported: "not";
}, {
description: "_Recognize and resolve non-primitive/composite types._ We do not support typing currently.";
id: "types-non-primitive";
name: "Non-Primitive";
supported: "not";
}, {
description: "_Infer types from the code._ We do not support typing currently.";
id: "types-inference";
name: "Inference";
supported: "not";
}, {
description: "_Handle coercion of types._ We do not support typing currently.";
id: "types-coercion";
name: "Coercion";
supported: "not";
}, {
capabilities: readonly [{
description: "_Handle S3 classes and methods as one unit (with attributes etc.). Including Dispatch and Inheritance._ We do not support typing currently and do not handle objects of these classes \"as units.\"";
id: "oop-s3";
name: "S3";
note: "https://adv-r.hadley.nz/s3.html";
supported: "not";
}, {
description: "_Handle S4 classes and methods as one unit. Including Dispatch and Inheritance_ We do not support typing currently and do not handle objects of these classes \"as units.\"";
id: "oop-s4";
name: "S4";
note: "https://adv-r.hadley.nz/s4.html";
supported: "not";
}, {
description: "_Handle R6 classes and methods as one unit. Including Dispatch and Inheritance, as well as its Reference Semantics, Access Control, Finalizers, and Introspection._ We do not support typing currently and do not handle objects of these classes \"as units.\"";
id: "oop-r6";
name: "R6";
note: "https://adv-r.hadley.nz/r6.html";
supported: "not";
}, {
description: "_Handle R7 classes and methods as one unit. Including Dispatch and Inheritance, as well as its Reference Semantics, Validators, ..._ We do not support typing currently and do not handle objects of these classes \"as units.\"";
id: "r7-s7";
name: "R7/S7";
note: "https://www.r-bloggers.com/2022/12/what-is-r7-a-new-oop-system-for-r/, https://cran.r-project.org/web/packages/S7/index.html";
supported: "not";
}];
id: "object-oriented-programming";
name: "Object-Oriented Programming";
}];
id: "types";
name: "Types";
}, {
capabilities: readonly [{
description: "_Recognize comments like `# this is a comment`, ... and line-directives_";
id: "comments";
name: "Comments";
supported: "fully";
}, {
description: "_Recognize and resolve semicolons like `a; b; c`, ..._";
id: "semicolons";
name: "Semicolons";
supported: "fully";
}, {
description: "_Recognize and resolve newlines like `a\nb\nc`, ..._";
id: "newlines";
name: "Newlines";
supported: "fully";
}];
id: "structure";
name: "Structure";
}, {
capabilities: readonly [{
description: "_Handle `source`, `sys.source`, ..._ We are currently working on supporting the inclusion of external files. Currently we can handle `source`.";
id: "sourcing-external-files";
name: "Sourcing External Files";
supported: "partially";
}, {
description: "_Handle files dumped with, e.g., [`save`](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/save), ... due to their frequent usage._ We do not support binary files.";
id: "handling-binary-riles";
name: "Handling Binary Riles";
supported: "not";
}, {
description: "_Handle `read.csv`, `write.csv`, ..._ We do not support I/O for the time being but treat them as unknown function calls.";
id: "i-o";
name: "I/O";
supported: "not";
}, {
description: "_Handle `.Fortran`, `C`,..._ We do not support FFI but treat them as unknown function calls.";
id: "foreign-function-interface";
name: "Foreign Function Interface";
supported: "not";
}, {
description: "_Handle [`system`](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/system), `system.*`, ..._ We do not support system calls but treat them as unknown function calls.";
id: "system-calls";
name: "System Calls";
supported: "not";
}];
id: "system-i-o-ffi-and-other-files";
name: "System, I/O, FFI, and Other Files";
}, {
description: "_Handle pre-processors like `knitr`, `rmarkdown`, `roxygen2` ..._ We do not support pre-processors for the time being (being unable to handle things like `@importFrom`)";
id: "pre-processors-external-tooling";
name: "Pre-Processors/external Tooling";
supported: "not";
}];
description: "This is an evolving representation of what started with #636 to formulate capabilities in a structured format.";
name: "Capabilities of flowR";
version: "0.0.1";
} = ...