// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // // and licensed `mit`. // See for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { extensions: ['.stan'], names: ['stan'], patterns: [ { captures: {1: {name: 'entity.name.type.stan'}}, match: '\\b(functions|data|transformed\\s+data|parameters|transformed\\s+parameters|model|generated\\s+quantities)\\b\\s*\\{' }, {include: '#comments'}, {include: '#strings'}, {include: '#numbers'}, {include: '#types'}, {include: '#keywords'}, {include: '#distributions'}, {include: '#functions'}, {include: '#variables'}, {include: '#operators'}, {include: '#punctuation'} ], repository: { comments: { patterns: [ { begin: '^\\s*((#)\\s*(include))\\b\\s*', beginCaptures: { 1: {name: 'keyword.control.directive.include.stan'}, 2: {name: 'punctuation.definition.directive.stan'} }, end: '\\s*(?=(?://|/\\*|#)|\\n|$)', name: 'meta.preprocessor.include.stan', patterns: [ { begin: '["<]?', beginCaptures: { 0: {name: 'punctuation.definition.string.begin.stan'} }, end: '[">]?\\s', endCaptures: { 0: {name: 'punctuation.definition.string.end.stan'} }, name: 'string.quoted.double.include.stan' } ] }, { begin: '/\\*\\*(?!/)', captures: {0: {name: 'punctuation.definition.comment.stan'}}, end: '\\*/', name: 'comment.block.documentation.stan', patterns: [{include: '#docblock'}] }, { begin: '/\\*', beginCaptures: {0: {name: 'punctuation.definition.comment.stan'}}, end: '\\*/', endCaptures: {0: {name: 'punctuation.definition.comment.stan'}}, name: 'comment.block.stan' }, { begin: '//', beginCaptures: {0: {name: 'punctuation.definition.comment.stan'}}, end: '\\n', name: 'comment.line.double-slash.stan' }, { begin: '#', beginCaptures: {0: {name: 'punctuation.definition.comment.stan'}}, end: '\\n', name: 'comment.line.number-sign.stan' } ] }, distributions: { patterns: [ { captures: { 1: {name: 'keyword.operator.sampling.stan'}, 3: {name: 'support.function.distribution.stan'} }, match: '(~)(\\s*)(bernoulli|bernoulli_logit|bernoulli_logit_glm|beta|beta_binomial|beta_neg_binomial|binomial|binomial_logit|binomial_logit_glm|categorical|categorical_logit|categorical_logit_glm|cauchy|chi_square|dirichlet|dirichlet_multinomial|discrete_range|double_exponential|exp_mod_normal|exponential|frechet|gamma|gaussian_dlm_obs|gumbel|hypergeometric|inv_chi_square|inv_gamma|inv_wishart|inv_wishart_cholesky|lkj_corr|lkj_corr_cholesky|logistic|loglogistic|lognormal|multi_gp|multi_gp_cholesky|multi_normal|multi_normal_cholesky|multi_normal_prec|multi_student_t|multi_student_t_cholesky|multinomial|multinomial_logit|neg_binomial|neg_binomial_2|neg_binomial_2_log|neg_binomial_2_log_glm|normal|normal_id_glm|ordered_logistic|ordered_logistic_glm|ordered_probit|pareto|pareto_type_2|poisson|poisson_log|poisson_log_glm|rayleigh|scaled_inv_chi_square|skew_double_exponential|skew_normal|std_normal|student_t|uniform|von_mises|weibull|wiener|wishart|wishart_cholesky)\\b' } ] }, docblock: { patterns: [ { match: '(?=?', name: 'keyword.operator.comparison.stan'}, {match: '!', name: 'keyword.operator.logical.stan'}, { match: "\\+|-|\\.?\\*|\\.?/|%|\\\\|\\^|'", name: 'keyword.operator.arithmetic.stan' }, {match: '[+-]=|\\.?[*/]=|=', name: 'keyword.operator.assignment.stan'}, { match: "\\+|-|\\.?\\*|\\.?/|%|\\\\|\\^|'", name: 'keyword.operator.arithmetic.stan' } ] }, punctuation: { patterns: [ {match: ',', name: 'meta.delimiter.comma.stan'}, { begin: '{', beginCaptures: {0: {name: 'punctuation.section.block.begin.stan'}}, end: '}', endCaptures: {0: {name: 'punctuation.section.block.end.stan'}}, patterns: [{include: '$base'}] }, {match: '[{}]', 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'} ] }, strings: { patterns: [ { begin: '"', beginCaptures: { 0: {name: 'punctuation.definition.string.begin.stan'} }, end: '"', endCaptures: {0: {name: 'punctuation.definition.string.end.stan'}}, name: 'string.quoted.double.stan', patterns: [ { match: '[^ a-zA-Z0-9~@#$%^&*_\'`\\-+={}\\[\\]()<>|/!?.,;:"]+', name: 'invalid.illegal.string.stan' } ] } ] }, types: { patterns: [ { match: '\\b(int|real|data|complex|array|tuple|vector|simplex|unit_vector|sum_to_zero_vector|sum_to_zero_matrix|ordered|positive_ordered|row_vector|matrix|complex_vector|complex_matrix|complex_row_vector|corr_matrix|cov_matrix|cholesky_factor_cov|cholesky_factor_corr|column_stochastic_matrix|row_stochastic_matrix|void)\\b', name: 'storage.type.stan' } ] }, variables: { patterns: [ { match: '\\b(for|in|while|repeat|until|if|then|else|true|false|var|struct|typedef|export|auto|extern|var|static)\\b', name: 'invalid.illegal.reserved.stan' }, { match: '\\b([a-zA-Z0-9_]*__|[0-9_][A-Za-z0-9_]+|_)\\b', name: 'invalid.illegal.variable' }, {match: '\\b[A-Za-z][0-9A-Za-z_]*\\b'} ] } }, scopeName: 'source.stan' } export default grammar