{ "name": "Stan", "scopeName": "source.stan", "patterns": [ { "include": "#comments" }, { "include": "#strings" }, { "include": "#numbers" }, { "name": "entity.name.type.stan", "match": "\\b(functions|data|transformed\\s+data|parameters|transformed\\s+parameters|model|generated\\s+quantities)\\b" }, { "name": "storage.type.stan", "match": "\\b(int|real|vector|simplex|unit_vector|ordered|positive_ordered|row_vector|matrix|corr_matrix|cov_matrix|cholesky_factor_cov|cholesky_factor_corr|void)\\b" }, { "name": "keyword.control.stan", "match": "\\b(for|in|while|if|else|break|continue)\\b" }, { "match": "\\b(lower|upper)\\s*(=)", "captures": { "1": { "name": "keyword.other.range.stan" }, "2": { "name": "punctuation.operator.equal.stan" } } }, { "name": "keyword.other.return.stan", "match": "\\breturn\\b" }, { "match": "\\b(target)\\s*([+][=])", "captures": { "1": { "name": "keyword.other.target.stan" }, "2": { "name": "keyword.operator.accumulator.stan" } } }, { "name": "keyword.other.truncation.stan", "match": "\\bT(?=\\s*\\[)" }, { "include": "#distributions" }, { "name": "keyword.other.special-functions.stan", "match": "\\b(print|reject)\\b" }, { "name": "support.function.integrate_ode.stan", "match": "\\b(integrate_ode_(?:bdf|rk45))\\b" }, { "name": "support.function.algebra_solver.stan", "match": "\\balgebra_solver\\b" }, { "include": "#functions" }, { "include": "#reserved" }, { "name": "invalid.illegal.variable", "match": "\\b([a-zA-Z0-9_]*__|[0-9_][A-Za-z0-9_]+|_)\\b" }, { "name": "variable.other.identifier.stan", "match": "\\b[A-Za-z][0-9A-Za-z_]*\\b" }, { "include": "#operators" }, { "name": "meta.delimiter.comma.stan", "match": "," }, { "begin": "{", "end": "}", "patterns": [ { "include": "$base" } ], "beginCaptures": { "0": { "name": "punctuation.section.block.begin.stan" } }, "endCaptures": { "0": { "name": "punctuation.section.block.end.stan" } } }, { "name": "meta.brace.curly.stan", "match": "[{}]" }, { "name": "meta.brace.square.stan", "match": "\\[|\\]" }, { "name": "meta.brace.round.stan", "match": "\\(|\\)" }, { "name": "punctuation.terminator.statement.stan", "match": "\\;" }, { "name": "punctuation.sampling.bar.stan", "match": "[|]" } ], "repository": { "comments": { "patterns": [ { "name": "meta.preprocessor.include.stan", "begin": "^\\s*((#)\\s*(include))\\b\\s*", "end": "\\s*(?=(?://|/\\*|#)|\\n|$)", "patterns": [ { "name": "string.quoted.double.include.stan", "begin": "\"", "end": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.stan" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.stan" } } }, { "name": "string.quoted.other.lt-gt.include.stan", "begin": "\u003c", "end": "\u003e", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.stan" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.stan" } } }, { "name": "string.quoted.single.include.stan", "begin": "'", "end": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.stan" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.stan" } } }, { "name": "string.quoted.other.noquote.include.stan", "match": ".+" } ], "beginCaptures": { "1": { "name": "keyword.control.directive.include.stan" }, "2": { "name": "punctuation.definition.directive.stan" }, "4": { "name": "string.quoted.other.include.stan" } } }, { "name": "comment.block.documentation.stan", "begin": "/\\*\\*(?!/)", "end": "\\*/", "patterns": [ { "include": "#docblock" } ], "captures": { "0": { "name": "punctuation.definition.comment.stan" } } }, { "name": "comment.block.stan", "begin": "/\\*", "end": "\\*/", "beginCaptures": { "0": { "name": "punctuation.definition.comment.stan" } }, "endCaptures": { "0": { "name": "punctuation.definition.comment.stan" } } }, { "name": "comment.line.double-slash.stan", "begin": "//", "end": "\\n", "beginCaptures": { "0": { "name": "punctuation.definition.comment.stan" } } }, { "name": "comment.line.number-sign.stan", "begin": "#", "end": "\\n", "beginCaptures": { "0": { "name": "punctuation.definition.comment.stan" } } } ] }, "distributions": { "patterns": [ { "name": "meta.sampling.stan", "match": "(~)(\\s*)(bernoulli|bernoulli_logit|beta|beta_binomial|binomial|binomial_logit|categorical|categorical_logit|cauchy|chi_square|dirichlet|double_exponential|exp_mod_normal|exponential|frechet|gamma|gaussian_dlm_obs|gumbel|hypergeometric|inv_chi_square|inv_gamma|inv_wishart|lkj_corr|lkj_corr_cholesky|logistic|lognormal|multi_gp|multi_gp_cholesky|multi_normal|multi_normal_cholesky|multi_normal_prec|multi_student_t|multinomial|neg_binomial|neg_binomial_2|neg_binomial_2_log|normal|ordered_logistic|pareto|pareto_type_2|poisson|poisson_log|rayleigh|scaled_inv_chi_square|skew_normal|student_t|uniform|von_mises|weibull|wiener|wishart)\\b", "captures": { "1": { "name": "keyword.operator.sampling.stan" }, "3": { "name": "support.function.distribution.stan" } } }, { "name": "meta.sampling.stan", "match": "(~)(\\s*)([A-Za-z][A-Za-z0-9_]*)\\b", "captures": { "1": { "name": "keyword.operator.sampling.stan" }, "3": { "name": "variable.other.distribution.stan" } } } ] }, "docblock": { "patterns": [ { "name": "storage.type.class.standoc", "match": "(?\u003c!\\w)@(param|return)\\b" } ] }, "functions": { "patterns": [ { "name": "invalid.deprecated.function.stan", "match": "\\b([A-Za-z0-9][A-Za-z0-9_]*_log|get_lp|if_else|increment_log_prob|integrate_ode|lkj_cov)\\b" }, { "name": "support.function.function.stan", "match": "\\b(Phi|Phi_approx|abs|acos|acosh|algebra_solver|append_array|append_col|append_row|asin|asinh|atan|atan2|atanh|bernoulli_cdf|bernoulli_lccdf|bernoulli_lcdf|bernoulli_logit_lpmf|bernoulli_logit_rng|bernoulli_lpmf|bernoulli_rng|bessel_first_kind|bessel_second_kind|beta_binomial_cdf|beta_binomial_lccdf|beta_binomial_lcdf|beta_binomial_lpmf|beta_binomial_rng|beta_cdf|beta_lccdf|beta_lcdf|beta_lpdf|beta_rng|binary_log_loss|binomial_cdf|binomial_coefficient_log|binomial_lccdf|binomial_lcdf|binomial_logit_lpmf|binomial_lpmf|binomial_rng|block|categorical_logit_lpmf|categorical_logit_rng|categorical_lpmf|categorical_rng|cauchy_cdf|cauchy_lccdf|cauchy_lcdf|cauchy_lpdf|cauchy_rng|cbrt|ceil|chi_square_cdf|chi_square_lccdf|chi_square_lcdf|chi_square_lpdf|chi_square_rng|cholesky_decompose|choose|col|cols|columns_dot_product|columns_dot_self|cos|cosh|cov_exp_quad|crossprod|csr_extract_u|csr_extract_v|csr_extract_w|csr_matrix_times_vector|csr_to_dense_matrix|cumulative_sum|determinant|diag_matrix|diag_post_multiply|diag_pre_multiply|diagonal|digamma|dims|dirichlet_lpdf|dirichlet_rng|distance|dot_product|dot_self|double_exponential_cdf|double_exponential_lccdf|double_exponential_lcdf|double_exponential_lpdf|double_exponential_rng|e|eigenvalues_sym|eigenvectors_sym|erf|erfc|exp|exp2|exp_mod_normal_cdf|exp_mod_normal_lccdf|exp_mod_normal_lcdf|exp_mod_normal_lpdf|exp_mod_normal_rng|expm1|exponential_cdf|exponential_lccdf|exponential_lcdf|exponential_lpdf|exponential_rng|fabs|falling_factorial|fdim|floor|fma|fmax|fmin|fmod|frechet_cdf|frechet_lccdf|frechet_lcdf|frechet_lpdf|frechet_rng|gamma_cdf|gamma_lccdf|gamma_lcdf|gamma_lpdf|gamma_p|gamma_q|gamma_rng|gaussian_dlm_obs_lpdf|get_lp|gumbel_cdf|gumbel_lccdf|gumbel_lcdf|gumbel_lpdf|gumbel_rng|head|hypergeometric_lpmf|hypergeometric_rng|hypot|inc_beta|int_step|integrate_ode|integrate_ode_bdf|integrate_ode_rk45|inv|inv_Phi|inv_chi_square_cdf|inv_chi_square_lccdf|inv_chi_square_lcdf|inv_chi_square_lpdf|inv_chi_square_rng|inv_cloglog|inv_gamma_cdf|inv_gamma_lccdf|inv_gamma_lcdf|inv_gamma_lpdf|inv_gamma_rng|inv_logit|inv_sqrt|inv_square|inv_wishart_lpdf|inv_wishart_rng|inverse|inverse_spd|is_inf|is_nan|lbeta|lchoose|lgamma|lkj_corr_cholesky_lpdf|lkj_corr_cholesky_rng|lkj_corr_lpdf|lkj_corr_rng|lmgamma|lmultiply|log|log10|log1m|log1m_exp|log1m_inv_logit|log1p|log1p_exp|log2|log_determinant|log_diff_exp|log_falling_factorial|log_inv_logit|log_mix|log_rising_factorial|log_softmax|log_sum_exp|logistic_cdf|logistic_lccdf|logistic_lcdf|logistic_lpdf|logistic_rng|logit|lognormal_cdf|lognormal_lccdf|lognormal_lcdf|lognormal_lpdf|lognormal_rng|machine_precision|matrix_exp|max|mdivide_left_spd|mdivide_left_tri_low|mdivide_right_spd|mdivide_right_tri_low|mean|min|modified_bessel_first_kind|modified_bessel_second_kind|multi_gp_cholesky_lpdf|multi_gp_lpdf|multi_normal_cholesky_lpdf|multi_normal_cholesky_rng|multi_normal_lpdf|multi_normal_prec_lpdf|multi_normal_rng|multi_student_t_lpdf|multi_student_t_rng|multinomial_lpmf|multinomial_rng|multiply_log|multiply_lower_tri_self_transpose|neg_binomial_2_cdf|neg_binomial_2_lccdf|neg_binomial_2_lcdf|neg_binomial_2_log_lpmf|neg_binomial_2_log_rng|neg_binomial_2_lpmf|neg_binomial_2_rng|neg_binomial_cdf|neg_binomial_lccdf|neg_binomial_lcdf|neg_binomial_lpmf|neg_binomial_rng|negative_infinity|normal_cdf|normal_lccdf|normal_lcdf|normal_lpdf|normal_rng|not_a_number|num_elements|ordered_logistic_lpmf|ordered_logistic_rng|owens_t|pareto_cdf|pareto_lccdf|pareto_lcdf|pareto_lpdf|pareto_rng|pareto_type_2_cdf|pareto_type_2_lccdf|pareto_type_2_lcdf|pareto_type_2_lpdf|pareto_type_2_rng|pi|poisson_cdf|poisson_lccdf|poisson_lcdf|poisson_log_lpmf|poisson_log_rng|poisson_lpmf|poisson_rng|positive_infinity|pow|prod|qr_Q|qr_R|quad_form|quad_form_diag|quad_form_sym|rank|rayleigh_cdf|rayleigh_lccdf|rayleigh_lcdf|rayleigh_lpdf|rayleigh_rng|rep_array|rep_matrix|rep_row_vector|rep_vector|rising_factorial|round|row|rows|rows_dot_product|rows_dot_self|scaled_inv_chi_square_cdf|scaled_inv_chi_square_lccdf|scaled_inv_chi_square_lcdf|scaled_inv_chi_square_lpdf|scaled_inv_chi_square_rng|sd|segment|sin|singular_values|sinh|size|skew_normal_cdf|skew_normal_lccdf|skew_normal_lcdf|skew_normal_lpdf|skew_normal_rng|softmax|sort_asc|sort_desc|sort_indices_asc|sort_indices_desc|sqrt|sqrt2|square|squared_distance|step|student_t_cdf|student_t_lccdf|student_t_lcdf|student_t_lpdf|student_t_rng|sub_col|sub_row|sum|tail|tan|tanh|target|tcrossprod|tgamma|to_array_1d|to_array_2d|to_matrix|to_row_vector|to_vector|trace|trace_gen_quad_form|trace_quad_form|trigamma|trunc|uniform_cdf|uniform_lccdf|uniform_lcdf|uniform_lpdf|uniform_rng|variance|von_mises_lpdf|von_mises_rng|weibull_cdf|weibull_lccdf|weibull_lcdf|weibull_lpdf|weibull_rng|wiener_lpdf|wishart_lpdf|wishart_rng)\\b" } ] }, "numbers": { "patterns": [ { "name": "constant.numeric.real.stan", "match": "(?x)\n(\n[0-9]+\\.[0-9]*([eE][+-]?[0-9]+)?\n|\n\\.[0-9]+([eE][+-]?[0-9]+)?\n|\n[0-9]+[eE][+-]?[0-9]+\n)" }, { "name": "constant.numeric.integer.stan", "match": "[0-9]+(?=[^A-Za-z_])" } ] }, "operators": { "patterns": [ { "name": "invalid.deprecated.assignment.stan", "match": "\u003c-" }, { "name": "keyword.operator.colon.stan", "match": ":" }, { "name": "keyword.operator.conditional.stan", "match": "[?]" }, { "name": "keyword.operator.logical.stan", "match": "[|]{2}|\u0026\u0026" }, { "name": "keyword.operator.comparison.stan", "match": "==|!=|\u003c=?|\u003e=?" }, { "name": "keyword.operator.logical.stan", "match": "!" }, { "name": "keyword.operator.assignment.stan", "match": "[+-]=|\\.?[*/]=|=" }, { "name": "keyword.operator.arithmetic.stan", "match": "\\+|-|\\.?\\*|\\.?/|%|\\\\|\\^|'" } ] }, "reserved": { "patterns": [ { "name": "invalid.illegal.reserved.stan", "match": "\\b(alignas|alignof|and|and_eq|asm|auto|bitand|bitor|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|false|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|not|not_eq|nullptr|operator|or|or_eq|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|true|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while|xor|xor_eq)\\b" }, { "name": "invalid.illegal.reserved.stan", "match": "\\b(for|in|while|repeat|until|if|then|else|true|false|var|fvar|STAN_MAJOR|STAN_MINOR|STAN_PATCH|STAN_MATH_MAJOR|STAN_MATH_MINOR|STAN_MATH_PATCH)\\b" } ] }, "strings": { "patterns": [ { "name": "string.quoted.double.stan", "begin": "\"", "end": "\"", "patterns": [ { "name": "invalid.illegal.string.stan", "match": "[^ a-zA-Z0-9~@#$%^\u0026*_'`\\-+={}\\[\\]()\u003c\u003e|/!?.,;:\"]+" } ], "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.stan" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.stan" } } } ] } } }