This is an automated email from the ASF dual-hosted git repository. lkishalmi pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/netbeans.git
commit 95f381fadc5d046ef7ab416617d95620ea0efa08 Author: Laszlo Kishalmi <[email protected]> AuthorDate: Mon Aug 29 21:49:54 2022 -0700 Report SyntaxErrors from TomlParser --- ide/languages.toml/nbproject/project.xml | 18 ++++ .../modules/languages/toml/TomlLanguage.java | 6 ++ .../modules/languages/toml/TomlParser.java | 103 +++++++++++++++++++++ 3 files changed, 127 insertions(+) diff --git a/ide/languages.toml/nbproject/project.xml b/ide/languages.toml/nbproject/project.xml index eb8eee8622..1afa2c5bb4 100644 --- a/ide/languages.toml/nbproject/project.xml +++ b/ide/languages.toml/nbproject/project.xml @@ -59,6 +59,15 @@ <specification-version>2.74</specification-version> </run-dependency> </dependency> + <dependency> + <code-name-base>org.netbeans.modules.csl.types</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>1</release-version> + <specification-version>1.17</specification-version> + </run-dependency> + </dependency> <dependency> <code-name-base>org.netbeans.modules.editor.completion</code-name-base> <build-prerequisite/> @@ -103,6 +112,15 @@ <specification-version>1.80</specification-version> </run-dependency> </dependency> + <dependency> + <code-name-base>org.netbeans.modules.parsing.api</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>1</release-version> + <specification-version>9.24</specification-version> + </run-dependency> + </dependency> <dependency> <code-name-base>org.openide.awt</code-name-base> <build-prerequisite/> diff --git a/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlLanguage.java b/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlLanguage.java index 8eca474076..24576dcc01 100644 --- a/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlLanguage.java +++ b/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlLanguage.java @@ -23,6 +23,7 @@ import org.netbeans.core.spi.multiview.MultiViewElement; import org.netbeans.core.spi.multiview.text.MultiViewEditorElement; import org.netbeans.modules.csl.spi.DefaultLanguageConfig; import org.netbeans.modules.csl.spi.LanguageRegistration; +import org.netbeans.modules.parsing.spi.Parser; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; import org.openide.awt.ActionReferences; @@ -119,6 +120,11 @@ public class TomlLanguage extends DefaultLanguageConfig { return "#"; // NOI18N } + @Override + public Parser getParser() { + return new TomlParser(); + } + @NbBundle.Messages("Source=&Source") @MultiViewElement.Registration( displayName = "#Source", diff --git a/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlParser.java b/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlParser.java new file mode 100644 index 0000000000..12bf61a819 --- /dev/null +++ b/ide/languages.toml/src/org/netbeans/modules/languages/toml/TomlParser.java @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.netbeans.modules.languages.toml; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.event.ChangeListener; +import org.antlr.v4.runtime.BaseErrorListener; +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.RecognitionException; +import org.antlr.v4.runtime.Recognizer; +import org.antlr.v4.runtime.Token; +import org.netbeans.modules.csl.api.Error; +import org.netbeans.modules.csl.api.Severity; +import org.netbeans.modules.csl.spi.DefaultError; +import org.netbeans.modules.csl.spi.ParserResult; +import org.netbeans.modules.parsing.api.Snapshot; +import org.netbeans.modules.parsing.api.Task; +import org.netbeans.modules.parsing.spi.ParseException; +import org.netbeans.modules.parsing.spi.Parser; +import org.netbeans.modules.parsing.spi.SourceModificationEvent; + +/** + * + * @author Laszlo Kishalmi + */ +public class TomlParser extends Parser{ + + private Result lastResult; + + @Override + public void parse(Snapshot snapshot, Task task, SourceModificationEvent event) throws ParseException { + org.tomlj.internal.TomlLexer lexer = new org.tomlj.internal.TomlLexer(CharStreams.fromString(String.valueOf(snapshot.getText()))); + org.tomlj.internal.TomlParser parser = new org.tomlj.internal.TomlParser(new CommonTokenStream(lexer)); + final List<DefaultError> errors = new ArrayList<>(); + parser.addErrorListener(new BaseErrorListener() { + @Override + public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { + int errorBegin = 0; + int errorEnd = 0; + if (offendingSymbol instanceof Token) { + Token token = (Token) offendingSymbol; + errorBegin = token.getStartIndex(); + errorEnd = token.getStopIndex() + 1; + } + errors.add(new DefaultError(null, msg, null, snapshot.getSource().getFileObject(), errorBegin, errorEnd, Severity.ERROR)); + } + + }); + parser.toml(); + lastResult = new TomlParser.Result(snapshot, errors); + } + + @Override + public Result getResult(Task task) throws ParseException { + return lastResult; + } + + @Override + public void addChangeListener(ChangeListener changeListener) { + } + + @Override + public void removeChangeListener(ChangeListener changeListener) { + } + + public static class Result extends ParserResult { + + private final List<? extends Error> errors; + + public Result(Snapshot snapshot, List<? extends Error> errors) { + super(snapshot); + this.errors = errors; + } + + @Override + public List<? extends Error> getDiagnostics() { + return errors; + } + + @Override + protected void invalidate() { + } + + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected] For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists
