package metals
- Alphabetic
- Public
- All
Type Members
-
final
class
ActiveFiles extends AnyRef
Keeps track of files that have been "recently active"
Keeps track of files that have been "recently active"
Used to ignore file watching events that follow right after textDocument/didSave events.
-
final
case class
AggregateSemanticdbs(underlying: List[Semanticdbs]) extends Semanticdbs with Product with Serializable
Implements
TextDocumentstrait with a list of underlying implementations. -
final
class
BatchedFunction[A, B] extends (Seq[A]) ⇒ Future[B]
Helper to batch multiple asynchronous requests and ensure only one request is active at a time.
-
final
class
BloopInstall extends Cancelable
Runs
sbt bloopInstallprocesses.Runs
sbt bloopInstallprocesses.Handles responsibilities like: - install metals.sbt as a global sbt plugin - launching embedded sbt-launch.jar via system process - reporting client about
sbt bloopInstallprogress - sealed abstract class BloopInstallResult extends Product with Serializable
- final case class BloopProtocol(value: String) extends Product with Serializable
-
final
class
BloopServers extends AnyRef
Establishes a connection with a bloop server.
Establishes a connection with a bloop server.
Connects to a running bloop server instance if it is installed on the user machine and has compatible version (+v1.1.0). Ignores the installed bloop server instance if it is v1.0.0.
Otherwise, if the user doesn't have bloop installed on the machine, uses Coursier to fetch the jars for ch.epfl.scala:bloop-frontend and start a new bloop server using classloading. A bloop server that starts via classloading stops when when the metals server stops. Only metals can access the classloaded server, the user cannot call it from a command-line interface.
Eventually, this class may be superseded by "BSP connection protocol": https://github.com/scalacenter/bsp/blob/master/docs/bsp.md#bsp-connection-protocol
-
sealed
trait
BloopSocket extends Cancelable
We communicate with Bloop via one of.
We communicate with Bloop via one of.
- unix domain sockets (macos/linux) - tcp (current default on Windows) - named pipes (ideal default on Windows)
This class abstracts over each of these.
-
final
class
BspServers extends AnyRef
Implements BSP server discovery, named "BSP Connection Protocol" in the spec.
Implements BSP server discovery, named "BSP Connection Protocol" in the spec.
See https://github.com/scalacenter/bsp/blob/master/docs/bsp.md#bsp-connection-protocol
-
case class
Buffers(map: TrieMap[io.AbsolutePath, String] = TrieMap.empty) extends Product with Serializable
Manages in-memory text contents of unsaved files in the editor.
- sealed abstract class BuildChange extends Product with Serializable
-
case class
BuildServerConnection(workspace: io.AbsolutePath, client: MetalsBuildClient, server: MetalsBuildServer, cancelables: List[Cancelable], initializeResult: InitializeBuildResult, name: String)(implicit ec: ExecutionContext) extends Cancelable with Product with Serializable
An actively running and initialized BSP connection.
- class BuildServerInitializeException extends Exception
-
final
class
BuildTargets extends AnyRef
In-memory cache for looking up build server metadata.
- sealed abstract class BuildTool extends Product with Serializable
-
final
class
BuildTools extends AnyRef
Detects what build tool is used in this workspace.
Detects what build tool is used in this workspace.
Although we only support a limited set of build tools, knowing what build tool is used in the workspace helps to produce better error for people using unsupported build tools. For example: "Gradle is not supported" instead of "Unsupported build tool".
-
trait
Cancelable extends AnyRef
A copy of
java.io.Closeablethat is not auto closeable.A copy of
java.io.Closeablethat is not auto closeable.Gives us fine-grained control over when resources are cleaned up.
- case class CancelableFuture[T](future: Future[T], cancelable: Cancelable = Cancelable.empty) extends Product with Serializable
- class ChosenBuildServers extends AnyRef
- case class Command(id: String, title: String, description: String, arguments: String = "`null`") extends Product with Serializable
-
class
CompilerPlugins extends AnyRef
Responsible for disabling unsupported compiler plugins.
Responsible for disabling unsupported compiler plugins.
Metals only uses the presentation compiler for limited features - completions - hover - parameter hints Compiler plugins that don't affect those features can be disabled, for example WartRemover that only reports diagnosticsForDebuggingPurposes. Diagnostics are already published from the build, where all compiler plugins are enabled by default.
Some compiler plugins change the semantics of the Scala language. Metals officially only supports a hardcoded list of such compiler plugins: - kind-projector, introduces new syntax for anonymous type lambdas - better-monadic-for, changes for comprehension desugaring The IntelliJ Scala plugin has custom support for these plugins.
Notably, macro-paradise-plugin id disabled because it does not work with the -Ymacro-expand:discard setting making completions always fail when inside an expanded tree.
The process for adding support for other compiler plugins is the following, send a PR to Metals adding integration tests to demonstrate thee compiler plugin - needs to be enabled in order for completions/hover to function. Many plugins like WartRemover that only use the compiler report don't need to be enabled. - enabling the plugin does not break the presentation compiler in unexpected ways.
-
class
Compilers extends Cancelable
Manages lifecycle for presentation compilers in all build targets.
Manages lifecycle for presentation compilers in all build targets.
We need a custom presentation compiler for each build target since build targets can have different classpaths and compiler settings.
-
final
class
ConfiguredLanguageClient extends MetalsLanguageClient
Delegates requests/notifications to the underlying language client according to the user configuration.
Delegates requests/notifications to the underlying language client according to the user configuration.
This wrapper class manages differences in how editors interpret LSP endpoints slightly differently, especially the window/{logMessage,showMessage} notifications. For example, with vim-lsc the messages from window/logMessage are always visible in the UI while in VS Code the logs are hidden by default.
- sealed abstract class Confirmation extends AnyRef
-
final
class
DefinitionProvider extends AnyRef
Implements goto definition that works even in code that doesn't parse.
Implements goto definition that works even in code that doesn't parse.
Uses token edit-distance to align identifiers in the current open buffer with symbol occurrences from the latest SemanticDB snapshot.
The implementation logic for converting positions between the latest SemanticDB snapshot and current open buffer is quite hairy. We need to convert positions in both the "source" (where definition request is made) and the "destination" (location of the symbol definition). This requires using token edit distance twice:
- source: dirty buffer -> snapshot - destination: snapshot -> dirty buffer
- case class DefinitionResult(locations: java.util.List[Location], symbol: String, definition: Option[io.AbsolutePath], semanticdb: Option[TextDocument]) extends Product with Serializable
- class DelegatingLanguageClient extends MetalsLanguageClient
- final class DependencySources extends AnyRef
-
final
class
Diagnostics extends AnyRef
Converts diagnosticsForDebuggingPurposes from the build server and Scalameta parser into LSP diagnosticsForDebuggingPurposes.
Converts diagnosticsForDebuggingPurposes from the build server and Scalameta parser into LSP diagnosticsForDebuggingPurposes.
BSP diagnosticsForDebuggingPurposes have different semantics from LSP diagnosticsForDebuggingPurposes with regards to how they are published. BSP diagnosticsForDebuggingPurposes can be accumulated when
reset=false, meaning the client (Metals) is responsible for aggregating multiplebuild/publishDiagnosticsnotifications into a singletextDocument/publishDiagnosticsnotification.Another challenge is to consolidate syntax errors on every keystroke with type errors on batch compile because positions get stale in batch compile errors as you type new syntax errors. To solve this problem we use token edit distance the same way we support goto definition in stale buffers.
- final class DismissedNotifications extends AnyRef
-
final
class
Doctor extends AnyRef
Helps the user figure out what is mis-configured in the build through the "Run doctor" command.
Helps the user figure out what is mis-configured in the build through the "Run doctor" command.
At the moment, the doctor only validates that SemanticDB is enabled for all projects.
- final class DocumentHighlightProvider extends AnyRef
- final case class DocumentSymbolConfig(value: String) extends Product with Serializable
-
class
DocumentSymbolProvider extends AnyRef
Retrieves all the symbols defined in a document
Retrieves all the symbols defined in a document
If the document doesn't parse, we fall back to the latest known snapshot of the document, if present.
-
final
class
Embedded extends Cancelable
Wrapper around software that is embedded with Metals.
Wrapper around software that is embedded with Metals.
- sbt-launch.jar - bloop.py - ch.epfl.scala:bloop-frontend
- sealed trait EmptyResult extends AnyRef
- final case class ExecuteClientCommandConfig(value: String) extends Product with Serializable
-
final
class
FileSystemSemanticdbs extends Semanticdbs
Reads SemanticDBs from disk that are produces by the semanticdb-scalac compiler plugin.
-
final
class
FileWatcher extends Cancelable
Handles file watching of interesting files in this build.
Handles file watching of interesting files in this build.
Tries to minimize file events by dynamically watching only relevant directories for the structure of the build. We don't use the LSP dynamic file watcher capability because
1. the glob syntax is not defined in the LSP spec making it difficult to deliver a consistent file watching experience with all editor clients on all operating systems. 2. we may have a lot of file watching events and it's presumably less overhead to get the notifications directly from the OS instead of through the editor via LSP.
Given we rely on file watching for critical functionality like Goto Definition and it's really difficult to reproduce/investigate file watching issues, I think it's best to have a single file watching solution that we have control over.
This class does not watch for changes in
*.sbtfiles in the workspace directory and in theproject/. Those notifications are nice-to-have, but not critical. The library we are using https://github.com/gmethvin/directory-watcher only supports recursive directory meaning we would have to watch the workspace directory, resulting in a LOT of redundant file events. Editors are free to sendworkspace/didChangedWatchedFilesnotifications for these directories. - final class FoldingRangeExtractor extends AnyRef
- final class FoldingRangeProvider extends AnyRef
- final class FoldingRanges extends AnyRef
-
final
class
FormattingProvider extends Cancelable
Implement text formatting using Scalafmt
-
final
class
ForwardingMetalsBuildClient extends MetalsBuildClient with Cancelable
A build client that forwards notifications from the build server to the language client.
-
case class
FutureCancelToken(f: Future[Unit])(implicit ec: ExecutionContext) extends CancelToken with Product with Serializable
A cancel token backed by a Scala future.
-
final
class
HtmlBuilder extends AnyRef
A string builder with helper methods for rendering HTML.
A string builder with helper methods for rendering HTML.
We don't use a library like Scalatags because we are trying to keep the number of external Scala dependencies low.
- abstract class Icons extends AnyRef
-
case class
ImportedBuild(workspaceBuildTargets: WorkspaceBuildTargetsResult, scalacOptions: ScalacOptionsResult, sources: SourcesResult, dependencySources: DependencySourcesResult) extends Product with Serializable
Metadata that we import from the build tool via BSP.
-
final
class
InteractiveSemanticdbs extends Cancelable with Semanticdbs
Produces SemanticDBs on-demand by using the presentation compiler.
Produces SemanticDBs on-demand by using the presentation compiler.
Only used to provide navigation inside external library sources, not used to compile workspace sources.
Uses persistent storage to keep track of what external source file is associated with what build target (to determine classpath and compiler options).
-
final
class
JarTopLevels extends AnyRef
Handles caching of Jar Top Level Symbols in H2
Handles caching of Jar Top Level Symbols in H2
Wrapper around the indexed_jar and toplevel_symbol sql tables.
-
class
MatchingToken extends AnyRef
A pair of tokens that align with each other across two different files
- class Messages extends AnyRef
-
trait
MetalsBuildClient extends AnyRef
A BSP client interface that uses lsp4j data structures where applicable.
A BSP client interface that uses lsp4j data structures where applicable.
Does not extend bsp4j BuildClient to avoid unnecessary converting between identical bsp/lsp data structures and also ignore unused endpoints like build/registerFileWatcher.
- trait MetalsBuildServer extends BuildServer with ScalaBuildServer
-
final
class
MetalsHttpClient extends MetalsLanguageClient
Editor client that implement dialogue UIs like window/showMessageRequest.
Editor client that implement dialogue UIs like window/showMessageRequest.
Goals:
- enable editor plugin authors access all functionality within Metals even if the editor plugin only supports a limited set of LSP endpoints.
Non-goals:
- Pretty UI, the interface only needs to be functional, not look nice. - Become permanent/primary interface for ordinary users. The end goal is to enable users to interact with Metals from their editor, not via a browser.
The most popular LSP clients in editors like Vim and Sublime currently have limited support so that endpoints like
window/showMessageRequestare ignored, with no workaround for users to interact with the Metals language server. This http client allows users in those editors to trigger server commands and respond to UI dialogues through their browser instead. -
final
class
MetalsHttpServer extends Cancelable
Http server
- case class MetalsInputBoxParams(value: String = null, prompt: String = null, placeholder: String = null, password: java.lang.Boolean = null, ignoreFocusOut: java.lang.Boolean = null, valueSelection: Array[Int] = null) extends Product with Serializable
- case class MetalsInputBoxResult(value: String = null, cancelled: java.lang.Boolean = null) extends Product with Serializable
- trait MetalsLanguageClient extends LanguageClient
- class MetalsLanguageServer extends Cancelable
-
final
case class
MetalsServerConfig(bloopProtocol: BloopProtocol = BloopProtocol.default, globSyntax: GlobSyntaxConfig = GlobSyntaxConfig.default, statusBar: StatusBarConfig = StatusBarConfig.default, slowTask: SlowTaskConfig = SlowTaskConfig.default, executeClientCommand: ExecuteClientCommandConfig = ExecuteClientCommandConfig.default, showMessage: ShowMessageConfig = ShowMessageConfig.default, showMessageRequest: ShowMessageRequestConfig = ShowMessageRequestConfig.default, isNoInitialized: Boolean = ..., isExitOnShutdown: Boolean = ..., isHttpEnabled: Boolean = ..., isInputBoxEnabled: Boolean = ..., isVerbose: Boolean = ..., isAutoServer: Boolean = ..., isWarningsEnabled: Boolean = ..., icons: Icons = Icons.default, statistics: StatisticsConfig = StatisticsConfig.default, compilers: PresentationCompilerConfigImpl = CompilersConfig()) extends Product with Serializable
Configuration parameters for the Metals language server.
Configuration parameters for the Metals language server.
- bloopProtocol
the protocol to communicate with Bloop.
- statusBar
how to handle metals/status notifications.
- slowTask
how to handle metals/slowTask requests.
- showMessage
how to handle window/showMessage notifications.
- showMessageRequest
how to handle window/showMessageRequest requests.
- isNoInitialized
set true if the editor client doesn't call the
initializednotification for some reason, see https://github.com/natebosch/vim-lsc/issues/113- isHttpEnabled
whether to start the Metals HTTP client interface. This is needed for clients with limited support for UI dialogues like Sublime Text that don't implement window/showMessageRequest yet.
- icons
what icon set to use for messages.
- case class MetalsSlowTaskParams(message: String) extends Product with Serializable
- case class MetalsSlowTaskResult(cancel: Boolean) extends Product with Serializable
-
case class
MetalsStatusParams(text: String, show: java.lang.Boolean = null, hide: java.lang.Boolean = null, tooltip: String = null, command: String = null) extends Product with Serializable
Arguments for the metals/status notification.
Arguments for the metals/status notification.
- text
The text to display in the status bar.
- show
if true, show the status bar.
- hide
if true, hide the status bar.
- tooltip
optional display this message when the user hovers over the status bar item.
- command
optional command that the client should trigger when the user clicks on the status bar item.
-
class
MetalsSymbolSearch extends SymbolSearch
Implementation of SymbolSearch that delegates to WorkspaceSymbolProvider and SymbolDocumentationIndexer.
-
final
class
MutableCancelable extends Cancelable
Open collection of cancelables that should cancel together
- final class MutableMd5Fingerprints extends Md5Fingerprints
- case class NonZeroExitCode(statusCode: Int) extends Exception with Product with Serializable
-
class
PresentationCompilerClassLoader extends ClassLoader
ClassLoader that is used to reflectively invoke presentation compiler APIs.
ClassLoader that is used to reflectively invoke presentation compiler APIs.
The presentation compiler APIs are compiled against exact Scala versions of the compiler while Metals only runs in a single Scala version. In order to communicate between Metals and the reflectively loaded compiler, this classloader shares a subset of Java classes that appear in method signatures of the
PresentationCompilerclass. - abstract class ProgressTicks extends AnyRef
-
class
QuietInputStream extends FilterInputStream
A delegate input stream that gracefully fails when the underlying stream is closed.
A delegate input stream that gracefully fails when the underlying stream is closed.
This class exists to suppress lsp4j logs like this:
WARNING: Failed to send notification message. org.eclipse.lsp4j.jsonrpc.JsonRpcException: java.io.IOException: Stream Closed at org.eclipse.lsp4j.jsonrpc.json.StreamMessageConsumer.consume(StreamMessageConsumer.java:72) at org.eclipse.lsp4j.jsonrpc.Launcher$Builder.lambda$wrapMessageConsumer$0(Launcher.java:312) at or
-
class
QuietOutputStream extends FilterOutputStream
A delegate output stream that gracefully fails when the underlying stream is closed.
A delegate output stream that gracefully fails when the underlying stream is closed.
This class exists to suppress lsp4j logs like this:
WARNING: Failed to send notification message. org.eclipse.lsp4j.jsonrpc.JsonRpcException: java.io.IOException: Stream Closed at org.eclipse.lsp4j.jsonrpc.json.StreamMessageConsumer.consume(StreamMessageConsumer.java:72) at org.eclipse.lsp4j.jsonrpc.Launcher$Builder.lambda$wrapMessageConsumer$0(Launcher.java:312) at or
- final class ReferenceProvider extends AnyRef
- case class ReferencesResult(symbol: String, locations: Seq[Location]) extends Product with Serializable
-
case class
ResolvedSymbolOccurrence(distance: TokenEditDistance, occurrence: Option[SymbolOccurrence]) extends Product with Serializable
A symbol occurrence that appeared with the given edit distance
- case class SbtDigest(md5: String, status: Status, millis: Long) extends Product with Serializable
-
final
class
SbtDigests extends AnyRef
Wrapper around the sbt_digest sql table.
- case class ScalaTarget(info: BuildTarget, scalac: ScalacOptionsItem) extends Product with Serializable
- final case class ShowMessageConfig(value: String) extends Product with Serializable
- final case class ShowMessageRequestConfig(value: String) extends Product with Serializable
- final case class SlowTaskConfig(value: String) extends Product with Serializable
- final case class StatisticsConfig(value: String) extends Product with Serializable
-
final
class
StatusBar extends Cancelable
Manages sending metals/status notifications to the editor client.
Manages sending metals/status notifications to the editor client.
Some design constraints and design decisions: - we should publish no more than status update per second so the user has time to read the notification. - there is only one active status bar notification at each time, in case there are multiple candidates we pick the item with higher priority. - it's acceptable that a low priority notification may never appear in the status bar. - long-running jobs like compilation or "import workspace" are active as long as the attached
Future[_]is not completed. - final case class StatusBarConfig(value: String) extends Product with Serializable
- final class Tables extends Cancelable
-
class
TaskProgress extends AnyRef
Denotes how much of a task has been completed.
-
trait
Time extends AnyRef
Wrapper around
System.nanoTimeto allow easier testing. - case class Timed[T](value: T, timer: Timer) extends Product with Serializable
- class Timer extends AnyRef
-
final
class
TokenEditDistance extends AnyRef
Helper to map between position between two similar strings.
-
final
class
Trees extends AnyRef
Manages parsing of Scala source files into Scalameta syntax trees.
Manages parsing of Scala source files into Scalameta syntax trees.
- provides the latest good Scalameta tree for a given source file similar as
Buffersprovides the current text content. - publishes diagnosticsForDebuggingPurposes for syntax errors. -
case class
UserConfiguration(javaHome: Option[String] = None, sbtScript: Option[String] = None, scalafmtConfigPath: meta.RelativePath = ..., symbolPrefixes: Map[String, String] = ...) extends Product with Serializable
Configuration that the user can override via workspace/didChangeConfiguration.
Configuration that the user can override via workspace/didChangeConfiguration.
- javaHome
The Java home location used to detect src.zip for JDK sources.
-
case class
UserConfigurationOption(key: String, default: String, example: String, title: String, description: String) extends Product with Serializable
A setting that users can configure via LSP workspace/didChangeConfiguration.
A setting that users can configure via LSP workspace/didChangeConfiguration.
- See also
UserConfiguration.optionsfor available options.
-
final
class
Warnings extends AnyRef
A helper to construct clear and actionable warning messages.
-
class
WorkspaceSearchVisitor extends SymbolSearchVisitor
A symbol search visitor for
workspace/symbol.A symbol search visitor for
workspace/symbol.- workspace symbols are converted directly to l.SymbolInformation - classpath symbols are converted into "goto definition" requests, which creates files on disk, and then into l.SymbolInformation.
-
final
class
WorkspaceSymbolProvider extends AnyRef
Implements workspace/symbol for both workspace sources and dependency classpath.
-
case class
WorkspaceSymbolsIndex(bloom: BloomFilter[CharSequence], symbols: Seq[WorkspaceSymbolInformation]) extends Product with Serializable
An index of symbols defined in workspace sources.
An index of symbols defined in workspace sources.
The path is stored as keys in
WorkspaceSymbolProvider.- bloom
the
Fuzzy.bloomFilterSymbolStringsindex of all symbols.- symbols
the symbols defined in this source file.
Value Members
- object BatchedFunction
- object BinarySearch
- object BloopInstall
- object BloopInstallResult extends Serializable
- object BloopProtocol extends Serializable
- object BloopServers
- object BloopSocket
- object BspServers
- object BuildChange extends Serializable
-
object
BuildInfo extends Product with Serializable
This object was generated by sbt-buildinfo.
- object BuildServerConnection extends Serializable
- object BuildTargets
- object BuildTool extends Serializable
-
object
CancelTokens
Constructs an async
CancelToken.Constructs an async
CancelToken.The
CancelCheckerAPI in lsp4j is un-sufficient for our needs because we want to get aFuture[Boolean]that completes totruewhen the user cancels a request, allowing us to abort expensive computation like typechecking as soon as possible. WithCancelChecker, we need to explicitly calltoken.checkCancelled(), which is not possible inside the compiler. - object Cancelable
-
object
ClientCommands
Optional commands that metals expects the client to implement.
-
object
ConcurrentHashSet
Helper to construct a concurrent mutable set.
- object Configs
- object Confirmation
-
object
Debug
Small utilities that are helpful for println debugging.
- object DefinitionResult extends Serializable
- object DidFocusResult extends Enumeration
- object Directories
- object DocumentSymbolConfig extends Serializable
- object Embedded
- object EmptyResult
-
object
EmptyScalafmtReporter extends ScalafmtReporter
A Scalafmt reporter that ignores all messages
- object ExecuteClientCommandConfig extends Serializable
- object FoldingRangeProvider
-
object
GlobalTrace
Manages JSON-RPC tracing of incoming/outgoing messages via BSP and LSP.
- object Icons
- object JavaBinary
- object JdbcEnrichments
-
object
JvmOpts
Support for the .jvmopts file loaded by the sbt launcher script as alternative to command line options.
-
object
LanguageClientLogger extends Writer
Scribe logging handler that forwards logging messages to the LSP editor client.
- object Memory
-
object
Messages extends Messages
Constants for requests/dialogues via LSP window/showMessage and window/showMessageRequest.
-
object
MetalsEnrichments extends DecorateAsJava with DecorateAsScala with MtagsEnrichments
One stop shop for all extension methods that are used in the metals build.
One stop shop for all extension methods that are used in the metals build.
Usage:
import scala.meta.internal.metals.MetalsEnrichments._ List(1).asJava Future(1).asJava // ...
Includes the following converters from the standard library:
import scala.compat.java8.FutureConverters._ import scala.collection.JavaConverters._
If this doesn't scale because we have too many unrelated extension methods then we can split this up, but for now it's really convenient to have to remember only one import.
- object MetalsHttpServer
- object MetalsLogger
- object MetalsServerConfig extends Serializable
-
object
NoopLanguageClient extends MetalsLanguageClient
A language client that ignores all requests.
A language client that ignores all requests.
Used during shutdown procedure to ensure no status bar updates or log messages are published during shutdown.
- object ProgressTicks
- object ReferencesResult extends Serializable
- object SbtDigest extends Serializable
-
object
SbtOpts
Support for the .sbtopts file loaded by the sbt launcher script as alternative to command line options.
- object SbtVersion
- object ScalaVersions
-
object
ServerCommands
LSP commands supported by the Metals language server.
- object ShowMessageConfig extends Serializable
- object ShowMessageRequestConfig extends Serializable
- object SlowTaskConfig extends Serializable
- object StatisticsConfig extends Serializable
- object StatusBarConfig extends Serializable
- object StringCase
-
object
Synthetics
Utilities to work with SemanticDB synthetics.
- object TaskProgress
- object Time
- object Timed extends Serializable
- object Timer
- object TokenEditDistance
- object Urls
- object UserConfiguration extends Serializable
- object WorkspaceSymbolProvider