Skip to content

Capabilities

github-actions[bot] edited this page Jul 20, 2025 · 1 revision

This document was generated from 'src/documentation/print-capabilities-markdown.ts' on 2025-07-20, 19:20:37 UTC presenting an overview of flowR's current capabilities (v2.2.16). Please do not edit this file/wiki page directly.

Each capability has an id that can be used to link to it (use the link symbol to get a direct link to the capability). The internal id is also mentioned in the capability description. This id can be used to reference the capability in a labeled test within flowR. Besides, we use colored bullets like this:

🟩 flowR is capable of handling this feature fully
🔶 flowR is capable of handling this feature partially
🔴 flowR is not capable of handling this feature

☁️ This could be a feature diagram... ☁️

Note

The capabilities are a qualitative measure of the features that flowR can handle. Statements like "flowR can fully handle 50/80 capabilities" are discouraged as the capabilities may have a vastly different granularity. Please prefer using a statement like "flowR has only partial support for feature 'XY'" (or simply reference this document) within the flowR sources.

  1. Names and Identifiers 🔗
    The recognition of syntactical and non-syntactical names, including their resolutions to corresponding definitions. (internal ID: names-and-identifiers)

    Consider the following R code:

    "f" <- function(x) { get("x") } 
    `y x` <- 2
    print(`y x` + f(3))

    Identifiers of interest are:

    Besides the parameter x, which is resolved in its lexicographic-scope, the other identifiers are resolved in the global-scope.

    flowchart LR
        10["`**function** (L. 1)
    *RFunctionDefinition*`"]
    
    subgraph "flow-10" ["function"]
        1["`**x** (L. 1)
    *RSymbol*`"]
        6(["`**#34;x#34;** (L. 1)
    *RString*`"])
        8[["`**get** (L. 1)
    *RFunctionCall*`"]]
        built-in:get["`Built-In:
    get`"]
        style built-in:get stroke:gray,fill:lightgray,stroke-width:2px,opacity:.8;
        9[["`**#123;**
    *RExpressionList*`"]]
        built-in:_["`Built-In:
    #123;`"]
        style built-in:_ stroke:gray,fill:lightgray,stroke-width:2px,opacity:.8;
    end
        0["`**#34;f#34;** (L. 1)
    *RString*`"]
        11[["`**#60;#45;** (L. 1)
    *RBinaryOp*`"]]
        built-in:_-["`Built-In:
    #60;#45;`"]
        style built-in:_- stroke:gray,fill:lightgray,stroke-width:2px,opacity:.8;
        13{{"`**2** (L. 2)
    *RNumber*`"}}
        12["`**#96;y x#96;** (L. 2)
    *RSymbol*`"]
        14[["`**#60;#45;** (L. 2)
    *RBinaryOp*`"]]
        16(["`**#96;y x#96;** (L. 3)
    *RSymbol*`"])
        18{{"`**3** (L. 3)
    *RNumber*`"}}
        20[["`**f** (L. 3)
    *RFunctionCall*`"]]
        21[["`**#43;** (L. 3)
    *RBinaryOp*`"]]
        built-in:_["`Built-In:
    #43;`"]
        style built-in:_ stroke:gray,fill:lightgray,stroke-width:2px,opacity:.8;
        23[["`**print** (L. 3)
    *RFunctionCall*`"]]
        built-in:print["`Built-In:
    print`"]
        style built-in:print stroke:gray,fill:lightgray,stroke-width:2px,opacity:.8;
        1 -->|"defined-by-on-call"| 18
        6 -->|"reads"| 1
        8 -->|"reads, argument"| 6
        8 -.->|"reads, calls"| built-in:get
        linkStyle 3 stroke:gray;
        9 -->|"returns, argument"| 8
        9 -.->|"reads, calls"| built-in:_
        linkStyle 5 stroke:gray;
    10 -.-|function| flow-10
    
        0 -->|"defined-by"| 10
        0 -->|"defined-by"| 11
        11 -->|"argument"| 10
        11 -->|"returns, argument"| 0
        11 -.->|"reads, calls"| built-in:_-
        linkStyle 11 stroke:gray;
        12 -->|"defined-by"| 13
        12 -->|"defined-by"| 14
        14 -->|"argument"| 13
        14 -->|"returns, argument"| 12
        14 -.->|"reads, calls"| built-in:_-
        linkStyle 16 stroke:gray;
        16 -->|"reads"| 12
        18 -->|"defines-on-call"| 1
        20 -->|"argument"| 18
        20 -->|"reads"| 0
        20 -->|"returns"| 9
        20 -->|"calls"| 10
        21 -->|"reads, argument"| 16
        21 -->|"reads, argument"| 20
        21 -.->|"reads, calls"| built-in:_
        linkStyle 25 stroke:gray;
        23 -->|"reads, returns, argument"| 21
        23 -.->|"reads, calls"| built-in:print
        linkStyle 27 stroke:gray;
    
    Loading
    R Code of the (simplified) Dataflow Graph

    The analysis required 17.1 ms (including parse and normalize, using the tree-sitter engine) within the generation environment. We encountered unknown side effects (with ids: 23 (linked)) during the analysis.

    "f" <- function(x) { get("x") } 
    `y x` <- 2
    print(`y x` + f(3))
    15 children (6 fully, 3 partially, 6 not supported)
    1. Form 🔗
      (internal ID: form)

      4 children (3 fully, 1 partially, 0 not supported)
      1. Normal 🔗 (667 tests, dataflow: 335, slice: 268, desugar: 62, lineage: 1, and backed with output: 4)
        🟩 Recognize symbol uses like a, plot, ... (i.e., "normal variables or function calls").
        See Advanced R/Bindings and R Definition/Identifiers for more info. (internal ID: name-normal)
      2. Quoted 🔗 (13 tests, slice: 10, desugar: 3)
        🟩 Recognize "a", 'plot', ... In general, R allows to envelop names in quotations to allow for special characters such as spaces in variable names. However, this only works in the context of definitions. To access these names as variables, one has to either use function such as get or escape the name with backticks.
        See Advanced R/Non-Syntactic Names for more info. (internal ID: name-quoted)
      3. Escaped 🔗 (19 tests, slice: 11, dataflow: 8, and backed with output: 1)
        🟩 Recognize `a`, `plot`, ...
        See Advanced R/Non-Syntactic Names for more info. (internal ID: name-escaped)
      4. Created 🔗 (10 tests, slice: 6, dataflow: 4)
        🔶 Recognize functions which resolve strings as identifiers, such as get, ...
        See flowr#633 for more info. (internal ID: name-created)
    2. Resolution 🔗
      (internal ID: resolution)

      11 children (3 fully, 2 partially, 6 not supported)
      1. Global Scope 🔗 (14 tests, slice: 5)
        🟩 For example, tracking a big table of current identifier bindings (internal ID: global-scope)
      2. Lexicographic Scope 🔗 (21 tests, slice: 10)
        🟩 For example, support function definition scopes (internal ID: lexicographic-scope)
      3. Closures 🔗 (26 tests, slice: 18, dataflow: 8)
        🔶 Handling function factories and friends. Currently, we do not have enough tests to be sure. (internal ID: closures)
      4. Dynamic Environment Resolution 🔗
        🔴 For example, using new.env and friends (internal ID: dynamic-environment-resolution)
      5. Environment Sharing 🔗
        🔴 Handling side-effects by environments which are not copied when modified (internal ID: environment-sharing)
      6. Search Type 🔗 (4 tests, slice: 2)
        🟩 Separating the resolution for functions and symbols. (internal ID: search-type)
      7. Search Path 🔗
        🔴 Handling R's search path as explained in Advanced R. 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. (internal ID: search-path)
      8. Namespaces 🔗
        🔴 Handling R's namespaces as explained in Advanced R (internal ID: namespaces)
      9. Accessing Exported Names 🔗 (7 tests, desugar: 4, slice: 3)
        🔶 Resolving calls with :: to their origin. Accessing external files is allowed, although the name of packages etc. is not resolved correctly. (internal ID: accessing-exported-names)
      10. Accessing Internal Names 🔗
        🔴 Similar to :: but for internal names. (internal ID: accessing-internal-names)
      11. Library Loading 🔗 (1 test, slice: 1)
        🔴 Resolve libraries identified with library, require, attachNamespace, ... and attach them to the search path (internal ID: library-loading)

  2. Expressions 🔗
    (internal ID: expressions)

    68 children (48 fully, 12 partially, 8 not supported)
    1. Function Calls 🔗 (655 tests, dataflow: 299, slice: 250, desugar: 105, lineage: 1, and backed with output: 5)
      (internal ID: function-calls)

      62 children (42 fully, 12 partially, 8 not supported)
      1. Grouping 🔗 (134 tests, desugar: 111, dataflow: 13, slice: 10)
        🟩 Recognize groups done with (, {, ... (more precisely, their default mapping to the primitive implementations). (internal ID: grouping)

      2. Normal Call 🔗 (157 tests, slice: 123, desugar: 21, dataflow: 13, and backed with output: 3)
        🟩 Recognize and resolve calls like f(x), foo::bar(x, y), ... (internal ID: call-normal)

        7 children (5 fully, 2 partially, 0 not supported)
        1. Unnamed Arguments 🔗 (264 tests, slice: 147, dataflow: 114, desugar: 3, and backed with output: 4)
          🟩 Recognize and resolve calls like f(3), foo::bar(3, c(1,2)), ... (internal ID: unnamed-arguments)
        2. Empty Arguments 🔗 (5 tests, dataflow: 2, slice: 2, desugar: 1)
          🟩 Essentially a special form of an unnamed argument as in foo::bar(3, ,42), ... (internal ID: empty-arguments)
        3. Named Arguments 🔗 (106 tests, dataflow: 59, slice: 45, desugar: 2)
          🟩 Recognize and resolve calls like f(x = 3), foo::bar(x = 3, y = 4), ... (internal ID: named-arguments)
        4. String Arguments 🔗 (9 tests, desugar: 9)
          🟩 Recognize and resolve calls like f('x' = 3), foo::bar('x' = 3, "y" = 4), ... (internal ID: string-arguments)
        5. Resolve Arguments 🔗 (38 tests, slice: 33, dataflow: 5)
          🟩 Correctly bind arguments (including pmatch). Currently, we do not have a correct implementation for pmatch. Furthermore, more tests would be nice. (internal ID: resolve-arguments)
        6. Side-Effects in Argument 🔗 (2 tests, dataflow: 1, slice: 1)
          🔶 Handle side-effects of arguments (e.g., f(x <- 3), f(x = y <- 3), ...). We have not enough tests to be sure (internal ID: side-effects-in-argument)
        7. Side-Effects in Function Call 🔗 (14 tests, slice: 9, dataflow: 5)
          🔶 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. (internal ID: side-effects-in-function-call)
      3. Anonymous Calls 🔗 (8 tests, slice: 3, dataflow: 3, desugar: 2)
        🟩 Recognize and resolve calls like (function(x) x)(3), factory(0)(), ... (internal ID: call-anonymous)

      4. Infix Calls 🔗 (514 tests, slice: 220, dataflow: 191, desugar: 102, lineage: 1, and backed with output: 5)
        🟩 Recognize and resolve calls like x + y, x %>% f(y), ... (internal ID: infix-calls)

      5. Redefinition of Built-In Functions/primitives 🔗 (12 tests, slice: 12, and backed with output: 1)
        🔶 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 (internal ID: redefinition-of-built-in-functions-primitives)

      6. Functions with global side effects 🔗 (35 tests, slice: 30, dataflow: 5)
        🔶 Support functions like setwd which have an impact on the subsequent program. (internal ID: functions-with-global-side-effects)

      7. Index Access 🔗
        (internal ID: index-access)

        7 children (7 fully, 0 partially, 0 not supported)
        1. Single Bracket Access 🔗 (84 tests, slice: 39, dataflow: 37, desugar: 8)
          🟩 Detect calls like x[i], x[i, ,b], x[3][y], ... This does not include the real separation of cells, which is handled extra. (internal ID: single-bracket-access)
        2. Double Bracket Access 🔗 (69 tests, slice: 35, dataflow: 30, desugar: 4)
          🟩 Detect calls like x[[i]], x[[i, b]], ... Similar to single bracket. (internal ID: double-bracket-access)
        3. Dollar Access 🔗 (22 tests, dataflow: 13, slice: 7, desugar: 2)
          🟩 Detect calls like x$y, x$"y", x$y$z, ... (internal ID: dollar-access)
        4. Slot Access 🔗 (2 tests, dataflow: 1, desugar: 1)
          🟩 Detect calls like x@y, x@y@z, ... (internal ID: slot-access)
        5. Access with Argument-Names 🔗 (3 tests, slice: 2, desugar: 1)
          🟩 Detect calls like x[i = 3], x[[i=]], ... (internal ID: access-with-argument-names)
        6. Access with Empty 🔗 (4 tests, desugar: 4)
          🟩 Detect calls like x[], x[2,,42], ... (internal ID: access-with-empty)
        7. Subsetting (Multiple Indices) 🔗 (137 tests, dataflow: 105, slice: 32)
          🟩 Detect calls like x[i > 3], x[c(1,3)], ... (internal ID: subsetting-multiple)
      8. Operators 🔗
        (internal ID: operators)

        15 children (11 fully, 3 partially, 1 not supported)
        1. Unary Operator 🔗 (11 tests, desugar: 6, dataflow: 5)
          🟩 Recognize and resolve calls like +3, -3, ... (internal ID: unary-operator)

        2. Binary Operator 🔗 (512 tests, slice: 218, dataflow: 191, desugar: 102, lineage: 1, and backed with output: 5)
          🟩 Recognize and resolve calls like 3 + 4, 3 * 4, ... (internal ID: binary-operator)

          13 children (9 fully, 3 partially, 1 not supported)
          1. Special Operator 🔗 (12 tests, slice: 11, desugar: 1)
            🟩 Recognize and resolve calls like 3 %in% 4, 3 %*% 4, ... (internal ID: special-operator)

          2. Model Formula 🔗 (9 tests, desugar: 6, dataflow: 3)
            🔶 Recognize and resolve calls like y ~ x, y ~ x + z, ... including their implicit redefinitions of some functions. Currently, we do not handle their redefinition and only treat model formulas as normal binary operators (internal ID: model-formula)

          3. Assignments and Bindings 🔗 (7 tests, slice: 7, and backed with output: 4)
            (internal ID: assignments-and-bindings)

            11 children (8 fully, 2 partially, 1 not supported)
            1. Local Left Assignment 🔗 (328 tests, slice: 219, dataflow: 100, desugar: 8, lineage: 1, and backed with output: 9)
              🟩 Handle x <- 3, x$y <- 3, ... (internal ID: local-left-assignment)
            2. Local Right Assignment 🔗 (19 tests, dataflow: 7, slice: 6, desugar: 6)
              🟩 Handle 3 -> x, 3 -> x$y, ... (internal ID: local-right-assignment)
            3. Local Equal Assignment 🔗 (23 tests, dataflow: 12, desugar: 6, slice: 5)
              🟩 Handle x = 3, x$y := 3, ... (internal ID: local-equal-assignment)
            4. Local Table Assignment 🔗 (12 tests, desugar: 5, slice: 4, dataflow: 3)
              🟩 Handle x[,a:=3,], ... (internal ID: local-table-assignment)
            5. Super Left Assignment 🔗 (36 tests, dataflow: 18, slice: 12, desugar: 6)
              🟩 Handle x <<- 42, x$y <<- 42, ... (internal ID: super-left-assignment)
            6. Super Right Assignment 🔗 (10 tests, desugar: 6, dataflow: 4)
              🟩 Handle 42 ->> x, 42 ->> x$y, ... (internal ID: super-right-assignment)
            7. Return Value of Assignments 🔗 (26 tests, dataflow: 18, slice: 8)
              🟩 Handle x <- 3 returning 3, e.g., in x <- y <- 3 (internal ID: return-value-of-assignments)
            8. Assignment Functions 🔗 (397 tests, slice: 222, dataflow: 141, desugar: 33, lineage: 1, and backed with output: 5)
              🔶 Handle assign(x, 3), delayedAssign(x, 3), ... Currently we can not handle all of them and tests are rare. (internal ID: assignment-functions)
            9. Range Assignment 🔗 (1 test, slice: 1)
              🟩 Handle x[1:3] <- 3, x$y[1:3] <- 3, ... (internal ID: range-assignment)
            10. Replacement Functions 🔗 (8 tests, dataflow: 4, slice: 4)
              🔶 Handle x[i] <- 3, x$y <- 3, ... as `[<-`(x, 3), ... Currently work in progress as part of the desugaring but still untested. (internal ID: replacement-functions)
            11. Locked Bindings 🔗
              🔴 Handle lockBinding(x, 3), ... (internal ID: locked-bindings)
      9. Control-Flow 🔗 (8 tests, slice: 5, dataflow: 3)
        (internal ID: control-flow)

        9 children (8 fully, 0 partially, 1 not supported)
        1. if 🔗 (129 tests, dataflow: 55, desugar: 51, slice: 23, and backed with output: 2)
          🟩 Handle if (x) y else z, if (x) y, ... (internal ID: if)
        2. for loop 🔗 (43 tests, slice: 27, dataflow: 14, desugar: 2, and backed with output: 2)
          🟩 Handle for (i in 1:3) print(i), ... (internal ID: for-loop)
        3. while loop 🔗 (35 tests, slice: 22, dataflow: 9, desugar: 4)
          🟩 Handle while (x) b, ... (internal ID: while-loop)
        4. repeat loop 🔗 (25 tests, slice: 14, dataflow: 9, desugar: 2)
          🟩 Handle repeat {b; if (x) break}, ... (internal ID: repeat-loop)
        5. break 🔗 (15 tests, dataflow: 7, slice: 6, desugar: 2)
          🟩 Handle break (including break()) ... (internal ID: break)
        6. next 🔗 (8 tests, dataflow: 3, slice: 3, desugar: 2)
          🟩 Handle next (including next()) ... (internal ID: next)
        7. switch 🔗 (1 test, slice: 1)
          🟩 Handle switch(3, "a", "b", "c"), ... (internal ID: switch)
        8. return 🔗 (41 tests, slice: 36, dataflow: 5)
          🟩 Handle return(3), ... in function definitions (internal ID: return)
        9. exceptions 🔗
          🔴 Handle try, stop, ... (internal ID: exceptions)
      10. Function Definitions 🔗 (19 tests, slice: 12, dataflow: 7, and backed with output: 1)
        (internal ID: function-definitions)

        7 children (6 fully, 1 partially, 0 not supported)
        1. Normal 🔗 (113 tests, slice: 76, dataflow: 25, desugar: 12)
          🟩 Handle function() 3, ... (internal ID: normal-definition)

        2. Formals 🔗
          (internal ID: formals)

          4 children (3 fully, 1 partially, 0 not supported)
          1. Named 🔗 (64 tests, slice: 35, dataflow: 22, desugar: 7)
            🟩 Handle function(x) x, ... (internal ID: formals-named)
          2. Default 🔗 (18 tests, slice: 11, dataflow: 5, desugar: 2)
            🟩 Handle function(x = 3) x, ... (internal ID: formals-default)
          3. Dot-Dot-Dot 🔗 (11 tests, dataflow: 5, slice: 3, desugar: 3)
            🟩 Handle function(...) 3, ... (internal ID: formals-dot-dot-dot)
          4. Promises 🔗 (3 tests, slice: 3)
            🔶 Handle function(x = y) { y <- 3; x }, function(x = { x <- 3; x}) { x * x }, ... We try to identify promises correctly but this is really rudimentary. (internal ID: formals-promises)
        3. Implicit Return 🔗 (135 tests, slice: 99, dataflow: 36)
          🟩 Handle the return of function() 3, ... (internal ID: implicit-return)

        4. Lambda Syntax 🔗 (6 tests, dataflow: 4, slice: 2)
          🟩 Support \(x) x, ... (internal ID: lambda-syntax)

      11. Important Built-Ins 🔗
        (internal ID: important-built-ins)

        11 children (1 fully, 4 partially, 6 not supported)
        1. Non-Strict Logical Operators 🔗 (29 tests, desugar: 20, dataflow: 9)
          🟩 Handle &&, ||, ... (internal ID: non-strict-logical-operators)

        2. Pipe and Pipe-Bind 🔗 (7 tests, dataflow: 3, slice: 2, desugar: 2)
          🔶 Handle the new (4.1) pipe and pipe-bind syntax: |>, and =>. We have not enough tests and do not support pipe-bind. (internal ID: built-in-pipe-and-pipe-bind)

        3. Sequencing 🔗 (1 test, slice: 1)
          🔴 Handle :, seq, ... by gathering value information using abstract interpretation. (internal ID: built-in-sequencing)

        4. Internal and Primitive Functions 🔗 (2 tests, slice: 2)
          🔶 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. (internal ID: built-in-internal-and-primitive-functions)

        5. Options 🔗
          🔴 Handle options, getOption, ... Currently, we do not support the function at all. (internal ID: built-in-options)

        6. Help 🔗 (3 tests, desugar: 2, dataflow: 1)
          🔶 Handle help, ?, ... We do not support the function in a sensible way but just ignore it (although this does not happen resolved). (internal ID: built-in-help)

        7. Reflection / "Computing on the Language" 🔗
          (internal ID: reflection-"computing-on-the-language")

          5 children (0 fully, 1 partially, 4 not supported)
          1. Get Function Structure 🔗
            🔴 Handle body, formals, environment to access the respective parts of a function. We do not support the functions at all. (internal ID: get-function-structure)
          2. Modify Function Structure 🔗
            🔴 Handle body<-, formals<-, environment<- to modify the respective parts of a function. We do not support the functions at all. (internal ID: modify-function-structure)
          3. Quoting 🔗 (1 test, slice: 1)
            🔶 Handle quote, substitute, bquote, ... We partially ignore some of them but most likely not all. (internal ID: built-in-quoting)
          4. Evaluation 🔗 (6 tests, slice: 6)
            🔴 Handle eval, evalq, eval.parent, ... We do not handle them at all. (internal ID: built-in-evaluation)
          5. Parsing 🔗
            🔴 Handle parse, deparse, ... We handle them as unknown function calls, but not specifically besides that. (internal ID: built-in-parsing)
    2. Literal Values 🔗
      (internal ID: literal-values)

      6 children (6 fully, 0 partially, 0 not supported)
      1. Numbers 🔗 (571 tests, slice: 217, desugar-shell: 205, desugar-tree-sitter: 197, dataflow: 149, and backed with output: 9)
        🟩 Recognize numbers like 3, 3.14, NA, float-hex, ... (internal ID: numbers)

      2. Strings 🔗 (102 tests, desugar: 45, slice: 42, dataflow: 15, and backed with output: 1)
        🟩 Recognize strings like "a", 'b', ... (internal ID: strings)

        1 child (1 fully, 0 partially, 0 not supported)
        1. Raw Strings 🔗 (7 tests, desugar: 7)
          🟩 Recognize raw strings like r"(a)", ... (internal ID: raw-strings)
      3. Logical 🔗 (109 tests, desugar: 55, dataflow: 36, slice: 18, and backed with output: 1)
        🟩 Recognize the logicals TRUE and FALSE, ... (internal ID: logical)

      4. NULL 🔗 (2 tests, dataflow: 1, slice: 1)
        🟩 Recognize NULL (internal ID: null)

      5. Inf and NaN 🔗 (3 tests, dataflow: 2, slice: 1)
        🟩 Recognize Inf and NaN (internal ID: inf-and-nan)


  3. Non-Standard Evaluations/Semantics 🔗
    (internal ID: non-standard-evaluations-semantics)

    6 children (1 fully, 0 partially, 5 not supported)
    1. Recycling 🔗
      🔴 Handle recycling of vectors as explained in Advanced R. We do not support recycling. (internal ID: recycling)

    2. Vectorized Operator or Functions 🔗
      🔴 Handle vectorized operations as explained in Advanced R. We do not support vectorized operations. (internal ID: vectorized-operator-or-functions)

    3. Hooks 🔗
      🔴 Handle hooks like userhooks and on.exit. We do not support hooks. (internal ID: hooks)

    4. Precedence 🔗 (34 tests, slice: 33, dataflow: 1, and backed with output: 4)
      🟩 Handle the precedence of operators as explained in the Documentation. We handle the precedence of operators (implicitly with the parser). (internal ID: precedence)

    5. Attributes 🔗
      (internal ID: attributes)

      2 children (0 fully, 0 partially, 2 not supported)
      1. User-Defined 🔗
        🔴 Handle attributes like attr, attributes, ... We do not support attributes. (internal ID: user-defined)
      2. Built-In 🔗 (10 tests, slice: 7, dataflow: 3)
        🔴 Handle built-in attributes like dim, ... We do not support them. (internal ID: built-in)

  4. Types 🔗
    (internal ID: types)

    8 children (0 fully, 0 partially, 8 not supported)
    1. Primitive 🔗
      🔴 Recognize and resolve primitive types like numeric, character, ... We do not support typing currently. (internal ID: types-primitive)

    2. Non-Primitive 🔗
      🔴 Recognize and resolve non-primitive/composite types. We do not support typing currently. (internal ID: types-non-primitive)

    3. Inference 🔗
      🔴 Infer types from the code. We do not support typing currently. (internal ID: types-inference)

    4. Coercion 🔗
      🔴 Handle coercion of types. We do not support typing currently. (internal ID: types-coercion)

    5. Object-Oriented Programming 🔗
      (internal ID: object-oriented-programming)

      4 children (0 fully, 0 partially, 4 not supported)
      1. S3 🔗
        🔴 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."
        See Advanced R/S3 for more info. (internal ID: oop-s3)
      2. S4 🔗
        🔴 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."
        See Advanced R/S4 for more info. (internal ID: oop-s4)
      3. R6 🔗
        🔴 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."
        See Advanced R/R6 for more info. (internal ID: oop-r6)
      4. R7/S7 🔗
        🔴 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."
        See R7 and S7 for more info. (internal ID: r7-s7)

  5. Structure 🔗
    (internal ID: structure)

    3 children (3 fully, 0 partially, 0 not supported)
    1. Comments 🔗 (15 tests, slice: 9, desugar-shell: 6, desugar-tree-sitter: 5, and backed with output: 3)
      🟩 Recognize comments like # this is a comment, ... and line-directives (internal ID: comments)
    2. Semicolons 🔗 (66 tests, dataflow: 32, slice: 29, desugar: 5)
      🟩 Recognize and resolve semicolons like a; b; c, ... (internal ID: semicolons)
    3. Newlines 🔗 (298 tests, slice: 205, dataflow: 83, desugar: 9, lineage: 1, and backed with output: 5)
      🟩 Recognize and resolve newlines like a b c, ... (internal ID: newlines)

  6. System, I/O, FFI, and Other Files 🔗
    (internal ID: system-i-o-ffi-and-other-files)

    5 children (0 fully, 1 partially, 4 not supported)
    1. Sourcing External Files 🔗 (15 tests, dataflow: 8, slice: 7)
      🔶 Handle source, sys.source, ... We are currently working on supporting the inclusion of external files. Currently we can handle source. (internal ID: sourcing-external-files)
    2. Handling Binary Riles 🔗
      🔴 Handle files dumped with, e.g., save, ... due to their frequent usage. We do not support binary files. (internal ID: handling-binary-riles)
    3. I/O 🔗
      🔴 Handle read.csv, write.csv, ... We do not support I/O for the time being but treat them as unknown function calls. (internal ID: i-o)
    4. Foreign Function Interface 🔗
      🔴 Handle .Fortran, C,... We do not support FFI but treat them as unknown function calls. (internal ID: foreign-function-interface)
    5. System Calls 🔗
      🔴 Handle system, system.*, ... We do not support system calls but treat them as unknown function calls. (internal ID: system-calls)

  7. Pre-Processors/external Tooling 🔗
    🔴 Handle pre-processors like knitr, rmarkdown, roxygen2 ... We do not support pre-processors for the time being (being unable to handle things like @importFrom) (internal ID: pre-processors-external-tooling)

Clone this wiki locally