<commit_before><!--
  ~ Copyright (c) 2017. tangzx(<EMAIL>)
  ~
  ~ Licensed 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.
  -->

<idea-plugin>
    <id>com.tang</id>
    <name>EmmyLua</name>
    <version>1.1.9</version>
    <vendor email="<EMAIL>">tangzx</vendor>
    <category>Custom Languages</category>
    <description><![CDATA[
    Support for Lua programming language.<br>
    <p><a href="https://github.com/tangzx/IntelliJ-EmmyLua">Source Code</a> | <a href="https://gitter.im/emmylua/Lobby?utm_source=share-link&utm_medium=link&utm_campaign=share-link">Gitter</a> | <a href="https://tangzx.github.io/emmydoc/donate.html">Donate</a></p> | <a href="https://tangzx.github.io/emmydoc">Doc</a></p>
    Features:
    <ul>
        <li>Syntax highlighting</li>
        <ul>
            <li>Highlight global value</li>
            <li>Highlight local/param value</li>
            <li>Highlight up value</li>
        </ul>
        <li>Code completion</li>
        <ul>
            <li>Keyword completion</li>
            <li>Basic completion</li>
            <li>Type inferred based completion</li>
        </ul>
        <li>Debugger</li>
        <ul>
            <li>Attach Debugger(Windows only)</li>
            <li>Remote Debugger(Mobdebug.lua)</li>
        </ul>
        <li>Lua 5.3 support</li>
        <li>Find usages</li>
        <li>Rename</li>
        <li>Go to definition</li>
        <li>Go to symbol</li>
        <li>Go to class</li>
        <li>Go to file</li>
        <li>Parameter name hints</li>
        <li>Comment based type/class annotation</li>
        <li>Structure view</li>
        <li>Comment in/out</li>
        <li>Color settings page</li>
        <li>Method override line marker</li>
        <li>Quick Documentation</li>
        <li>Live templates</li>
        <li>Postfix completion templates</li>
        <li>Code formatter</li>
        <li>Code intentions</li>
        <li>Code inspections</li>
        <li>Lua Standard Library/API</li>
        <li>Region folding</li>
        <li>Lua Check Tool</li>
    </ul>
    <p>中国朋友可以加QQ群29850775交流及反馈BUG</p>
    ]]></description>

    <change-notes><![CDATA[
    <strong>1.1.9</strong>
    <li>[UPDATE] Compatible with IDEA 2017.3(173)</li>
    <li>[NEW] Add new annotation: @overload, used for mark overload functions (@optional is obsolete)</li>
    <li>[NEW] Add new annotation: @language, used for inject language to lua string</li>
    <li>[NEW] Add new inspection: Show warning for duplicated local declaration</li>
    <li>[NEW] Show method separators</li>
    <li>[NEW] Show local variable type hints</li>
    <li>[NEW] Show parameter type hints</li>
    <li>[NEW] Show function return type hints</li>
    <li>[NEW] Add new postfix template "if_not"</li>
    <li>[IMPROVE] Infer type from constructor call (settings/Languages.../EmmyLua)</li>
    <li>[IMPROVE] Add auto completion and references for label(Lua 5.3)</li>
    <li>[IMPROVE] You can toggle on/off 'smart enter' (settings/Languages.../EmmyLua)</li>
    <li>[IMPROVE] You can toggle on/off 'show words in file' (settings/Languages.../EmmyLua)</li>
    <li>[FIX] Support forward declaration local-function</li>
    <li>[FIX] Crash when type --[ at EOF</li>
    <li>[FIX] Fix some bugs</li>
    <a href="https://tangzx.github.io/emmydoc/changelogs.html">Full changelog</a>
    ]]>
    </change-notes>

    <!-- please see https://confluence.jetbrains.com/display/IDEADEV/Build+Number+Ranges for description -->
    <idea-version since-build="171" until-build="173.*"/>

    <!-- please see https://confluence.jetbrains.com/display/IDEADEV/Plugin+Compatibility+with+IntelliJ+Platform+Products
         on how to target different products -->
    <depends>com.intellij.modules.lang</depends>

    <extensions defaultExtensionNs="com.intellij">
        <!--<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>-->

        <!--LuaCheck-->
        <toolWindow id="LuaCheck"
                    anchor="bottom"
                    icon="/icons/lua.png"
                    factoryClass="com.tang.intellij.lua.luacheck.LuaCheckToolWindowFactory"
                    canCloseContents="true"/>
        <projectService serviceImplementation="com.tang.intellij.lua.luacheck.LuaCheckView"
                        serviceInterface="com.tang.intellij.lua.luacheck.LuaCheckView"/>
        <applicationService serviceInterface="com.tang.intellij.lua.luacheck.LuaCheckSettings"
                            serviceImplementation="com.tang.intellij.lua.luacheck.LuaCheckSettings"/>

        <!--CreateFromTemplate-->
        <createFromTemplateHandler implementation="com.tang.intellij.lua.actions.LuaCreateFromTemplateHandler"/>

        <!--module and library-->
        <moduleType id="LUA_MODULE" implementationClass="com.tang.intellij.lua.project.LuaModuleType"/>
        <moduleConfigurationEditorProvider implementation="com.tang.intellij.lua.project.LuaModuleConfigurationEditorProvider"/>
        <sdkType implementation="com.tang.intellij.lua.project.LuaSdkType"/>
        <library.type implementation="com.tang.intellij.lua.project.LuaLibraryType"/>
        <indexedRootsProvider implementation="com.tang.intellij.lua.project.LuaPredefinedLibraryProvider"/>

        <!--lang-->
        <lang.foldingBuilder language="Lua" implementationClass="com.tang.intellij.lua.folding.LuaFoldingBuilder"/>
        <lang.braceMatcher language="Lua" implementationClass="com.tang.intellij.lua.braces.LuaBraceMatcher"/>
        <lang.syntaxHighlighterFactory language="Lua" implementationClass="com.tang.intellij.lua.highlighting.LuaSyntaxHighlighterFactory"/>
        <lang.parserDefinition language="Lua" implementationClass="com.tang.intellij.lua.lang.LuaParserDefinition"/>
        <lang.documentationProvider language="Lua" implementationClass="com.tang.intellij.lua.documentation.LuaDocumentationProvider"/>
        <lang.psiStructureViewFactory language="Lua" implementationClass="com.tang.intellij.lua.editor.LuaStructureViewFactory"/>
        <lang.commenter language="Lua" implementationClass="com.tang.intellij.lua.editor.LuaCommenter"/>
        <lang.quoteHandler language="Lua" implementationClass="com.tang.intellij.lua.codeInsight.editorActions.LuaQuoteHandler"/>
        <highlightErrorFilter implementation="com.tang.intellij.lua.highlighting.LuaHighlightErrorFilter"/>
        <iconProvider implementation="com.tang.intellij.lua.editor.LuaIconProvider"/>
        <fileTypeFactory implementation="com.tang.intellij.lua.lang.LuaFileTypeFactory"/>
        <psi.referenceContributor language="Lua" implementation="com.tang.intellij.lua.reference.LuaReferenceContributor"/>
        <languageInjector implementation="com.tang.intellij.lua.lang.LuaLanguageInjector"/>

        <spellchecker.support implementationClass="com.tang.intellij.lua.editor.LuaSpellcheckingStrategy" language="Lua"/>

        <!--usage-->
        <lang.findUsagesProvider language="Lua" implementationClass="com.tang.intellij.lua.usages.LuaFindUsagesProvider"/>
        <findUsagesHandlerFactory implementation="com.tang.intellij.lua.usages.LuaFindUsagesHandlerFactory"/>
        <usageTypeProvider implementation="com.tang.intellij.lua.usages.UsageTypeProvider"/>

        <!--refactor-->
        <lang.refactoringSupport language="Lua" implementationClass="com.tang.intellij.lua.editor.LuaRefactoringSupportProvider"/>
        <nameSuggestionProvider implementation="com.tang.intellij.lua.editor.LuaNameSuggestionProvider"/>
        <qualifiedNameProvider implementation="com.tang.intellij.lua.editor.LuaQualifiedNameProvider"/>
        <renamePsiElementProcessor implementation="com.tang.intellij.lua.refactoring.rename.RenameLuaMethodProcessor"/>
        <inlineActionHandler implementation="com.tang.intellij.lua.refactoring.inline.LuaInlineActionHandler"/>
        <moveFileHandler implementation="com.tang.intellij.lua.refactoring.move.LuaMoveFileHandler"/>

        <!--navigate-->
        <gotoClassContributor implementation="com.tang.intellij.lua.editor.LuaClassNavigationContributor"/>
        <gotoSymbolContributor implementation="com.tang.intellij.lua.editor.LuaSymbolNavigationContributor"/>
        <breadcrumbsInfoProvider implementation="com.tang.intellij.lua.editor.LuaBreadcrumbsProvider"/>

        <!--completion-->
        <completion.contributor language="Lua" implementationClass="com.tang.intellij.lua.editor.completion.LuaDocCompletionContributor"/>
        <completion.contributor language="Lua" implementationClass="com.tang.intellij.lua.editor.completion.LuaCompletionContributor"/>

        <!--codeInsight-->
        <codeInsight.lineMarkerProvider language="Lua" implementationClass="com.tang.intellij.lua.codeInsight.LuaLineMarkerProvider"/>
        <codeInsight.parameterNameHints language="Lua" implementationClass="com.tang.intellij.lua.codeInsight.LuaParameterHintsProvider"/>
        <codeInsight.parameterInfo language="Lua" implementationClass="com.tang.intellij.lua.codeInsight.LuaParameterInfoHandler"/>
        <codeInsight.template.postfixTemplateProvider language="Lua" implementationClass="com.tang.intellij.lua.codeInsight.postfix.LuaPostfixTemplateProvider"/>
        <highlightVisitor implementation="com.tang.intellij.lua.codeInsight.LuaRainbowVisitor"/>
        <highlightUsagesHandlerFactory implementation="com.tang.intellij.lua.codeInsight.highlighting.LuaHighlightUsagesHandlerFactory"/>

        <!--editor handlers-->
        <enterHandlerDelegate implementation="com.tang.intellij.lua.editor.LuaEnterAfterUnmatchedBraceHandler" />
        <enterHandlerDelegate implementation="com.tang.intellij.lua.editor.LuaEnterInDocHandler"/>
        <enterHandlerDelegate implementation="com.tang.intellij.lua.editor.LuaEnterBetweenBracesHandler"/>
        <enterHandlerDelegate implementation="com.tang.intellij.lua.editor.LuaEnterBetweenRangeBlockHandler"/>
        <backspaceHandlerDelegate implementation="com.tang.intellij.lua.codeInsight.LuaBackspaceHandlerDelegate"/>
        <typedHandler implementation="com.tang.intellij.lua.editor.LuaTypedHandler"/>
        <typedHandler implementation="com.tang.intellij.lua.editor.LuaAutoIndentHandler"/>

        <!--highlighting-->
        <annotator language="Lua" implementationClass="com.tang.intellij.lua.annotator.LuaAnnotator" />
        <problemFileHighlightFilter implementation="com.tang.intellij.lua.highlighting.LuaProblemFileHighlightFilter"/>
        <colorSettingsPage implementation="com.tang.intellij.lua.editor.LuaColorSettingsPage"/>
        <additionalTextAttributes scheme="Default" file="colorSchemes/Default.xml"/>
        <additionalTextAttributes scheme="Darcula" file="colorSchemes/Darcula.xml"/>

        <!--stub & index-->
        <stubElementTypeHolder class="com.tang.intellij.lua.psi.LuaTypes" />
        <stubElementTypeHolder class="com.tang.intellij.lua.comment.psi.LuaDocTypes"/>
        <stubIndex implementation="com.tang.intellij.lua.stubs.index.LuaClassIndex"/>
        <stubIndex implementation="com.tang.intellij.lua.stubs.index.LuaGlobalIndex"/>
        <stubIndex implementation="com.tang.intellij.lua.stubs.index.LuaClassMemberIndex"/>
        <stubIndex implementation="com.tang.intellij.lua.stubs.index.LuaShortNameIndex"/>
        <stubIndex implementation="com.tang.intellij.lua.stubs.index.LuaSuperClassIndex"/>

        <!--surround descriptors-->
        <lang.surroundDescriptor language="Lua" implementationClass="com.tang.intellij.lua.editor.surroundWith.LuaSurroundDescriptor"/>

        <!-- formatting & code style -->
        <lang.formatter language="Lua" implementationClass="com.tang.intellij.lua.editor.formatter.LuaFormattingModelBuilder"/>
        <codeStyleSettingsProvider implementation="com.tang.intellij.lua.editor.formatter.LuaCodeStyleSettingsProvider"/>
        <langCodeStyleSettingsProvider implementation="com.tang.intellij.lua.editor.formatter.LuaLanguageCodeStyleSettingsProvider"/>

        <!-- runner & debugger -->
        <runConfigurationProducer implementation="com.tang.intellij.lua.debugger.LuaRunConfigurationProducer"/>
        <programRunner implementation="com.tang.intellij.lua.debugger.remote.LuaMobDebuggerRunner"/>
        <configurationType implementation="com.tang.intellij.lua.debugger.remote.LuaMobConfigurationType"/>
        <programRunner implementation="com.tang.intellij.lua.debugger.app.LuaAppRunner"/>
        <configurationType implementation="com.tang.intellij.lua.debugger.app.LuaAppConfigurationType"/>
        <xdebugger.breakpointType implementation="com.tang.intellij.lua.debugger.LuaLineBreakpointType"/>
        <xdebugger.localAttachDebuggerProvider implementation="com.tang.intellij.lua.debugger.attach.LuaLocalAttachDebuggerProvider"/>

        <!--templates-->
        <defaultLiveTemplatesProvider implementation="com.tang.intellij.lua.codeInsight.LuaLiveTemplatesProvider"/>
        <liveTemplateContext implementation="com.tang.intellij.lua.codeInsight.LuaCodeTemplateContextType"/>
        <liveTemplateContext implementation="com.tang.intellij.lua.codeInsight.LuaIfContextType"/>
        <liveTemplateMacro implementation="com.tang.intellij.lua.codeInsight.template.macro.SuggestFirstLuaVarNameMacro"/>

        <!--lua settings-->
        <applicationService serviceInterface="com.tang.intellij.lua.project.LuaSettings"
                            serviceImplementation="com.tang.intellij.lua.project.LuaSettings"/>
        <applicationConfigurable groupId="language"
                                 displayName="EmmyLua"
                                 id="preferences.Lua"
                                 instance="com.tang.intellij.lua.project.LuaSettingsPanel">
            <configurable instance="com.tang.intellij.lua.luacheck.LuaCheckSettingsPanel"
                          displayName="LuaCheck"
                          id="preferences.LuaCheck"/>
        </applicationConfigurable>

        <!--intentions-->
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.CreateParameterAnnotationIntention</className>
            <descriptionDirectoryName>CreateParameterAnnotationIntention</descriptionDirectoryName>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.CreateTypeAnnotationIntention</className>
            <descriptionDirectoryName>CreateTypeAnnotationIntention</descriptionDirectoryName>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.CreateFunctionReturnAnnotationIntention</className>
            <descriptionDirectoryName>CreateFunctionReturnAnnotationIntention</descriptionDirectoryName>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.CreateFunctionDocIntention</className>
            <descriptionDirectoryName>CreateFunctionDocIntention</descriptionDirectoryName>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.CreateFieldFromParameterIntention</className>
            <descriptionDirectoryName>CreateFieldFromParameterIntention</descriptionDirectoryName>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.CreateMethodIntention</className>
            <descriptionDirectoryName>CreateMethodIntention</descriptionDirectoryName>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.AppendCallParenIntention</className>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.RemoveCallParenIntention</className>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.InvertBooleanIntention</className>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.SetVisibilityIntention</className>
        </intentionAction>

        <localInspection
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.DuplicateClassDeclaration"
                displayName="Duplicate Class"
                enabledByDefault="true"
                level="ERROR"
                groupName="Lua"/>
        <localInspection
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.SimplifyLocalAssignment"
                displayName="Local assign can be simpler"
                enabledByDefault="true"
                groupName="Lua"/>
        <localInspection
                displayName="Lua Standard Compliance"
                enabledByDefault="true"
                groupName="Lua"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.LuaStandardCompliance"/>
        <localInspection
                displayName="Remove Unused"
                enabledByDefault="true"
                groupName="Lua"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.RemoveUnusedLocal"/>
        <localInspection
                displayName="Empty body"
                enabledByDefault="true"
                groupName="Lua"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.EmptyBody"/>
        <localInspection
                displayName="Unreachable statement"
                enabledByDefault="true"
                groupName="Lua"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.UnreachableStatement"/>
        <localInspection
                displayName="0 index"
                enabledByDefault="true"
                groupName="Lua"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.ArrayIndexZero"/>
        <localInspection
                displayName="Local name hides previous"
                enabledByDefault="true"
                groupName="Lua"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.LocalNameHidesPrevious"/>
        <localInspection
                displayName="Match function signature"
                enabledByDefault="false"
                groupName="Lua > Lint > Type safety"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.MatchFunctionSignatureInspection"/>
        <localInspection
                displayName="Undeclared variable"
                enabledByDefault="false"
                groupName="Lua > Lint > Type safety"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.UndeclaredVariableInspection"/>
        <localInspection
                displayName="Return type"
                enabledByDefault="false"
                groupName="Lua > Lint > Type safety"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.ReturnTypeInspection"/>
        <localInspection
                displayName="Assign type"
                enabledByDefault="false"
                groupName="Lua > Lint > Type safety"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.AssignTypeInspection"/>
    </extensions>

    <application-components>
        <component>
            <implementation-class>com.tang.intellij.lua.project.StdSDK</implementation-class>
        </component>
    </application-components>

    <project-components>
        <!-- Add your project components here -->
    </project-components>

    <actions>
        <action class="com.tang.intellij.lua.actions.CreateLuaFileAction"
                text="Lua File"
                id="lua.newFile">
            <add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFile"/>
        </action>
        <action class="com.tang.intellij.lua.actions.CreateTutorialFileAction"
                text="Lua Tutorial"
                id="lua.newTutorial">
            <add-to-group group-id="NewGroup" anchor="after" relative-to-action="lua.newFile"/>
        </action>

        <action id="LuaCheck"
                text="Run LuaCheck"
                popup="true"
                icon="/icons/lua.png"
                class="com.tang.intellij.lua.luacheck.LuaCheckGroup">
            <add-to-group group-id="ToolsMenu" anchor="last"/>
            <add-to-group group-id="ProjectViewPopupMenu" anchor="last"/>
            <add-to-group group-id="EditorPopupMenu" anchor="last"/>
        </action>
    </actions>

    <extensionPoints>
        <extensionPoint qualifiedName="com.tang.intellij.lua.luaClassInheritorsSearch" interface="com.intellij.util.QueryExecutor"/>
        <extensionPoint qualifiedName="com.tang.intellij.lua.luaAllClassesSearch" interface="com.intellij.util.QueryExecutor"/>
        <extensionPoint qualifiedName="com.tang.intellij.lua.luaOverridingMethodsSearch" interface="com.intellij.util.QueryExecutor"/>
    </extensionPoints>

    <extensions defaultExtensionNs="com.tang.intellij.lua">
        <luaClassInheritorsSearch implementation="com.tang.intellij.lua.psi.search.LuaClassInheritorsSearchExecutor"/>
        <luaAllClassesSearch implementation="com.tang.intellij.lua.psi.search.LuaAllClassesSearchExecutor"/>
        <luaOverridingMethodsSearch implementation="com.tang.intellij.lua.psi.search.LuaOverridingMethodsSearchExecutor"/>
    </extensions>
</idea-plugin><commit_msg>update plugin info<commit_after><!--
  ~ Copyright (c) 2017. tangzx(<EMAIL>)
  ~
  ~ Licensed 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.
  -->

<idea-plugin>
    <id>com.tang</id>
    <name>EmmyLua</name>
    <version>1.2.0</version>
    <vendor email="<EMAIL>">tangzx</vendor>
    <category>Custom Languages</category>
    <description><![CDATA[
    Support for Lua programming language.<br>
    <p><a href="https://github.com/EmmyLua">Source Code</a> | <a href="https://gitter.im/emmylua/Lobby?utm_source=share-link&utm_medium=link&utm_campaign=share-link">Gitter</a> | <a href="https://emmylua.github.io/donate.html">Donate</a> | <a href="https://emmylua.github.io/?plugin">Doc</a></p>
    Features:
    <ul>
        <li>Syntax highlighting</li>
        <ul>
            <li>Highlight global value</li>
            <li>Highlight local/param value</li>
            <li>Highlight up value</li>
        </ul>
        <li>Code completion</li>
        <ul>
            <li>Keyword completion</li>
            <li>Basic completion</li>
            <li>Type inferred based completion</li>
        </ul>
        <li>Debugger</li>
        <ul>
            <li>Attach Debugger(Windows only)</li>
            <li>Remote Debugger(Mobdebug.lua)</li>
        </ul>
        <li>Lua 5.3 support</li>
        <li>Find usages</li>
        <li>Rename</li>
        <li>Go to definition</li>
        <li>Go to symbol</li>
        <li>Go to class</li>
        <li>Go to file</li>
        <li>Parameter name hints</li>
        <li>Comment based type/class annotation</li>
        <li>Structure view</li>
        <li>Comment in/out</li>
        <li>Color settings page</li>
        <li>Method override line marker</li>
        <li>Quick Documentation</li>
        <li>Live templates</li>
        <li>Postfix completion templates</li>
        <li>Code formatter</li>
        <li>Code intentions</li>
        <li>Code inspections</li>
        <li>Lua Standard Library/API</li>
        <li>Region folding</li>
        <li>Lua Check Tool</li>
    </ul>
    <p>中国朋友可以加QQ群29850775交流及反馈BUG</p>
    ]]></description>

    <change-notes><![CDATA[
    <strong>1.1.9</strong>
    <li>[UPDATE] Compatible with IDEA 2017.3(173)</li>
    <li>[NEW] Add new annotation: @overload, used for mark overload functions (@optional is obsolete)</li>
    <li>[NEW] Add new annotation: @language, used for inject language to lua string</li>
    <li>[NEW] Add new inspection: Show warning for duplicated local declaration</li>
    <li>[NEW] Show method separators</li>
    <li>[NEW] Show local variable type hints</li>
    <li>[NEW] Show parameter type hints</li>
    <li>[NEW] Show function return type hints</li>
    <li>[NEW] Add new postfix template "if_not"</li>
    <li>[IMPROVE] Infer type from constructor call (settings/Languages.../EmmyLua)</li>
    <li>[IMPROVE] Add auto completion and references for label(Lua 5.3)</li>
    <li>[IMPROVE] You can toggle on/off 'smart enter' (settings/Languages.../EmmyLua)</li>
    <li>[IMPROVE] You can toggle on/off 'show words in file' (settings/Languages.../EmmyLua)</li>
    <li>[FIX] Support forward declaration local-function</li>
    <li>[FIX] Crash when type --[ at EOF</li>
    <li>[FIX] Fix some bugs</li>
    <a href="https://tangzx.github.io/emmydoc/changelogs.html">Full changelog</a>
    ]]>
    </change-notes>

    <!-- please see https://confluence.jetbrains.com/display/IDEADEV/Build+Number+Ranges for description -->
    <idea-version since-build="171" until-build="173.*"/>

    <!-- please see https://confluence.jetbrains.com/display/IDEADEV/Plugin+Compatibility+with+IntelliJ+Platform+Products
         on how to target different products -->
    <depends>com.intellij.modules.lang</depends>

    <extensions defaultExtensionNs="com.intellij">
        <!--<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>-->

        <!--LuaCheck-->
        <toolWindow id="LuaCheck"
                    anchor="bottom"
                    icon="/icons/lua.png"
                    factoryClass="com.tang.intellij.lua.luacheck.LuaCheckToolWindowFactory"
                    canCloseContents="true"/>
        <projectService serviceImplementation="com.tang.intellij.lua.luacheck.LuaCheckView"
                        serviceInterface="com.tang.intellij.lua.luacheck.LuaCheckView"/>
        <applicationService serviceInterface="com.tang.intellij.lua.luacheck.LuaCheckSettings"
                            serviceImplementation="com.tang.intellij.lua.luacheck.LuaCheckSettings"/>

        <!--CreateFromTemplate-->
        <createFromTemplateHandler implementation="com.tang.intellij.lua.actions.LuaCreateFromTemplateHandler"/>

        <!--module and library-->
        <moduleType id="LUA_MODULE" implementationClass="com.tang.intellij.lua.project.LuaModuleType"/>
        <moduleConfigurationEditorProvider implementation="com.tang.intellij.lua.project.LuaModuleConfigurationEditorProvider"/>
        <sdkType implementation="com.tang.intellij.lua.project.LuaSdkType"/>
        <library.type implementation="com.tang.intellij.lua.project.LuaLibraryType"/>
        <indexedRootsProvider implementation="com.tang.intellij.lua.project.LuaPredefinedLibraryProvider"/>

        <!--lang-->
        <lang.foldingBuilder language="Lua" implementationClass="com.tang.intellij.lua.folding.LuaFoldingBuilder"/>
        <lang.braceMatcher language="Lua" implementationClass="com.tang.intellij.lua.braces.LuaBraceMatcher"/>
        <lang.syntaxHighlighterFactory language="Lua" implementationClass="com.tang.intellij.lua.highlighting.LuaSyntaxHighlighterFactory"/>
        <lang.parserDefinition language="Lua" implementationClass="com.tang.intellij.lua.lang.LuaParserDefinition"/>
        <lang.documentationProvider language="Lua" implementationClass="com.tang.intellij.lua.documentation.LuaDocumentationProvider"/>
        <lang.psiStructureViewFactory language="Lua" implementationClass="com.tang.intellij.lua.editor.LuaStructureViewFactory"/>
        <lang.commenter language="Lua" implementationClass="com.tang.intellij.lua.editor.LuaCommenter"/>
        <lang.quoteHandler language="Lua" implementationClass="com.tang.intellij.lua.codeInsight.editorActions.LuaQuoteHandler"/>
        <highlightErrorFilter implementation="com.tang.intellij.lua.highlighting.LuaHighlightErrorFilter"/>
        <iconProvider implementation="com.tang.intellij.lua.editor.LuaIconProvider"/>
        <fileTypeFactory implementation="com.tang.intellij.lua.lang.LuaFileTypeFactory"/>
        <psi.referenceContributor language="Lua" implementation="com.tang.intellij.lua.reference.LuaReferenceContributor"/>
        <languageInjector implementation="com.tang.intellij.lua.lang.LuaLanguageInjector"/>

        <spellchecker.support implementationClass="com.tang.intellij.lua.editor.LuaSpellcheckingStrategy" language="Lua"/>

        <!--usage-->
        <lang.findUsagesProvider language="Lua" implementationClass="com.tang.intellij.lua.usages.LuaFindUsagesProvider"/>
        <findUsagesHandlerFactory implementation="com.tang.intellij.lua.usages.LuaFindUsagesHandlerFactory"/>
        <usageTypeProvider implementation="com.tang.intellij.lua.usages.UsageTypeProvider"/>

        <!--refactor-->
        <lang.refactoringSupport language="Lua" implementationClass="com.tang.intellij.lua.editor.LuaRefactoringSupportProvider"/>
        <nameSuggestionProvider implementation="com.tang.intellij.lua.editor.LuaNameSuggestionProvider"/>
        <qualifiedNameProvider implementation="com.tang.intellij.lua.editor.LuaQualifiedNameProvider"/>
        <renamePsiElementProcessor implementation="com.tang.intellij.lua.refactoring.rename.RenameLuaMethodProcessor"/>
        <inlineActionHandler implementation="com.tang.intellij.lua.refactoring.inline.LuaInlineActionHandler"/>
        <moveFileHandler implementation="com.tang.intellij.lua.refactoring.move.LuaMoveFileHandler"/>

        <!--navigate-->
        <gotoClassContributor implementation="com.tang.intellij.lua.editor.LuaClassNavigationContributor"/>
        <gotoSymbolContributor implementation="com.tang.intellij.lua.editor.LuaSymbolNavigationContributor"/>
        <breadcrumbsInfoProvider implementation="com.tang.intellij.lua.editor.LuaBreadcrumbsProvider"/>

        <!--completion-->
        <completion.contributor language="Lua" implementationClass="com.tang.intellij.lua.editor.completion.LuaDocCompletionContributor"/>
        <completion.contributor language="Lua" implementationClass="com.tang.intellij.lua.editor.completion.LuaCompletionContributor"/>

        <!--codeInsight-->
        <codeInsight.lineMarkerProvider language="Lua" implementationClass="com.tang.intellij.lua.codeInsight.LuaLineMarkerProvider"/>
        <codeInsight.parameterNameHints language="Lua" implementationClass="com.tang.intellij.lua.codeInsight.LuaParameterHintsProvider"/>
        <codeInsight.parameterInfo language="Lua" implementationClass="com.tang.intellij.lua.codeInsight.LuaParameterInfoHandler"/>
        <codeInsight.template.postfixTemplateProvider language="Lua" implementationClass="com.tang.intellij.lua.codeInsight.postfix.LuaPostfixTemplateProvider"/>
        <highlightVisitor implementation="com.tang.intellij.lua.codeInsight.LuaRainbowVisitor"/>
        <highlightUsagesHandlerFactory implementation="com.tang.intellij.lua.codeInsight.highlighting.LuaHighlightUsagesHandlerFactory"/>

        <!--editor handlers-->
        <enterHandlerDelegate implementation="com.tang.intellij.lua.editor.LuaEnterAfterUnmatchedBraceHandler" />
        <enterHandlerDelegate implementation="com.tang.intellij.lua.editor.LuaEnterInDocHandler"/>
        <enterHandlerDelegate implementation="com.tang.intellij.lua.editor.LuaEnterBetweenBracesHandler"/>
        <enterHandlerDelegate implementation="com.tang.intellij.lua.editor.LuaEnterBetweenRangeBlockHandler"/>
        <backspaceHandlerDelegate implementation="com.tang.intellij.lua.codeInsight.LuaBackspaceHandlerDelegate"/>
        <typedHandler implementation="com.tang.intellij.lua.editor.LuaTypedHandler"/>
        <typedHandler implementation="com.tang.intellij.lua.editor.LuaAutoIndentHandler"/>

        <!--highlighting-->
        <annotator language="Lua" implementationClass="com.tang.intellij.lua.annotator.LuaAnnotator" />
        <problemFileHighlightFilter implementation="com.tang.intellij.lua.highlighting.LuaProblemFileHighlightFilter"/>
        <colorSettingsPage implementation="com.tang.intellij.lua.editor.LuaColorSettingsPage"/>
        <additionalTextAttributes scheme="Default" file="colorSchemes/Default.xml"/>
        <additionalTextAttributes scheme="Darcula" file="colorSchemes/Darcula.xml"/>

        <!--stub & index-->
        <stubElementTypeHolder class="com.tang.intellij.lua.psi.LuaTypes" />
        <stubElementTypeHolder class="com.tang.intellij.lua.comment.psi.LuaDocTypes"/>
        <stubIndex implementation="com.tang.intellij.lua.stubs.index.LuaClassIndex"/>
        <stubIndex implementation="com.tang.intellij.lua.stubs.index.LuaGlobalIndex"/>
        <stubIndex implementation="com.tang.intellij.lua.stubs.index.LuaClassMemberIndex"/>
        <stubIndex implementation="com.tang.intellij.lua.stubs.index.LuaShortNameIndex"/>
        <stubIndex implementation="com.tang.intellij.lua.stubs.index.LuaSuperClassIndex"/>

        <!--surround descriptors-->
        <lang.surroundDescriptor language="Lua" implementationClass="com.tang.intellij.lua.editor.surroundWith.LuaSurroundDescriptor"/>

        <!-- formatting & code style -->
        <lang.formatter language="Lua" implementationClass="com.tang.intellij.lua.editor.formatter.LuaFormattingModelBuilder"/>
        <codeStyleSettingsProvider implementation="com.tang.intellij.lua.editor.formatter.LuaCodeStyleSettingsProvider"/>
        <langCodeStyleSettingsProvider implementation="com.tang.intellij.lua.editor.formatter.LuaLanguageCodeStyleSettingsProvider"/>

        <!-- runner & debugger -->
        <runConfigurationProducer implementation="com.tang.intellij.lua.debugger.LuaRunConfigurationProducer"/>
        <programRunner implementation="com.tang.intellij.lua.debugger.remote.LuaMobDebuggerRunner"/>
        <configurationType implementation="com.tang.intellij.lua.debugger.remote.LuaMobConfigurationType"/>
        <programRunner implementation="com.tang.intellij.lua.debugger.app.LuaAppRunner"/>
        <configurationType implementation="com.tang.intellij.lua.debugger.app.LuaAppConfigurationType"/>
        <xdebugger.breakpointType implementation="com.tang.intellij.lua.debugger.LuaLineBreakpointType"/>
        <xdebugger.localAttachDebuggerProvider implementation="com.tang.intellij.lua.debugger.attach.LuaLocalAttachDebuggerProvider"/>

        <!--templates-->
        <defaultLiveTemplatesProvider implementation="com.tang.intellij.lua.codeInsight.LuaLiveTemplatesProvider"/>
        <liveTemplateContext implementation="com.tang.intellij.lua.codeInsight.LuaCodeTemplateContextType"/>
        <liveTemplateContext implementation="com.tang.intellij.lua.codeInsight.LuaIfContextType"/>
        <liveTemplateMacro implementation="com.tang.intellij.lua.codeInsight.template.macro.SuggestFirstLuaVarNameMacro"/>

        <!--lua settings-->
        <applicationService serviceInterface="com.tang.intellij.lua.project.LuaSettings"
                            serviceImplementation="com.tang.intellij.lua.project.LuaSettings"/>
        <applicationConfigurable groupId="language"
                                 displayName="EmmyLua"
                                 id="preferences.Lua"
                                 instance="com.tang.intellij.lua.project.LuaSettingsPanel">
            <configurable instance="com.tang.intellij.lua.luacheck.LuaCheckSettingsPanel"
                          displayName="LuaCheck"
                          id="preferences.LuaCheck"/>
        </applicationConfigurable>

        <!--intentions-->
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.CreateParameterAnnotationIntention</className>
            <descriptionDirectoryName>CreateParameterAnnotationIntention</descriptionDirectoryName>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.CreateTypeAnnotationIntention</className>
            <descriptionDirectoryName>CreateTypeAnnotationIntention</descriptionDirectoryName>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.CreateFunctionReturnAnnotationIntention</className>
            <descriptionDirectoryName>CreateFunctionReturnAnnotationIntention</descriptionDirectoryName>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.CreateFunctionDocIntention</className>
            <descriptionDirectoryName>CreateFunctionDocIntention</descriptionDirectoryName>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.CreateFieldFromParameterIntention</className>
            <descriptionDirectoryName>CreateFieldFromParameterIntention</descriptionDirectoryName>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.CreateMethodIntention</className>
            <descriptionDirectoryName>CreateMethodIntention</descriptionDirectoryName>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.AppendCallParenIntention</className>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.RemoveCallParenIntention</className>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.InvertBooleanIntention</className>
        </intentionAction>
        <intentionAction>
            <category>Lua</category>
            <className>com.tang.intellij.lua.codeInsight.intention.SetVisibilityIntention</className>
        </intentionAction>

        <localInspection
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.DuplicateClassDeclaration"
                displayName="Duplicate Class"
                enabledByDefault="true"
                level="ERROR"
                groupName="Lua"/>
        <localInspection
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.SimplifyLocalAssignment"
                displayName="Local assign can be simpler"
                enabledByDefault="true"
                groupName="Lua"/>
        <localInspection
                displayName="Lua Standard Compliance"
                enabledByDefault="true"
                groupName="Lua"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.LuaStandardCompliance"/>
        <localInspection
                displayName="Remove Unused"
                enabledByDefault="true"
                groupName="Lua"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.RemoveUnusedLocal"/>
        <localInspection
                displayName="Empty body"
                enabledByDefault="true"
                groupName="Lua"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.EmptyBody"/>
        <localInspection
                displayName="Unreachable statement"
                enabledByDefault="true"
                groupName="Lua"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.UnreachableStatement"/>
        <localInspection
                displayName="0 index"
                enabledByDefault="true"
                groupName="Lua"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.ArrayIndexZero"/>
        <localInspection
                displayName="Local name hides previous"
                enabledByDefault="true"
                groupName="Lua"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.LocalNameHidesPrevious"/>
        <localInspection
                displayName="Match function signature"
                enabledByDefault="false"
                groupName="Lua > Lint > Type safety"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.MatchFunctionSignatureInspection"/>
        <localInspection
                displayName="Undeclared variable"
                enabledByDefault="false"
                groupName="Lua > Lint > Type safety"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.UndeclaredVariableInspection"/>
        <localInspection
                displayName="Return type"
                enabledByDefault="false"
                groupName="Lua > Lint > Type safety"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.ReturnTypeInspection"/>
        <localInspection
                displayName="Assign type"
                enabledByDefault="false"
                groupName="Lua > Lint > Type safety"
                implementationClass="com.tang.intellij.lua.codeInsight.inspection.AssignTypeInspection"/>
    </extensions>

    <application-components>
        <component>
            <implementation-class>com.tang.intellij.lua.project.StdSDK</implementation-class>
        </component>
    </application-components>

    <project-components>
        <!-- Add your project components here -->
    </project-components>

    <actions>
        <action class="com.tang.intellij.lua.actions.CreateLuaFileAction"
                text="Lua File"
                id="lua.newFile">
            <add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFile"/>
        </action>
        <action class="com.tang.intellij.lua.actions.CreateTutorialFileAction"
                text="Lua Tutorial"
                id="lua.newTutorial">
            <add-to-group group-id="NewGroup" anchor="after" relative-to-action="lua.newFile"/>
        </action>

        <action id="LuaCheck"
                text="Run LuaCheck"
                popup="true"
                icon="/icons/lua.png"
                class="com.tang.intellij.lua.luacheck.LuaCheckGroup">
            <add-to-group group-id="ToolsMenu" anchor="last"/>
            <add-to-group group-id="ProjectViewPopupMenu" anchor="last"/>
            <add-to-group group-id="EditorPopupMenu" anchor="last"/>
        </action>
    </actions>

    <extensionPoints>
        <extensionPoint qualifiedName="com.tang.intellij.lua.luaClassInheritorsSearch" interface="com.intellij.util.QueryExecutor"/>
        <extensionPoint qualifiedName="com.tang.intellij.lua.luaAllClassesSearch" interface="com.intellij.util.QueryExecutor"/>
        <extensionPoint qualifiedName="com.tang.intellij.lua.luaOverridingMethodsSearch" interface="com.intellij.util.QueryExecutor"/>
    </extensionPoints>

    <extensions defaultExtensionNs="com.tang.intellij.lua">
        <luaClassInheritorsSearch implementation="com.tang.intellij.lua.psi.search.LuaClassInheritorsSearchExecutor"/>
        <luaAllClassesSearch implementation="com.tang.intellij.lua.psi.search.LuaAllClassesSearchExecutor"/>
        <luaOverridingMethodsSearch implementation="com.tang.intellij.lua.psi.search.LuaOverridingMethodsSearchExecutor"/>
    </extensions>
</idea-plugin>
{'fraction_non_alphanumeric': 0.11846039704130039, 'fraction_numerical': 0.0018435666269475484, 'mean_word_length': 3.1714339304135795, 'pattern_counts': {'":': 0, '<': 740, '<?xml version=': 0, '>': 756, 'https://': 14, 'lorem ipsum': 0, 'www.': 2, 'xml': 4}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 6, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6256377', 'n_tokens_mistral': 12906, 'n_tokens_neox': 12508, 'n_words': 1561}