Bot releases are hidden (Show)
Published by KronicDeth over 3 years ago
Call.finalArguments
html.leex
was not being being parsed as HTML for the template data language.
onlyTemplateDateFileType
Code
disassembler
bs_start_match4
make_fun3
init_yregs
recv_marker_bind
recv_marker_clear
recv_marker_clear
recv_marker_user
PsiElement
if Call#finalArguments
contain a null
.homepath
s for both Elixir and Erlang for Elixir SDKs.mix dialyzer
or any customized mix
command.VirtualFile#fileType
instead of EEx Type::INSTANCE when looking up extensions.Type
is a subclass of EEx's file Type
, it calls templateDataFileTypeSet
in EEx's Type
, but templateDataFileTypeSet
uses INSTANCE
from EEx. By using the VirtualFile#fileType
instead, it will properly be EEx or LEEx based on the actual file extension and then it can be used to strip that off and find the DataTemplateLanguage, such as HTMLLanguage
for .html.leex
.Enum
s are 0-based, so the comparison was off-by-1 when a file had the max opcode and would be incorrectly marked as too new.primaryArguments
operation.infix.Normalized.leftOperand
and .rightOperand
ensures that PsiErrorElement
is not returned: they can return null
when there is no left or right operand. Infix.primaryArguments
was not taking this into account and so could return a null
as one of the primaryArguments
, which broke Call.finalArguments
.elixir -e "System.version |> IO.puts"
to get the version number as it requires too much of a full SDK to be built and from the Erlang paths to be correct too, which was rarely the case for ASDF. Since for Homebrew and ASDF, the directory name is the version name, this shouldn't be a loss in naming ability. If the directory name is not a parseable version it will be of the format Elixir at <path>
. This is probably more correct for installs directories that aren't versioned as SDK versions aren't updated if the version installed at the path changes, such as /usr/local/elixir
or /opt/elixir
, etc.You'll be presented with a "Run 'Dialyzer based inspections (Elixir)'" dialog
The Inspections Result Tool Pane will open and show results as each file is processed.
Click the ▶ to expand the Credo section to show all warnings
Click an entry for the details of an individual warning with a code highlighting.
Published by KronicDeth over 3 years ago
LexerEditorHighlighter
code with me on JetBrains Platform Slack
Module
and Ecto.Query
.
~S
for @moduledoc
too, in addition to @doc
."""
or '''
and use the opposite one as the promoter/terminator.
"""
."""
, but then escape """
as \"\"\"
.runIde
maxHeapSize
to 7g
FormattingTest
files can be parsed.YYINITIAL
is special - wrappers of the lexer assume that if in YYINITIAL
, it is safe to shift the lexer over when there is an error, having {OPENING_CURLY}
pushAndBegin(YYINITIAL)
when it was either in YYINITIAL
or INTERPOLATION
means that the lexer looked like it was restartable when it really wasn't. This code has been in the lexer for 6 years.
YYINITIAL
, {
no longer recurses into YYINITIAL
as }
does not need to be counted to determine if it is closing an interpolation.INTERPOLATION
, {
enters INTERPOLATION_CURLY
to allow counting and matching of }
until it can exit and go back to INTERPOLATION
, where }
will exit the interpolation.INTERPOLATION_CURLY
, {
enters another level of INTERPOLATION_CURLY
to allow counting and matching of }
until it can exit and go up a level.}
in YYINITIAL
did yybegin(ADDITION_OR_SUBTRACTION_MAYBE)
, but it should have been pushAndBegin(ADDITION_OR_SUBTRACTION)
as ADDITION_OR_SUBTRACTION_MAYBE
or its following states all exit with handleInLastState()
or popAndBegin()
. This was not caught in #1859 because the extra YYINITIAL
from pushAndBegin(YYINTIAL)
hid the bug.YYINITIAL
bugs in the future by erroring
pushAndBegin(YYINITIAL)
.push(YYINITIAL)
and the state stack is not emptyElixirFlexLexer#reset
is called, as at the level of typing and pasting, the ElixirFlexLexer
is wrapped in many layers of lexers including LexerEditorHighlighter
where the ElixirFlexLexer
is no longer re-instantiated when there is no text, but instead, ElixirFlexLexer#reset
is only called. This has always been an invariant violation since the stack state was added 7 years ago. It likely only became more apparent with the changes to +/- parsing in #1859 that made return-to-YYINITIAL
less likely.
stack.clear()
has to be manually added to ElixirFlexLexer.java
, which is generated from Elixir.flex
, ResetTest
is added to check that the code is still there.LexerEditorHighlighter
stops working after :
is typed at the start of an atom in certain situations, such as before )
inside a function call, like when adding an argument. In this case, the old version of the lexer would mark )
as a BAD_CHARACTER
and continue to do so until an expected atom start of [a-zA-Z_], '
, "
, or an operator occurred. Now, if an invalid atom start is matched, the ATOM_START
state ends and the previous state handles the text, which in the function case mean )
is parsed as CLOSING_PARENTHESIS
. This change allows the highlighting to continue. I do not know if returning BAD_CHARACTER
will always break the LexerEditorHighlighter
, but I don't think, so since the GroovyLexer
in intellij-community
returns it, but it may be the case that it isn't actually returned ever when users are typing and only handled by the lexer for completeness.Published by KronicDeth almost 4 years ago
Kernel
and Kernel.SpecialForms
due to bugs in #1834.
Fix syntax highlighting stopping due to decompiling of Kernel
failing caused by bugs introduced in #1834.
Syntax highlighting could fail part way through a file when Kernel
needed to be decompiled to resolve parts of the syntax. This would lead to the file to be colored above a certain point, but then the default gray after that point.
Docs
, it was guaranteed that the PsiCompiled
stubs would correlate, in-order, with the decompiled source call definitions, and so mirrors could be set by matching up the list of them in order. Since the Docs
doesn't have to correspond to and doesn't correspond to the binary precisely for some BEAMs, most importantly, Elixir.Kernel.beam
, the PsiCompiled stub and decompiled source is now matched by name and arity. This means some mirrors are missed, but no errors are produced.Docs
can have default arguments the call definition clauses can have an arity range and not just a fixed arity, so all arities in the range need to be mappable to PsiCompiled
functions.Docs
.def
as in #1834.~S"""
for docs from Docs
chunk.Docs
chunk may contain interpolation in the code samples or #{
in regex examples, but these should not be treated as an interpolation start as the Docs
format does not support interpolation. Anything that looks like interpolation in the docs text was actually escaped in the original docs, so also escape it here by using S"""
, which turns off interpolation.Code
function can't be matched to decompiled source.InvalidMirrorException
, this won't be an exception and the binary <-> decompile will still work for the other functions/macros in the file, so it will be a more graceful degradation.DepsWatcher
as project componentDepsWatcher
was converted to a Project Listener in #1844 to support installing the plugin from the Marketplace without reloading, but some references to DepsWatcher
were still trying to get its instance for project using project.getComponent()
, which would now return null
.mix
to build projects.unquote(ATOM)
call definitions to compiled function by using the argument tounquote
when calculating the name of the call definition clause if possible.unquote
d because they contain /
to separate the outer function name from the anonymous function naming convention.Docs
signature for MacroNameArity
that is an operator or unquote
dunquote
d don't produce valid code that can be parsed.__struct__
functions.__struct__
functions are like %Module{}
, but that's not parseable, so bypass the signatures with a specialized SignatureOverride
decompiler that matches the actual code in defstruct
.Docs
for @moduledoc
and @doc
to match the formatter output.Docs
@moduledoc
@moduleDoc
-> @moduledoc
Published by KronicDeth almost 4 years ago
-1
could not be parsed as a case
clause.
DepsWatcher
from project component to project listenerWatcher
from module component to project listenerassert
.if
with when
asd
tool versiongradlew
6.7.1
org.jetbrains.intellij
0.6.3
org.jetbrains.kotlin.jvm
1.3.70
de.undercouch.download
to 4.4.1
no_parens: true
metadata@Deprecated
to match overridden methodQuoter
to KotlinDocumentationProvider
so it no longer relies on invoking mix
(which I admit was more like a hack than a real solution). This now works so quickly that it actually makes sense to show docs on mouse hover.
@moduledoc
and @doc
sp0
, p1
, ...).fileTypeFactory
extensions with fileType
fileType
s to KotlinProject#baseDir
ContainerUtil.newHashMap
defaultLiveTemplatesProvider
with defaultLiveTemplates
spaceExistanceTypeBetweenTokens
replaced with spaceExistenceTypeBetweenTokens
ListCellRendererWrapper
with SimpleListCellRenderer
StdFileTypes.PLAIN_TEXT
with FileTypes.PLAIN_TEXT
LanguageSubstitutors.INSTANCE
with getInstance()
ReportMessages.ERROR_REPORT
with ReportMessages.getErrorReport()
DefaultProgramRunner
with GenericProgramRunner
flushBufferBeforeTerminating()
acceptsFile
initExtra(Project)
instead of initExtra(Project, MessageBus, Engine)
NamedFoldingDescriptor
with FoldingDescriptor
folding.Builder
to Kotlinfile
with value
for @Storage
annotationcheckBox(fieldName, title)
with checkBox(title, getter, setter)
com.intellij.util.contains.Predicate
with java.util.function.Predicate
CodeStyleSettingsManager
with CodeStyle
Comparing.equal
with Objects.equals
UsageType(String)
with UsageType(Supplier)
PluginManager
with PluginManagerCore
WakValueHashMap
with createWakeValueMap
Pass
to LineMarkerInfo
newArrayListWithCapacity
with ArrayList
newIdentityHashMap
with IdentityHashMap
RefElement#element
with #psiElement
columnMargin
to setupCheckboxColumn
Extensions.getExtensions(name)
-> name.extensionList
Extensions.findExtension
-> ExtensionPointName.findExtensionOrFail
Object
-> Any
choseAndSetSdk
with SdkPopupFactory
ErrorBean
SetupSDKNotificationProvider
AnnotationHolder::create*
APIs and use AnnotationBuilder
instead.
Annotator
s to Kotlinlogger.error
directly instead of LogMessageEx
Macro
parsing in DbgI
ifAccessToString
[Access, :get]
and was checking the outer tuple directly.
beam.assembly.ParserDefinition
to KotlinifWhenToString
where as
should be as?
TODO()
sLine
chunk dependency on Atom
chunkunsignedInt
values to _
as Kotlin doesn't support _name
key
instead of environment for computeIfAbsent
!!
smapIndexed
with map
because index
is unusedopen
that has no effect in object
is
overrides by converting to KotlinCall
from Implementation.
and CallDefinitionClause
.elementDescription(Call, ElementDescriptionLocation)
.resolveResultList
in addToResolveResultList
?:
!= null
Float.from(ByteArray, Int)
to TODO()
as implementation is invalid.ModuleChooserDialog
EncodingManager
for ParsingTestCase
internal
-1
for case
clauses (#1316) by more strictly parsing decimal exponent signs differently than addition/subtraction and differently from unary +
and -
. No longer have a "dual" operation emitted from the lexer like the Elixir native lexer and instead use specific tokens for each use case so that the parser doesn't need to decide on the operation.IndexOutOfBounds
from highlighterIterator
in QuoteHandler
.Published by KronicDeth about 4 years ago
BIG_CREATION
.
BIG_CREATION
when debugging.brew edit erlang
) to add --with-java
and then built with brew install erlang --build-from-source
.file.path
to the debugger server files has \
, but they aren't escaped. Therefore, replace them with escaped version, \\
to fix debugging on Windows, but leave Linux and macOS unaffected.Published by KronicDeth about 4 years ago
@doc
and @spec
Fix Unchecking Show Method Separator still showing on @doc
and @spec
.
Previously, unchecking Show Method Separator would still show the method separator if it was the module attributes (such as @doc
and @spec
) associated with the call definition (def
, defp
, defmacro
, or defmacrop
) and only disabled the ones directly above the call definition. This is fixed by checking if method separators are enabled in getLineMarkerInfo(PsiElement)
instead of the specialized getLineMarkerInfo(Call)
, so that the check happens for both module attributes and call definitions.
use
yet, so current annotation is a false positive in those cases.SimpleTemplateLanguageFormattingModelBuilder
for EEx files, so that the TemplateDataLanguage
(i.e. html
when the extension is .html.eex
) formatter is used instead of the Elixir formatter.Published by KronicDeth over 4 years ago
iex
and erl
arguments not being saved for IEx Mix Run Configurations
annotator.ModuleAttribute
to Kotlin
Check if at least one resolution for module attribute references is valid
Previously, it was checked if module attributes resolved to exactly one declaration, but this is no longer true with the looser reference resolution that allows invalid results for PisPolyVariantReference. resolve()
will return null
when there is more than one result from multiResolve
even if some are invalid, so we need to explicitly check if the PsiReference
is a PsiPolyVariantReference
and if so check if any are valid.
Fix deprecation warnings for annotator.ModuleAttribute
.
Quick fixes for inlinables in annotator.ModuleAttribute
.
iex
and erl
arguments not being saved for IEx Mix Run Configurations.Published by KronicDeth over 4 years ago
1.10.0
in the ExUnit formatter. Ports elixir-lang/elixir@98c6bba436cc4833363295e5fedd3f819504d79d.Published by KronicDeth over 4 years ago
Icons
was using removed icons from AllIcons
.
.leex
files as .eex
files, so same features apply to both.General.QuestionDialog
icon for RunConfigurations.TestUnknown
icon for Unknown icon in Structure View.MODULENAME
variable in defm
live template, so that the file name is camel-cased before being capitalized.README.md
about information for Goland IDE since has been released for awhile and no longer only an EAP.AllocIcons
in Icons
to new ones in AlllIcons
that are recommended in documentation.@NotNull
annotation on PsiElementVisitor
DepGatherer
QuotableImpl.quote
Get ProjectImportProvider
builder in doGetBuilder
instead of constructor.
Fixes use of deprecated constructor dependency injection that is incompatible with dynamic, injectable plugins in 2020.1.
com.intellij.diagnostic.PluginException: getComponentAdapterOfType is
used to get org.elixir_lang.mix.project._import.Builder(
requestorClass=org.elixir_lang.mix.project._import.Provider,
requestorConstructor=protected org.elixir_lang.mix.project._import.Provider(org.elixir_lang.mix.project._import.Builder)
).
Probably constructor should be marked as NonInjectable. [Plugin: org.elixir_lang]
0b
), octal (0o
) , and hexadecimal (0x
) numbers.Published by KronicDeth over 4 years ago
Published by KronicDeth over 4 years ago
Published by KronicDeth over 4 years ago
Published by KronicDeth over 4 years ago
Published by KronicDeth over 4 years ago
Ignore the incompleteCode
flag and instead always use the criteria used when incompleteCode
was set.
name prefix | exact name | ResolveResult | valid |
---|---|---|---|
❌ | N/A | ❌ | N/A |
✅ | ❌ | ✅ | ❌ |
✅ | ✅ | ✅ | ✅ |
This extends #1617 to more cases.
Process.flag(...)
, etc)@spec foo(...)
)alias Foo...
)@attribute
)foo
)Protocol
reserved module attributes (@protocol
and @for
)Published by KronicDeth over 4 years ago
Published by KronicDeth almost 5 years ago
Published by KronicDeth almost 5 years ago
Previously, the arity of a function or macro could only disagree with the definition and resolve if
ResolveResult
was marked as a validResult
.incomplete
(because the IDE detects typing, etc) and the arity mismatches and the ResolveResult
is marked as an invalid result.By marking all arity mismatches, regardless of incompleteness of the code as an invalid result, Go To Definition and Show Parameters works when the the arity is incorrect. This makes Show Parameters work while typing out a call without the correct number of commas and allows jumping to the definition while typing out the call too.
Published by KronicDeth almost 5 years ago
Published by KronicDeth almost 5 years ago
GeneralCommandLine
's escaping for Windows can't handle the parentheses in a way that both works for the Windows shell and Elixir running the code the shell hands off. Removing the parentheses leaves runnable code even if it is no longer formatted.
Fixes "Unknown Version" naming for Elixir SDKs and the "Probably SDK installed in ... is corrupt" dialog from appearing.
The parameter names for the current call can be shown (⌘+P/Ctrl+P)
Published by KronicDeth about 5 years ago