df_ls_structure 0.3.0-rc.1

A language server for Dwarf Fortress RAW files
Documentation
use df_ls_core::{AllowEmpty, ReferenceTo};
use df_ls_lexical_analysis::test_utils::LexerTestBuilder;
use df_ls_structure::*;
use df_ls_syntax_analysis::test_utils::SyntaxTestBuilder;

#[test]
fn simple_test() {
    SyntaxTestBuilder::from_lexer_test_builder(
        LexerTestBuilder::test_source(
            "language_words

            [OBJECT:LANGUAGE]

            [WORD:ABBEY]
                [NOUN:abbey:abbeys]
                    [FRONT_COMPOUND_NOUN_SING]
                    [REAR_COMPOUND_NOUN_SING]
                    [THE_NOUN_SING]
                    [REAR_COMPOUND_NOUN_PLUR]
                    [OF_NOUN_PLUR]

            [WORD:ACE]
                [NOUN:ace:aces]
                    [FRONT_COMPOUND_NOUN_SING]
                    [REAR_COMPOUND_NOUN_SING]
                    [THE_NOUN_SING]
                    [REAR_COMPOUND_NOUN_PLUR]
                    [OF_NOUN_PLUR]
                [ADJ:ace]
                    [ADJ_DIST:1]
                    [FRONT_COMPOUND_ADJ]
                    [THE_COMPOUND_ADJ]
            ",
        )
        .add_test_lexer_diagnostics_codes(vec![])
        .add_test_lexer_diagnostics_ranges(vec![]),
    )
    .add_test_structure(DFRaw {
        header: "language_words".to_owned(),
        token_structure: vec![ObjectToken {
            language_tokens: vec![
                LanguageToken::WordToken(WordToken {
                    reference: Some(ReferenceTo::new("ABBEY".to_owned())),
                    nouns: vec![NounToken {
                        words: Some(("abbey".to_owned(), AllowEmpty::Some("abbeys".to_owned()))),
                        front_compound_noun_sing: Some(()),
                        read_compound_noun_sing: Some(()),
                        the_compound_noun_sing: None,
                        the_noun_sing: Some(()),
                        of_noun_sing: None,
                        front_compound_noun_plur: None,
                        read_compound_noun_plur: Some(()),
                        the_compound_noun_plur: None,
                        the_noun_plur: None,
                        of_noun_plur: Some(()),
                    }],
                    adj: vec![],
                    verb: vec![],
                    prefix: vec![],
                }),
                LanguageToken::WordToken(WordToken {
                    reference: Some(ReferenceTo::new("ACE".to_owned())),
                    nouns: vec![NounToken {
                        words: Some(("ace".to_owned(), AllowEmpty::Some("aces".to_owned()))),
                        front_compound_noun_sing: Some(()),
                        read_compound_noun_sing: Some(()),
                        the_compound_noun_sing: None,
                        the_noun_sing: Some(()),
                        of_noun_sing: None,
                        front_compound_noun_plur: None,
                        read_compound_noun_plur: Some(()),
                        the_compound_noun_plur: None,
                        the_noun_plur: None,
                        of_noun_plur: Some(()),
                    }],
                    adj: vec![AdjToken {
                        words: Some("ace".to_owned()),
                        adj_dist: Some(1),
                        front_compound_adj: Some(()),
                        the_compound_adj: Some(()),
                        rear_compound_adj: None,
                    }],
                    verb: vec![],
                    prefix: vec![],
                }),
            ],
            ..Default::default()
        }],
    })
    .add_test_syntax_diagnostics_codes(vec![])
    .add_test_syntax_diagnostics_ranges(vec![])
    .run_test();
}