dotfiles/talon/user/community/lang/r/r.py

362 lines
9.4 KiB
Python

from talon import Context, actions, settings
ctx = Context()
ctx.matches = r"""
code.language: r
"""
ctx.lists["user.code_common_function"] = {
# base R
"as character": "as.character",
"as data frame": "as.data.frame",
"as date": "as.Date",
"as double": "as.double",
"as factor": "as.factor",
"as integer": "as.integer",
"as numeric": "as.numeric",
"base read RDS": "readRDS",
"base save RDS": "saveRDS",
"cable": "kable",
"correlation": "cor",
"count": "count",
"covariance": "cov",
"describe": "describe",
"eigen": "eigen",
"ex table": "xtable",
"get working directory": "getwd",
"head": "head",
"if else": "ifelse",
"install packages": "install.packages",
"is NA": "is.na",
"is not NA": "!is.na",
"length": "length",
"library": "library",
"list files": "list.files",
"list": "list",
"lm": "lm",
"log": "log",
"make directory": "dir.create",
"margins": "margins",
"max": "max",
"mean": "mean",
"min": "min",
"names": "names",
"paste": "paste0",
"print": "print",
"reorder": "reorder",
"repeat": "rep",
"scale": "scale",
"sequence along": "seq_along",
"sequence length": "seq_len",
"sequence": "seq",
"set working directory": "setwd",
"sort": "sort",
"subset": "subset",
"sum": "sum",
"summary": "summary",
"tail": "tail",
"tidy": "tidy",
"trim white space": "trimws",
"type": "typeof",
"unique": "unique",
"vector": "c",
"vee table": "vtable",
"view": "View",
# dplyr
"anti join": "anti_join",
"arrange": "arrange",
"as tibble": "as_tibble",
"bind rows": "bind_rows",
"case when": "case_when",
"distinct": "distinct",
"everything": "everything",
"filter": "filter",
"full join": "full_join",
"glimpse": "glimpse",
"group by": "group_by",
"inner join": "inner_join",
"left join": "left_join",
"mutate": "mutate",
"pull": "pull",
"rename all": "rename_all",
"rename": "rename",
"right join": "right_join",
"select all": "select_all",
"select": "select",
"semi join": "semi_join",
"starts with": "starts_with",
"summarise": "summarise",
"tibble": "tibble",
"ungroup": "ungroup",
# ggplot2
"coord cartesian": "coor_cartesian",
"element text": "element_text",
"element blank": "element_blank",
"facet grid": "facet_grid",
"facet wrap": "facet_wrap",
"geom A B line": "geom_abline",
"geom area": "geom_area",
"geom bar": "geom_bar",
"geom boxplot": "geom_boxplot",
"geom histogram": "geom_histogram",
"geom horizontal line": "geom_hline",
"geom line": "geom_line",
"geom point": "geom_point",
"geom pointrange": "geom_pointrange",
"geom polygon": "geom_polygon",
"geom ribbon": "geom_ribbon",
"geom segment": "geom_segment",
"geom smooth": "geom_smooth",
"geom vertical line": "geom_vline",
"geom violin": "geom_violin",
"labs": "labs",
"scale colour manual": "scale_colour_manual",
"scale fill manual": "scale_fill_manual",
"scale fill viridis": "scale_fill_viridis_c",
"scale colour viridis": "scale_colour_viridis_c",
"theme set": "theme_set",
# purrr
"map character": "map_chr",
"map data frame": "map_dfr",
"map double": "map_dbl",
"map": "map",
"P map": "pmap",
# stringr
"string contains": "str_detect",
"string detect": "str_detect",
"string replace all": "str_replace_all",
"string replace": "str_replace",
# tidyr
"drop NA": "drop_na",
"gather": "gather",
"nest": "nest",
"pivot longer": "pivot_longer",
"pivot wider": "pivot_wider",
"spread": "spread",
"un nest": "unnest",
# readr, readxl, and other non-base R reading/writing
"read E views": "readEViews",
"read CSV": "read_csv",
"read RDS": "read_rds",
"read excel": "read_xlsx",
"write CSV": "write_csv",
"write RDS": "write_rds",
# Shiny
"shine ui": "shinyUI",
"title panel": "titlePanel",
"main panel": "mainPanel",
"tab panel": "tabPanel",
"navigation list panel": "navlistPanel",
"conditional panel": "conditionalPanel",
"input panel": "inputPanel",
"ui output": "uiOutput",
"text output": "textOutput",
"table output": "tableOutput",
"data table output": "dataTableOutput",
"select size input": "selectizeInput",
"action button": "actionButton",
"download button": "downloadButton",
"render ui": "renderUI",
"observe event": "observeEvent",
# Base
}
ctx.lists["user.code_libraries"] = {
"bayes plot": "bayesplot",
"BRMS": "brms",
"cable": "kable",
"car": "car",
"D plier": "dplyr",
"dev tools": "devtools",
"future": "future",
"furr": "furrr",
"gap minder": "gapminder",
"gee animate": "gganimate",
"gee highlight": "gghighlight",
"gee map": "ggmap",
"gee repel": "ggrepel",
"grid extra": "gridExtra",
"gee gee plot": "ggplot2",
"GLMM TMB": "glmmTMB",
"here": "here",
"knitter": "knitr",
"LME four": "lme4",
"LM test": "lmtest",
"lubridate": "lubridate",
"margins": "margins",
"inla": "INLA",
"NLME": "nlme",
"psych": "psych",
"purr": "purrr",
"R markdown": "rmarkdown",
"R stan": "rstan",
"R stan arm": "rstanarm",
"R color brewer": "RColorBrewer",
"read R": "readr",
"stargazer": "stargazer",
"tidy verse": "tidyverse",
"tidier": "tidyr",
"tidy bayes": "tidybayes",
"TMB": "TMB",
"vee table": "vtable",
"viridis": "viridis",
"viridis light": "viridisLite",
"shiny alert": "shinyalert",
}
ctx.lists["user.code_parameter_name"] = {
"alpha": "alpha",
"breaks": "breaks",
"colour": "colour",
"data": "data",
"fill": "fill",
"H just": "hjust",
"keep": ".keep",
"label": "label",
"labels": "labels",
"log": "log",
"main": "main",
"mapping": "mapping",
"method": "method",
"NA remove": "na.rm",
"path": "path",
"position": "position",
"plex label": "xlab",
"plex limit": "xlim",
"scales": "scales",
"size": "size",
"show legend": "show.legend",
"sort": "sort",
"title": "title",
"type": "type",
"vee just": "vjust",
"width": "width",
"with ties": "with_ties",
"why label": "ylab",
"why limit": "ylim",
"why max": "ymax",
"why min": "ymin",
}
@ctx.action_class("user")
class UserActions:
def code_operator_assignment():
actions.auto_insert(" <- ")
def code_operator_subtraction():
actions.auto_insert(" - ")
def code_operator_addition():
actions.auto_insert(" + ")
def code_operator_multiplication():
actions.auto_insert(" * ")
def code_operator_exponent():
actions.auto_insert(" ** ")
def code_operator_division():
actions.auto_insert(" / ")
def code_operator_modulo():
actions.auto_insert(" %% ")
def code_operator_equal():
actions.auto_insert(" == ")
def code_operator_not_equal():
actions.auto_insert(" != ")
def code_operator_greater_than():
actions.auto_insert(" > ")
def code_operator_greater_than_or_equal_to():
actions.auto_insert(" >= ")
def code_operator_less_than():
actions.auto_insert(" < ")
def code_operator_less_than_or_equal_to():
actions.auto_insert(" <= ")
def code_operator_and():
actions.auto_insert(" & ")
def code_operator_or():
actions.auto_insert(" | ")
def code_operator_bitwise_and():
actions.auto_insert(" & ")
def code_insert_null():
actions.auto_insert("NULL")
def code_state_if():
actions.insert("if () {}")
actions.key("left enter up end left:3")
def code_state_else_if():
actions.insert(" else if () {}")
actions.key("left enter up end left:3")
def code_state_else():
actions.insert(" else {}")
actions.key("left enter")
def code_state_for():
actions.insert("for ( in ) {}")
actions.key("left enter up end left:7")
def code_state_while():
actions.insert("while () {}")
actions.key("left enter up end left:3")
def code_import():
actions.user.insert_between("library(", ")")
def code_comment_line_prefix():
actions.auto_insert("#")
def code_state_return():
actions.user.insert_between("return(", ")")
def code_break():
actions.auto_insert("break")
def code_next():
actions.auto_insert("next")
def code_insert_true():
actions.auto_insert("TRUE")
def code_insert_false():
actions.auto_insert("FALSE")
def code_insert_function(text: str, selection: str):
text += f"({selection or ''})"
actions.user.paste(text)
actions.edit.left()
def code_private_function(text: str):
result = "{} <- function () {{\n\n}}".format(
actions.user.formatted_text(
text, settings.get("user.code_private_function_formatter")
)
)
actions.user.paste(result)
actions.edit.up()
actions.edit.up()
actions.edit.line_end()
actions.edit.left()
actions.edit.left()
actions.edit.left()
def code_insert_library(text: str, selection: str):
actions.user.insert_between("library(", ")")
actions.user.paste(text + selection)
def code_insert_named_argument(parameter_name: str):
actions.insert(f"{parameter_name} = ")