Skip to content

Capabilities

github-actions[bot] edited this page Feb 8, 2025 · 1 revision

This document was generated from 'src/documentation/print-capabilities-markdown.ts' on 2025-02-08, 20:17:15 UTC presenting an overview of flowR's current capabilities (v2.2.1). 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**
    *RFunctionDefinition*`"]
    
    subgraph "flow-10" ["function(x) #123; get(#34;x#34;) #125;"]
        1["`**x**
    *RSymbol*`"]
        6(["`**#34;x#34;**
    *RString*`"])
        8[["`**get**
    *RFunctionCall*`"]]
        9[["`**#123;**
    *RExpressionList*`"]]
    end
        0["`**#34;f#34;**
    *RString*`"]
        11[["`**#60;#45;**
    *RBinaryOp*`"]]
        13{{"`**2**
    *RNumber*`"}}
        12["`**#96;y x#96;**
    *RSymbol*`"]
        14[["`**#60;#45;**
    *RBinaryOp*`"]]
        16(["`**#96;y x#96;**
    *RSymbol*`"])
        18{{"`**3**
    *RNumber*`"}}
        20[["`**f**
    *RFunctionCall*`"]]
        21[["`**#43;**
    *RBinaryOp*`"]]
        23[["`**print**
    *RFunctionCall*`"]]
        1 -->|"defined-by-on-call"| 18
        6 -->|"reads"| 1
        8 -->|"reads, argument"| 6
        9 -->|"returns, argument"| 8
    10 -.-|function| flow-10
    
        0 -->|"defined-by"| 10
        0 -->|"defined-by"| 11
        11 -->|"argument"| 10
        11 -->|"returns, argument"| 0
        12 -->|"defined-by"| 13
        12 -->|"defined-by"| 14
        14 -->|"argument"| 13
        14 -->|"returns, argument"| 12
        16 -->|"reads"| 12
        18 -->|"defines-on-call"| 1
        20 -->|"reads"| 0
        20 -->|"argument"| 18
        20 -->|"returns"| 9
        20 -->|"calls"| 10
        21 -->|"reads, argument"| 16
        21 -->|"reads, argument"| 20
        23 -->|"reads, returns, argument"| 21
    
    Loading
    R Code of the (simplified) Dataflow Graph

    The analysis required 16.82 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))
    1. Form πŸ”—
      Internal ID: form
      1. Normal πŸ”— (515 tests, slice: 232, dataflow: 221, desugar: 60, 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
      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 πŸ”— (20 tests, slice: 12, 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 πŸ”— (3 tests, slice: 1)
        🟩 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
    1. Function Calls πŸ”— (511 tests, slice: 214, dataflow: 191, desugar: 105, lineage: 1, and backed with output: 5)
      Internal ID: function-calls
      1. Grouping πŸ”— (133 tests, desugar: 110, dataflow: 13, slice: 10)
        🟩 Recognize groups done with (, {, ... (more precisely, their default mapping to the primitive implementations). Internal ID: grouping
      2. Normal Call πŸ”— (148 tests, slice: 115, desugar: 20, dataflow: 13, and backed with output: 3)
        🟩 Recognize and resolve calls like f(x), foo::bar(x, y), ... Internal ID: call-normal
        1. Unnamed Arguments πŸ”— (183 tests, slice: 135, dataflow: 45, 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 πŸ”— (43 tests, slice: 36, dataflow: 5, 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 πŸ”— (33 tests, slice: 33)
          πŸ”Ά 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 πŸ”— (13 tests, slice: 9, dataflow: 4)
          πŸ”Ά 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, dataflow: 3, slice: 3, desugar: 2)
        🟩 Recognize and resolve calls like (function(x) x)(3), factory(0)(), ... Internal ID: call-anonymous
      4. Infix Calls πŸ”— (478 tests, slice: 193, dataflow: 182, 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 πŸ”— (26 tests, slice: 22, dataflow: 4)
        πŸ”Ά 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
        1. Single Bracket Access πŸ”— (25 tests, slice: 10, desugar: 8, dataflow: 7)
          🟩 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 πŸ”— (40 tests, slice: 35, desugar: 4, dataflow: 1)
          🟩 Detect calls like x[[i]], x[[i, b]], ... Similar to single bracket. Internal ID: double-bracket-access
        3. Dollar Access πŸ”— (27 tests, slice: 23, dataflow: 3, desugar: 1)
          🟩 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) πŸ”— (23 tests, slice: 22, dataflow: 1)
          🟩 Detect calls like x[i > 3], x[c(1,3)], ... Internal ID: subsetting-multiple
      8. Operators πŸ”—
        Internal ID: operators
        1. Unary Operator πŸ”— (11 tests, desugar: 6, dataflow: 5)
          🟩 Recognize and resolve calls like +3, -3, ... Internal ID: unary-operator
        2. Binary Operator πŸ”— (476 tests, slice: 191, dataflow: 182, desugar: 102, lineage: 1, and backed with output: 5)
          🟩 Recognize and resolve calls like 3 + 4, 3 * 4, ... Internal ID: binary-operator
          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
            1. Local Left Assignment πŸ”— (298 tests, slice: 192, dataflow: 97, 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 πŸ”— (35 tests, dataflow: 17, 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 πŸ”— (366 tests, slice: 195, dataflow: 137, 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 πŸ”— (5 tests, dataflow: 3, slice: 2)
              πŸ”Ά 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
        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 πŸ”— (42 tests, slice: 26, 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
        1. Normal πŸ”— (104 tests, slice: 69, dataflow: 24, desugar: 11)
          🟩 Handle function() 3, ... Internal ID: normal-definition
        2. Formals πŸ”—
          Internal ID: formals
          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 πŸ”— (129 tests, slice: 93, 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
        1. Non-Strict Logical Operators πŸ”— (29 tests, desugar: 20, dataflow: 9)
          🟩 Handle &&, ||, ... Internal ID: non-strict-logical-operators
        2. Pipe and Pipe-Bind πŸ”— (5 tests, dataflow: 3, 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 πŸ”—
          πŸ”΄ 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"
          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 πŸ”—
            πŸ”΄ 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
      1. Numbers πŸ”— (538 tests, desugar-shell: 204, desugar-tree-sitter: 196, slice: 193, dataflow: 141, and backed with output: 9)
        🟩 Recognize numbers like 3, 3.14, NA, float-hex, ... Internal ID: numbers
      2. Strings πŸ”— (95 tests, desugar: 45, slice: 36, dataflow: 14, and backed with output: 1)
        🟩 Recognize strings like "a", 'b', ... Internal ID: strings
        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
    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
      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
    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
      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
    1. Comments πŸ”— (13 tests, slice: 9, desugar-shell: 4, desugar-tree-sitter: 3, and backed with output: 3)
      🟩 Recognize comments like # this is a comment, ... and line-directives Internal ID: comments
    2. Semicolons πŸ”— (65 tests, dataflow: 31, slice: 29, desugar: 5)
      🟩 Recognize and resolve semicolons like a; b; c, ... Internal ID: semicolons
    3. Newlines πŸ”— (270 tests, slice: 178, dataflow: 82, 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
    1. Sourcing External Files πŸ”— (14 tests, dataflow: 7, 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